python函数的作用域_python函数的作用域和引用范围
以下內容參考自runoob網站,以總結python函數知識點,鞏固基礎知識,特此鳴謝!
原文地址:http://www.runoob.com/python3/python3-function.html
變量作用域
Python 中,程序的變量并不是在哪個位置都可以訪問的,訪問權限決定于這個變量是在哪里賦值的。
變量的作用域決定了在哪一部分程序可以訪問哪個特定的變量名稱。Python的作用域一共有4種,分別是:
L (Local) 局部作用域
E (Enclosing) 閉包函數外的函數中
G (Global) 全局作用域
B (Built-in) 內建作用域
以 L –> E –> G –>B 的規則查找,即:在局部找不到,便會去局部外的局部找(例如閉包),再找不到就會去全局找,再者去內建中找。
x =int(2.9)# 內建作用域g_count =0# 全局作用域defouter():o_count =1# 閉包函數外的函數中definner():i_count =2# 局部作用域
Python 中只有模塊(module),類(class)以及函數(def、lambda)才會引入新的作用域,其它的代碼塊(如 if/elif/else/、try/except、for/while等)是不會引入新的作用域的,也就是說這這些語句內定義的變量,外部也可以訪問,如下代碼:
>>>ifTrue:...msg =‘I am from Runoob‘...>>>msg
‘I am from Runoob‘>>>
實例中 msg 變量定義在 if 語句塊中,但外部還是可以訪問的。
如果將 msg 定義在函數中,則它就是局部變量,外部不能訪問:
>>>deftest():...msg_inner =‘I am from Runoob‘...>>>msg_inner
Traceback(most recent call last):File"",line 1,inNameError:name ‘msg_inner‘isnotdefined>>>
從報錯的信息上看,說明了 msg_inner 未定義,無法使用,因為它是局部變量,只有在函數內可以使用。
全局變量和局部變量
定義在函數內部的變量擁有一個局部作用域,定義在函數外的擁有全局作用域。
局部變量只能在其被聲明的函數內部訪問,而全局變量可以在整個程序范圍內訪問。調用函數時,所有在函數內聲明的變量名稱都將被加入到作用域中。如下實例:
#!/usr/bin/python3total =0;# 這是一個全局變量# 可寫函數說明defsum(arg1,arg2 ):#返回2個參數的和."total =arg1 +arg2;# total在這里是局部變量.print("函數內是局部變量 : ",total)returntotal;#調用sum函數sum(10,20);print("函數外是全局變量 : ",total)
以上實例輸出結果:
函數內是局部變量:30函數外是全局變量:0
global 和 nonlocal關鍵字
當內部作用域想修改外部作用域的變量時,就要用到global和nonlocal關鍵字了。
以下實例修改全局變量 num:
#!/usr/bin/python3num =1deffun1():globalnum # 需要使用 global 關鍵字聲明print(num)num =123print(num)fun1()
以上實例輸出結果:
1123
如果要修改嵌套作用域(enclosing 作用域,外層非全局作用域)中的變量則需要 nonlocal 關鍵字了,如下實例:
#!/usr/bin/python3defouter():num =10definner():nonlocalnum # nonlocal關鍵字聲明num =100print(num)inner()print(num)outer()
以上實例輸出結果:
100100
另外有一種特殊情況,假設下面這段代碼被運行:
#!/usr/bin/python3a =10deftest():a =a +1print(a)test()
以上程序執行,報錯信息如下:
Traceback(most recent call last):File"test.py",line 7,intest()File"test.py",line 5,intest
a =a +1UnboundLocalError:localvariable ‘a‘referenced before assignment
錯誤信息為局部作用域引用錯誤,因為 test 函數中的 a 使用的是局部,未定義,無法修改。
原文地址:http://www.cnblogs.com/saintdingspage/p/7788958.html
總結
以上是生活随笔為你收集整理的python函数的作用域_python函数的作用域和引用范围的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支付宝发布助力实体年度报告:降费让利超百
- 下一篇: 活动拉满!当当网入驻京东 买书更便宜 买