lambda [arg1[,arg2,…argn]]:表達式
簡單語法:
lambda 參數1,參數2,… : 表達式
<code>def func(num1,num2):
return num1+num2
res = func(1,2) //函數形式求和/<code>
與上面代碼功能相同。
<code>lambdaAdd = lambda num1,num2 : num1+num2
res = lambdaAdd(10,20) //表達式形式/<code>
<code>lp = lambda x : print(x) //lambda內部可以調用系統函數
lp(10)/<code>
<code>import time #導入time模塊
def showTime(t):
return time.strftime('%Y-%m-%d/%H:%M:%S',t)
tlp = lambda t : print(showTime(t))
tlp(time.localtime()) #lambda內部可以調用自定義函數/<code>
<code>lp = lambda x : [n ** 2 for n in range(x)]
l = lp(5)
print(l) #lambda內部可以使用推導式/<code>
<code>lp = lambda num1,num2,num3 = 10 : num1 + num2 + num3
l = lp(20,5) //內部可使用缺省值/<code>
<code>lp = lambda *args : [ n ** 2 for n in args]
l = lp(10,5,30)
print(l) #可使用元組可變參數/<code>
<code>lp = lambda **kw : [item for item in kw.items()]
l = lp(**{'name':'張三','age':12,'gender':'男'})
print(l) #使用可變字典類型參數/<code>
- 高階函數
在Python中可以使用函數作為參數
<code>def func(a,b,f):
\t\t\t\treturn f(a) + f(b)
print(func(1,2,abs)) #可以傳系統函數,有可使用自定義函數。/<code>
- 裝飾器
更多是為了提高代碼的複用性
<code>#不適用裝飾器
def func():
\t\tprint('hello world')
def func_zhuangsi():
print('life is short,I use python')
func()
print('python 就是好')
if __name__ == '__main__':
func_zhuangsi()/<code>
<code>#使用裝飾器
def zhaungshiqi(f): #f代表被裝飾的函數func()
print('**********')
f()
print('~~~~~~~~~~~~~')
@zhaungshiqi #裝飾器的使用方法,不用調用,裝飾器直接執行
def func():
\t\t\t\tprint('這是主要的語句')/<code>
- 生成器(用來開闢一個連續的內存空間,用來存儲數據)
1.推導式獲取到生成器對象,使用小括號
<code>gener = ( n**2 for n in range(5))/<code>
2.使用yield方式創建生成器
<code>def gen():
\t\t\tfor n in range(5):
\t\t\t\t\t\tyield n**2
gener = gen()
for n in gener:
\t\t\tprint(n)/<code>
yield是一個類似return的關鍵字,只是在這個返回的是生成器
- 變量作用域
- 全局變量。函數外部。全局可訪問
- 全局變量要在函數內使用 要加global
- 局部變量。函數內部。函數內訪問
- global 定義全局變量 global x,y,z
- 閉包(隱藏內部函數的名稱,為了達到內部函數的安全性)
- 就是在函數中定義函數。
- 外函數必須返回對內函數的引用。
- 外部函數必須使用return返回的是內函數的名稱
- 內部函數使用return 返回數據
lambda函數求斐波拉契數列
<code>fei = lambda n : 1 if n <= 2 else fei( n-1 )+fei( n-2 )
for n in range (1,11):
\t\t\t\tprint( fei(n) )/<code>
閱讀更多 小和月亮 的文章