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



       

        





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章