1.
break语句:用于跳出最近的 for 或 while 循环。(不在执行循环)
continue语句:表示继续下一次迭代(跳出本次循环)
pass语句:相当于轮空
2
*函数接收参数为元组
例如
def myfun(*args): #相当于 def myfun(1,2,3) ==> args 就相当于(1,2,3)
for a in args:
print(a)
** 表示函数接收参数为一个字典
def myfun(**args) :#相当于 def myfun({a:1,b:2,c:3}) ==>args 就相当于{a:1,b:2,c:3}
for k,v in args:
print(k,":",v)
例子:
def conct(*args,sep='/'):
sep.join(args)
conct('hello','world',sep=',')
输出:hello,world
3,lambda
下面是一些lambda函数示例:
lambda x, y: xy;函数输入是x和y,输出是它们的积xy
lambda:None;函数没有输入参数,输出是None
lambda *args: sum(args); 输入是任意个数的参数,输出是它们的和(隐性要求是输入参数必须能够进行加法运算)
lambda **kwargs: 1;输入是任意键值对参数,输出是1\
4.列表的特性(list)
- list.append(x)
添加一个元素到列表的末尾。 - list.extend(L)
将给定列表L中的所有元素附加到原列表a的末尾
def f():
a=[]
a.append('a')
a.extend('we')
print(a)
f()
输出:[‘a’,‘w’,‘e’]
- list.insert(i, x)
在给定位置插入一个元素。第一个参数为被插入元素的位置索引,因此 a.insert(0, x) 在列表头插入值, a.insert(len(a), x)相当于 a.append(x). - list.remove(x)
删除列表中第一个值为 x 的元素,例如:a.remove(‘uu’) - list.pop([i])
删除列表中给定位置的元素并返回它。如果没有给定位置,a.pop()将会删除并返回列表中的最后一个元素.例如:z=a.pop(0) - list.clear()
删除列表中所有的元素。相当于 del a[:]. - list.index(x)
返回列表中第一个值为 x 的元素的索引。如果没有这样的元素将会报错。 - list.count(x)
返回列表中 x 出现的次数。 - 列表作为栈使用
5.1.1. 列表作为栈使用
列表方法使得将列表用作堆栈非常容易,其中添加的最后一个元素是可提取的第一个元素(“last-in,first-out”)。使用 append()添加项到栈顶。使用无参的 pop() 从栈顶检出项。例如:
>>>
>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]
5.1.2. 列表作为队列使用
列表也有可能被用来作队列——先添加的元素被最先取出 (“先进先出”);然而列表用作这个目的相当低效。因为在列表的末尾添加和弹出元素非常快,但是在列表的开头插入或弹出元素却很慢 (因为所有的其他元素必须向右或向左移一位)。
若要实现一个队列, collections.deque 被设计用于快速地从两端操作。例如:
from collections import deque
queue = deque(["Eric", "John", "Michael"])
queue.append("Terry") # Terry arrives
queue.append("Graham") # Graham arrives
queue.popleft() # The first to arrive now leaves
queue.popleft() # The second to arrive now leaves
queue # Remaining queue in order of arrival
zip()函数:
def f():
'''
issubclass
'''
a=[1,2,3]
b=[4,5]
print(list(zip(a,b)))
输出[(1,4),(2,5)]
字典
dict()构造函数直接从键-值对序列构建字典:
dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
字典的循环:
循环遍历字典时,可以使用该items()方法同时检索密钥和相应的值。
knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():
print(k, v)
循环遍历序列时,可以使用该enumerate()函数同时检索位置索引和相应的值。
for i, v in enumerate(['tic', 'tac', 'toe']):
print(i, v)
文件对象的读写
open()返回一个文件对象,最常见的用法带有两个参数:open(filename, mode)。参数1是含有文件名的字符串。参数2也是字符串,以几个字符说明该文件的使用方式。mode为’r’表示文件只读;w表示文件只进行写入(已存在的同名文件将被删掉);'a’表示打开文件进行追加;写入到文件中的任何数据将自动添加到末尾。'r+‘表示打开文件进行读取和写入。mode参数是可选的;如果省略,则默认为’r’。
- 可以调用f.read(size) ,该方法读取若干数量的数据并以字符串(在文本模式中)或字节对象(在二进制模式中)形式返回它
- f.readline()从文件读取一行数据;字符串结尾会带有一个换行符 (\n)
- f.write(string) 将 字符串 的内容写入到该文件,返回写入的字符数。
- f.tell()返回一个整数,代表文件对象在文件中的当前的位置,在二进制模式中该数值表示自文件开头到指针处的字节数,在文本模式中则是不准确的
- f.seek(offset,from_what)要更改该文件对象的位置,可以使用f.seek(offset, from_what)。位置由参考点加上offset 计算得来;参考点的选择则来自于from_what参数。当from_what的值为0,1,2 时,分别使用文件开头、当前文件位置和文件结尾作为参考点。from_what 可以省略,默认值为 0,表示以文件的开始作为参考点
- 处理文件对象时使用with关键字是很好的做法。这样做的好处在于文件用完后会自动关闭,即使过程中发生异常也没关系。它还比编写一个等同的try-finally语句要短很多:
`with open('workfile', 'r') as f:
read_data = f.read()
f.closed
json 存储数据
格式转为json
>>> json.dumps([1, ‘simple’, ‘list’])
‘[1, “simple”, “list”]’json解码:
x = json.load(f)
强制制作异常
raise 语句允许程序员强行引发一个指定的异常
>>> raise NameError('HiThere')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: HiThere
finally必须执行
>>> def divide(x, y):
... try:
... result = x / y
... except ZeroDivisionError:
... print("division by zero!")
... else:
... print("result is", result)
... finally:
... print("executing finally clause")
...
>>> divide(2, 1)
result is 2.0
executing finally clause
>>> divide(2, 0)
division by zero!
executing finally clause
>>> divide("2", "1")
executing finally clause
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 3, in divide
global和nonlocal的区别
第一,两者的功能不同。global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)。
第二,两者使用的范围不同。global关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global修饰后也可以直接使用,而nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了相应的局部变量,否则会发生错误(见第一)
继承
当然,一个语言如果没有支持继承特性不值得称作“类”
class DerivedClassName(BaseClassName):
多继承:
class DerivedClassName(Base1, Base2, Base3):
dir()函数
内置函数dir()用于找出模块定义的名称。它返回一个排序的字符串列表
调用函数
text.py
import sys
import numpy as np
from text2 import Text
t=Text()
text2.py class Text():
def text2_f():
print(‘123’)
输出前缀:f
格式化的字符串文字(也简称为f字符串)允许您通过在字符串前加上f或者F将表达式写为 字符串
例如:
import math
print(f’The value of pi is approximately {math.pi:.3f}.’)
The value of pi is approximately 3.142.
私有变量和方法
在python中定义私有变量只需要在变量名或函数名前加上 ”__“两个下划线,那么这个函数或变量就是私有的了。
在内部,python使用一种 name mangling 技术,将 __membername替换成 _classname__membername,也就是说,类的内部定义中,
所有以双下划线开始的名字都被"翻译"成前面加上单下划线和类名的形式。
例如:为了保证不能在class之外访问私有变量,Python会在类的内部自动的把我们定义的__spam私有变量的名字替换成为
_classname__spam(注意,classname前面是一个下划线,spam前是两个下划线),因此,用户在外部访问__spam的时候就会
提示找不到相应的变量。 python中的私有变量和私有方法仍然是可以访问的;访问方法如下:
私有变量:实例._类名__变量名
私有方法:实例._类名__方法名()
例如:
class Text():
def __init__(self):
self.__data=['23']
self.infor=['12']
def add(self,items):
self.__data.append(items)
def show(self):
print(self._data)
t=Text()
# print(t.__data)
print(t.__data) #会报错
print(t._Text__data) #不会报错
其实,Python并没有真正的私有化支持,但可用下划线得到伪私有。 尽量避免定义以下划线开头的变量!
(1)_xxx "单下划线 " 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量,
需通过类提供的接口进行访问;不能用’from module import *'导入
(2)__xxx 类中的私有变量/方法名 (Python的函数也是对象,所以成员方法称为成员变量也行得通。),
" 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
(3) __ xxx __ 系统定义名字,前后均有一个“双下划线” 代表python里特殊方法专用的标识,如 init()代表类的构造函数。
生成迭代器
for语句调用容器对象的iter()方法
>>> s = 'abc'
>>> it = iter(s)
>>> it
<iterator object at 0x00A1DB50>
>>> next(it)
'a'
>>> next(it)
'b'
>>> next(it)
'c'
>>> next(it)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
next(it)
StopIteration
os 获取当前文件所在的位置
import os
path=os.getcwd()
print(path)
输出:c://workspace
glob模块提供一个对目录中的文件进行通配符搜索的函数
>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']
字符串模板的匹配
一种运用正则表达式
>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'
另一种:使用replace
>>> 'tea for too'.replace('too', 'two')
'tea for two'
urllib 处理request
>>> from urllib.request import urlopen
>>> with urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl') as response:
... for line in response:
... line = line.decode('utf-8') # Decoding the binary data to text.
... if 'EST' in line or 'EDT' in line: # look for Eastern Time
... print(line)
<BR>Nov. 25, 09:43:32 PM EST
smtplib 处理邮件发送
>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
... """To: jcaesar@example.org
... From: soothsayer@example.org
...
... Beware the Ides of March.
... """)
>>> server.quit()
datetime模块提供了处理日期和时间的简单和复杂的方法
>>> # dates are easily constructed and formatted
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'
>>> # dates support calendar arithmetic
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368
数据的压缩:zlib,gzip,bz2,lzma zipfile和tarfile。
#-*-coding=utf-8-*-
'''
压缩和解压函数
'''
#-*-coding=utf-8-*-
'''
压缩和解压函数
'''
import zlib
import zipfile
def zlib_demo():
data=b'hello world hello world hello world '
print('start data:',len(data))
compress_data=zlib.compress(data)
print('compress data',len(compress_data))
print('decompress darta',len(zlib.decompress(compress_data)))
#文件对象
# with open('inform.txt','wb') as file:
# file.write(zlib.compress(data))
with open('inform.txt','rb') as file:
zlib.decompress(file.read())
def zipfile_demo():
#创建压缩包
with zipfile.ZipFile(r'file.zip','a') as file:
#向压缩包中添加文件
file.write('inform.txt')
#测试压缩包
error =file.testzip()
if error:
print('压缩文件错误',error)
return
if __name__ == '__main__':
zipfile_demo()
collections 模块提供了一个 deque()对象,像list但是拥有从左边更快的赋值速度和读取速度,但是从中间检索会更慢
例如:
>>> from collections import deque
>>> d = deque(["task1", "task2", "task3"])
>>> d.append("task4")
>>> print("Handling", d.popleft())
Handling task1
十进制浮点算术:例如Decimal(‘0.1’),一定不要忘了括号内的引号
decimal模块提供了用于十进制浮点运算的Decimal数据类型。与内置的float二进制浮点的实现相比,该类特别有用
财务应用程序和其他用途,需要精确的十进制表示形式,
控制精度,
对符合法律或法规要求,舍入的控制
跟踪有效小数位
用户希望计算结果与手工计算相符的应用程序
>>> Decimal('1.00') % Decimal('.10')
Decimal('0.00')
>>> 1.00 % 0.10
0.09999999999999995
>>> sum([Decimal('0.1')]*10) == Decimal('1.0')
True
>>> sum([0.1]*10) == 1.0
False
用pip管理软件包
一种方式:通过制定的一个包的名称来安装最新版本的包
pip install novas
第二种方式:
通过给出包的名称后面==和版本号来安装一个软件包
pip install requets=2.70
通过运行pip install upgrade 来升级包到最新版本
pip uninstall 后面跟随一个或多个包的名称从虚拟环境中删除这些包