Python基礎三——推導式,函式,修飾器
迴圈外使用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
...
一個函式可以有多個裝飾器,靠近函式定義的裝飾器最先執行,依次向上執行