1. 程式人生 > >Python基礎三——推導式,函式,修飾器

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
...
         一個函式可以有多個裝飾器,靠近函式定義的裝飾器最先執行,依次向上執行