Python函數之返回值、作用域和局部變量
阿新 • • 發佈:2018-02-05
16px 未定義 過程 gpo mil 列表 scope 如果 info
一、函數返回值
說到返回值,相信大家肯定都認識,沒錯,就是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 False
stu_return = stu_info(‘hope‘,19,‘life‘)
print(stu_return) # 輸出:True
def 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 = 21
def func1():
age = 19
print(‘func1輸出:‘,age) # 輸出:19
def func2():
print(‘func2輸出:‘,age) # 輸出:19
return func2 # 返回函數名
val = func1() # 調用func1並將返回值賦給變量val,val = func2
print(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) #輸出:函數裏面-》 poem
change_name()
print(‘函數外面-》‘,name) #輸出:函數外面-》 poem
在函數裏修改了全局變量,當函數有很多個的時候,就會很蒙逼了(再次友情提示)。
Python函數之返回值、作用域和局部變量