循环外使用else
可用来判断for循环是否正常结束,如果调用break跳出,则会执行else
ches = []
for che in ches:
break
else:
print('no che')
使用zip()并行迭代
通过zip函数对多个进行并行迭代,zip()在最短序列用完就会停止
>>> for day,fun in zip(['mondy','sunday'],['coffe','beer','tea']):
... print(day,fun)
...
mondy coffe
sunday beer
可使用zip()遍历多个序列,在相同位移项间会创建元组
>>>list(zip(['mon','d'],['d','e'])
[('mon','d'),('d','e')]
>>>dict(zip(['mon','d'],['d','e'])
{'mon':'d','d':'e'}
enumerate(seq)可以创建一个迭代器,返回值为一个元组的序列(0,s[0]),(1,s[1])
如果seq为字典则元组的第二个元素为字典键
for i,x in enumerate(s):
pass
使用range(start, stop, setp)可生成自然数序列,setp=-1时为反向序列,默认为0
可以使用range()和len()组合来迭代序列的索引
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
推导式
列表[],字典{},集合{},生成器()元组没有推导式
expression for item in iterable if condition
可有多个for...语句嵌套,每个for语句可以有自己单独的if判断
#列表推导式
[row*col for row in range(4) for col in range(10) if col<7]
#字典推导式
{letter:word.count(letter) for letter in word}
#集合推导式
{letter for letter in word}
生成器推导式
(number for number in range(44))
生成器只能运行一次,再次运行会发现已经被擦除了
>>> number_it = (number for number in range(10))
>>> list(number_it)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(number_it)
[]
pass 语句什么也不做。当语法上需要语句但程序不需要动作时
通常用于创建最小的类
>>> class MyEmptyClass:
... pass
或用于编写新代码时作为函数体或控制体的占位符
一个函数如果不显示调用return,则默认返回None
函数调用的实际参数在函数被调用时引入被调函数的局部符号表;因此,参数的传递使用 传值调用 (这里的 值 始终是对象的 引用,不是对象的值)。
>>> def changeList(s):
... s.append('newValue')
...
>>> l= list(range(10))
>>> changeList(l)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'newValue']
函数参数
def myfunc( arg1,arg2=value,*args,**kwargs):
pass
位置参数
传入参数值按照顺序一次复制过去
关键字参数
调用函数时可以指定对应参数名字,避免位置参数带来的混乱
指定默认参数值 arg2=value
使用*收集位置参数,将一组可变数量的位置参数合成参数值的元组
如果函数同时有限定的位置参数,则*args会收集剩下的参数
使用**收集关键字参数,可将关键字参数收集到字典中
文档字符串
在函数开始部分由''' '''定义
help(func)可获取文档字符串,或func.__doc__返回字符串
函数名不可变,因此可以用作字典的键
在函数中调用全局变量需要使用global语句
在内部函数中使用外部变量需要使用nonlocal关键字
匿名函数lambda args : expression
a = lambda x,y:x+y
b = a(2,3) # 5
装饰器是一个函数,将一个函数作为输入并返回另一个函数,主要用来包装另一个函数或类
利用装饰器可以抽离出大量的与函数功能无关的雷同代码进行重用。
>>> def print_func(func):
... def new_func(*args,**kwargs):
... print(func.__name__)
... print('args:',args,kwargs)
... result = func(*args, **kwargs)
... return result
... return new_func
...
>>> c = print_func(add_item)
>>> c(3,4)
add_item
args: (3, 4) {}
7
可以直接在需要装饰的函数前添加装饰器名字@decorator_name
>>> @print_func
...def add_item(arg1,arg2):
... return arg1+arg2
...
一个函数可以有多个装饰器,靠近函数定义的装饰器最先执行,依次向上执行