python - 函式的作用域
阿新 • • 發佈:2018-12-21
作用域:
區域性作用域
全域性作用域
1.概念
# 全域性作用域:作用於整個程式
num = 10
print('out fun: id=',id(num))
def fun():
#區域性作用域,在函式執行時生效,函式執行結束則釋放
num =2
print('in fun:id=',id(num))
print('in fun:num = %s' %(num))
fun()
print('out fun: num=%s' %(num))
輸出:
out fun: id= 1683110288 in fun:id= 1683110160 #函式裡的num是部分作用域,函式結束就釋放 in fun:num = 2 out fun: num=10 #全域性作用域的num=10
2.global
global宣告區域性變數為全域性變數,函式結束依然生效
num = 10
def fun():
# 通過global關鍵字宣告區域性變數為全域性變數
# 函式執行完畢,變數依然生效
global num
num = 2
fun()
print(num)
輸出:
2
函式練習題:
Collatz序列
編寫一個名為collatz()的函式,它有一個名為number的引數。如果引數是偶數,那麼collatz()就打印出number//2,並返回該值。如果number是奇數,collatz()就列印並返回3*number+1。然後編寫一個程式,讓使用者輸入一個整數,並不斷對這個數呼叫collatz(),直到函式返回值1(令人驚奇的是,這個序列對於任何整數都有效,利用這個序列,你遲早會得到1!既使數學家也不能確定為什麼。你的程式在研究所謂的“Collatz序列”,它有時候被稱為“最簡單的、不可能的數學問題”)。
-
輸入:
3 -
輸出:
10
5
16
8
4
2
1
def collatz(number): if number == 1: #結束程式exit(0) exit(0) elif number % 2 == 0: return number // 2 else: return 3 * number + 1 num = int(input('Num:')) while True: num = collatz(num) #因為num不斷變化,所以num即是引數也是變數。 print(num)
輸出:
num:3
10
5
16
8
4
2
1