Python學習之旅(十一)
阿新 • • 發佈:2018-11-22
Python基礎知識(10):函式(Ⅱ)
一、全域性變數和區域性變數
區域性變數:在函式內定義的變數,在函式內使用
全域性變數:在函式外定義的變數,在程式任何地方都可以使用
1、全域性變數與區域性變數同名
這時函式內部只調用區域性變數,如果要呼叫全域性變數需要在函式內加一句“global 同名變數”
x=1 #x:全域性變數 def test(): global x x=5 #x:區域性變數 print(x) return x test()
結果:1
2、一個函式中的內層函式呼叫外層函式中的變數
內層函式呼叫外層函式中的變數要在內層函式中加一句“nonlocal 變數”
def demo1(): num=2 def demo2(): nonlocal num num+=1 return demo2() demo1() demo1()
結果:3
3、全域性變數一般不可修改,如果函式中想要修改全域性變數要加上“global 變數”語句
如果B函式要呼叫A函式中的c變數,需要在A函式內部加一句“global c”
x=1 def test1(): global x global y y=2 x=x+y print(x)return x def test2(): print(y) print(x) test1() test2()
結果:
3
2
二、函式遞迴
1、一個函式自己呼叫自己
2、有明確的結束條件:加if判斷
3、無窮遞迴:執行後它會永遠執行下去,進而導致程式崩潰
4、理論上所有遞迴函式都可以寫成迴圈的方式
計算階乘
#用迴圈語句 def fact1(num): result=num for i in range(1,num): result *=i return result print(fact1(3))#用遞迴函式 def fact2(n): if n==1: return 1 else: return n*fact2(n-1) print(fact2(3))
結果:6
5、使用遞迴函式時要防止棧溢位,解決棧溢位的方法是通過尾遞迴優化
6、匿名函式
用lambda定義,只能有一個表示式,沒有函式名
lambda x:x+1等價於def test(x):x+=1 retrun x
(1)可以把匿名函式賦值給一個變數,用該變數呼叫匿名函式
y=lambda x:x+2 y(1) 結果:3
(2)可以把匿名函式作為返回值返回