標籤:glob hang work global 未定義 function 函數返回 span 就會
一、函數傳回值
說到傳回值,相信大家肯定都認識,沒錯,就是return。
所謂傳回值可以這樣理解:函數外部的代碼要想擷取函數的執行結果,就可以在函數裡用return語句把結果返回。
那具體怎麼用呢?接著往下看:
#!/usr/bin/env python3#-*- coding:utf-8 -*-# write by congcong# return 表示一個程式的結束,他可以返回任意的元素,列表或字典def stu_info(name,age,course): print(name,age,course) if age > 18: return True else: return Falsestu_return = stu_info(‘hope‘,19,‘life‘)print(stu_return) # 輸出:Truedef stu_info(name,age,course): print(name,age,course) return ‘good‘,‘work‘ return 0 #不執行stu_return = stu_info(‘hope‘,19,‘life‘)print(stu_return) #輸出 (‘good‘, ‘work‘) ,中間逗號分隔時返迴轉為元組,第二個連續return不執行
注意:
1、函數在執行過程中只要遇到return語句,就會停止執行並返回結果,so 也可以理解為 return 語句代表著函數的結束。
2、如果未在函數中指定return,那這個函數的傳回值為None。
怎麼樣,這回不敢小看我了吧!
二、範圍
範圍(scope),程式設計概念,通常來說,一段程式碼中所用到的名字並不總是有效/可用的,而限定這個名字的可用性的代碼範圍就是這個名字的範圍。
還可以結合函數這麼理解:
python中函數就是一個範圍,局部變數放置在其範圍中程式碼完成後,範圍便產生了,範圍鏈向上尋找。
看代碼:
# -*-coding:utf-8-*-age = 21def func1(): age = 19 print(‘func1輸出:‘,age) # 輸出:19 def func2(): print(‘func2輸出:‘,age) # 輸出:19 return func2 # 返回函數名val = func1() # 調用func1並將傳回值賦給變數val,val = func2print(val) # 輸出:<function func1.<locals>.func2 at 0x000002CE667298C8>val() # 等於調用func2,返回函數定義處執行print(‘全域輸出:‘,age) # 輸出:21
三、函數局部變數和全域變數
定義:
在函數中定義的變數稱為局部變數,在程式的一開始定義的變數稱為全域變數。
區別:
1、全域變數範圍是整個程式,局部變數範圍是定義該變數的函數。
2、當全域變數與局部變數同名時,在定義局部變數的函數內,局部變數起作用;在其它地方全域變數起作用。
注意:
在函數內部,可以引用全域變數;如果全域和局部都有一個變數,函數尋找,由內而外,局部沒有,再到全域找。
看執行個體:
#-*- coding:utf-8 -*-name_out = ‘daydayup‘def change_name(): # name_in = ‘dayup‘ # 局部變數 # print(‘內部-》‘,name_in,id(name_in)) #內部定義時,優先調用,此時輸出:dayup 1997485691096 print(name_out) # 內部未定義時,便調用函數外面的change_name()print(‘外部-》‘,name_out,id(name_out)) #輸出:外部-》 daydayup 1997485709552
那麼函數裡只能定義局部變數嗎?
當然,但是一般不推薦使用,只能說慎用。看下面的執行個體:
#-*- coding:utf-8 -*-name = ‘life‘def change_name(): global name #定義全域變數 name = ‘poem‘ print(‘函數裡面-》‘,name) #輸出:函數裡面-》 poemchange_name()print(‘函數外面-》‘,name) #輸出:函數外面-》 poem
在函數裡修改了全域變數,當函數有很多個的時候,就會很蒙逼了(再次友情提示)。
Python函數之傳回值、範圍和局部變數