Python基礎知識(10):函數(Ⅱ) 一、全局變數和局部變數 局部變數:在函數內定義的變數,在函數內使用 全局變數:在函數外定義的變數,在程式任何地方都可以使用 1、全局變數與局部變數同名 這時函數內部只調用局部變數,如果要調用全局變數需要在函數內加一句“global 同名變數” 結果:1 2、 ...
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)可以把匿名函數作為返回值返回