filter(lambda x: x>10, li)
語法規則: lambda 引數 : 表示式
簡單的函式,可以不用使用def定義乙個函式,使用匿名函式即可
函式呼叫,類似於filter、map等函式裡面,可以使用匿名函式來處理
提高開發效率,匿名函式的合理利用能夠讓那個**更加簡潔
print((lambda x,y:x+y)(11,22))33
f = lambda x,y:x+yprint(f(11,22))
33
li = [1,3,34,2,4,6,86,4,4]#def func(n):
#if n>4:
#return n
aa = filter(lambda n:n>4,li)
(list(aa))
[34, 6, 86]
外部不能訪問函式內部變數:
deffunc():
a = 222 #
區域性變數
print('
函式裡邊:
',a)
return
afunc()
print('
函式外面:
',a)
函式裡邊: 222traceback (most recent call last):
file
"/home/pyvip/projects/home/pyvip/projects/基礎班/複習.py
", line 7, in
print('
函式外面:
',a)
nameerror: name 'a
'isnot defined
函式裡面不能修改函式外部變數:
a = 11 #全域性變數
deffunc():
#global a
a += 1 #
區域性變數
print('
函式裡邊:
',a)
return
afunc()
print('
函式外面:
',a)
file
"/home/pyvip/projects/home/pyvip/projects/基礎班/複習.py
", line 7, in
func()
file
"/home/pyvip/projects/home/pyvip/projects/基礎班/複習.py
", line 4, in
func
a += 1 #
區域性變數
unboundlocalerror: local variable '
a' referenced before assignment
函式內部能夠訪問函式外部變數:
a = 11 #全域性變數
deffunc():
#a = 222 #區域性變數
print('
函式裡邊:
',a)
return
afunc()
print('
函式外面:
',a)
函式裡面和函式外部變數名相同:
a = 11 #全域性變數
deffunc():
a = 222 #
區域性變數
print('
函式裡邊:
',a)
return
afunc()
print('
函式外面:
',a)
函式裡邊: 222函式外面: 11
a = 11 #全域性變數
deffunc():
global a #
宣告a是個全域性變數
a += 1 #
區域性變數
print('
函式裡邊:
',a)
return
afunc()
print('
函式外面:
',a)
函式裡邊: 12函式外面: 12
a = 11 #全域性變數
deffunc():
#global a #宣告a是個全域性變數
a = 666 #
區域性變數
print('
外層函式func:
',a)
deffun1():
nonlocal a
#宣告a的修改對外層函式有效
a = 999
print('
內層函式fun1:
,a) fun1()
func()
print('
函式外面:
',a)
外層函式func: 666內層函式fun1: 999函式外面: 11
遞迴中可以函式自身呼叫自身,但是使用時類似於條 件迴圈一樣,要有遞迴的終止條件
使用遞迴時,常常可以讓**更加簡潔 遞迴會占用比較多的記憶體,當遞迴次數比較多時,效能就會降低, 因此不建議多使用遞迴
deffun(n):
if n==1:
return
n
else
:
return n*fun(n-1)
a = fun(6)
(a)720
閉包是函式裡面巢狀函式,外層函式返回裡層函式,這種情況稱之為閉包 閉包是概念,不是某種函式型別,和遞迴的概念類似,就是種特殊的函式呼叫 閉包可以得到外層函式的區域性變數,是函式內部和函式外部溝通的橋梁,大多數時候和和裝飾器一起使用
deffun():
deffun1():
print('
巢狀的內層函式')
print('
-----呼叫了fun-----')
return
fun1
result =fun()
print(result)
deffun1():
a = 1
def fun2(): #
1.函式裡邊巢狀乙個函式
print('
*****fun2*****==
',a) #
2.外層函式返回的是內層函式的函式名
return fun2 #
3.內層函式有引用外層函式的變數
a =fun1()
a()*****fun2*****== 1
09 匿名函式 函式作用域 閉包 遞迴
語法規則 lambda 引數 表示式 filter lambdax x 10,li 匿名函式 可以賦給乙個變數,重複使用。fun1 lambda x x 10 print fun1 10 列印結果 100fun lambda x x 10 5 print fun 列印結果 50 01外部不能訪問函式...
Golang遞迴函式 函式型別 匿名函式和閉包
遞迴指函式可以直接或間接的呼叫自身。遞迴函式通常有相同的結構 乙個跳出條件和乙個遞迴體。所謂跳出條件就是根據傳入的引數判斷是否需要停止遞迴,而遞迴體則是函式自身所做的一些處理。通過迴圈實現1 2 3 100 func test01 int return sum 通過遞迴實現1 2 3 100 fun...
Python函式作用域和匿名函式
匿名函式的定義 全域性變數和區域性變數的概念 global 全域性變數 和 nonlocal 區域性變數 閉包 遞迴 匿名函式 匿名函式 lambda 語法規則 lambda 引數 表示式 lambda匿名函式的格式 冒號前是引數,可以有多個,用逗號隔開,冒號右邊的為表示式 lambda返回值是乙個...