日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python函數命名空間和作用域(Local與Global)_python

作者:?python自學網 ? 更新時間: 2022-05-08 編程語言

摘要:

Python函數是一個包裝起來的代碼塊,通過前面的返回函數,閉包函數等課程,我們發(fā)現其內部變量定義在不同的位置,使用起來的效果就有所不同,這就是python函數的作用域和命名空間。

1.Local作用域

a = 100
def func5():
? ? b = 50
? ? a = 99
? ? print('函數內a', a)
? ? print('函數內b', b)

print('函數外a', a)
func5()
print('函數外b', b)

返回結果:

函數外a 100
函數內a 99
函數內b 50
Traceback (most recent call last):
? File "C:/Users/Administrator/Desktop/python知識總結/2.python自學網-通用模塊-視頻源碼/test.py", line 12, in
? ? print('函數外b', b)
NameError: name 'b' is not defined

上面函數中定義b變量,所以外面無法輸出。

2.Enclosing function locals作用域

a = 100
def func5():
? ? b = 50
? ? print('函數內a', a)
? ? print('函數內b', b)
? ? def func6():
? ? ? ? print('下層函數內a', a)
? ? ? ? print('下層函數內b', b)
? ? func6()
func5()

返回結果:

函數內a 100
函數內b 50
下層函數內a 100
下層函數內b 50

3.Global全局變量

a = 123
def func():
? ? a = 100
? ? print(a)
print(a)
func()
print(a)

a = 123
def func():
? ? global a ?# 這里不能使用nonlocal
? ? a = 100
? ? print(a)
? ? print(locals()) ?# 查看局部變量
? ? print(globals()) ?# 查看全局變量
print(a)
func()
print(a)

4.非局部變量nonlocal

def func5():
? ? b = 50
? ? print(b)
? ? def func6():
? ? ? ? nonlocal b ?# 非局部的,只適用于閉包內部
? ? ? ? b = 60
? ? ? ? print(b)
? ? func6()
? ? print(b)
func5()

5.就近原則

b = 1111
def func5():
? ? b = 50
? ? print(b)
? ? def func6():
? ? ? ? b = 60
? ? ? ? print(b) ?# 這里的b從內到外究竟查找
? ? func6()
? ? print(b)
func5()


a = 100
def func5():
? ? b = 50
? ? print(a)
? ? print(b)
? ? def func6():
? ? ? ? b = 60
? ? ? ? print(b)
? ? ? ? print(a)
func5()

6.函數執(zhí)行順序

a = 123
def func1():
? ? print(a)
? ? print(b)
func1() ?# 不能打印b
b = 456
func1() ?# 可以打印b

7.循環(huán)、判斷代碼塊中作用域問題

if True:
? ? a = 100
print(a)


for i in range(1, 10):
? ? print(i)
print(i)

循環(huán)代碼塊中沒有作用域這樣的情況。

原文鏈接:http://www.wakey.com.cn/document-func-territory.html

欄目分類
最近更新