作用域-》作用範圍
命名空間就是存放名字的地方,是對棧區的劃分
有了命名空間之後,就可以在棧區中存放相同的名字,詳細的命名空間,分為三種:內建命名空間、全域性命名空間、區域性命名空間
內建命名空間存放的是python直譯器內建的名字,如print、input、len
存活週期:python直譯器啟動則產生,python直譯器關閉則銷毀
存放的是頂級的名字,只要不是函式內定義、也不是內建的,剩下的都是全域性命名空間的名字
存活週期:python檔案執行則產生,python檔案執行完畢後銷毀
x =
10# 頂頭寫
deffunc()
:# 是全域性
x =11# 不是頂頭寫 不是全域性
print
(x)if1:
# 是全域性
y =123# 是全域性
函式內的名字,在呼叫函式時,執行函式體**過程中產生的函式內的名字
存活週期:在呼叫函式時則產生,函式呼叫完畢後則銷毀
內建命名空間》全域性命名空間》區域性命名空間
區域性命名空間》全域性名空間》內建命名空間
內建命名空間
全域性命名空間
區域性命名空間
如果當前在區域性命名空間:區域性命名空間—>全域性命名空間->內建命名空間
# input=333
deffunc()
:# input=444
print
(input
)func(
)
如果當前在全域性命名空間:全域性命名空間->內建命名空間
def
func()
:input
=444
func(
)print
(input
)示範1
:def
func()
:print
(x)x=
111func(
)
命名空間可以理解為一層套一層的關係,問題是巢狀關係是在函式定義階段生成的,
非常重要的結論:命名空間的"巢狀"關係是以函式定義階段為準,與呼叫位置無關
# 示範2:命名空間的"巢狀"關係是以函式定義階段為準,與呼叫位置無關x=1
deffunc()
:print
(x)# 1
deffoo()
: x=
222print
(x)# 222
func(
)print
(x)# 222
foo()x=
1def
func()
:print
(x)# 報錯
因為區域性命名空間裡有x,所以x找的是區域性內的x 區域性內x在print下面,所以報錯x未定義
x =222func(
)
全域性作用域:內建命名空間、全域性命名空間
1、全域性存活
2、全域性有效:被所有函式共享
x=
111def
foo():
print
(x,id
(x))
defbar()
:print
(x,id
(x))
foo(
)bar(
)print
(x,id
(x))
部作用域: 區域性命名空間的名字
1、臨時存活
2、區域性有效:函式內有效
# 案例1
x =10
deffunc
(x):
x =20print
(x)func(x)
print
(x)# 案例2
x =[1,
2,3]
deffunc()
: x[0]
=123
func(
)print
(x)# 可變型別 區域性可以改全域性
# 案例3
x =10
deffunc()
:global x # 可以將區域性改值傳給全域性
x =20func(
)print
(x)x =
10deff1(
):x =
111deff2(
):nonlocal x
x =222 f2(
)print
(x)print
(x)
day13 函式入門
目錄2.呼叫函式 3.函式的返回值 函式就相當於具備某一功能的工具 函式的使用要遵循乙個原則 先定義 後呼叫 冗餘,程式的組織結構不清晰,可讀性差 可維護性擴充套件性差 函式定義的語法 def 函式名 引數1,引數2 文件描述 函式體return 值函式分為定義和呼叫兩個階段 定義函式 只檢測語法,...
Python菜鳥入門 day13程式設計學習
day01基礎知識 day02知識分類 day03運算子 day04數字與字串 day05列表 day06元組與字典 day07條件與迴圈 day08函式概念 day09資料結構 day10模組介紹 day11檔案操作 day12程式設計學習 day13程式設計學習 day14程式設計學習 day1...
python之路 day13 模組
1,什麼是模組 模組就是系統功能的集合體,在python中,乙個py檔案就是乙個模組,例如 module.py 其中module叫做模組名 2,使用模組 2.1 import匯入模組 首次帶入模組發生三件事 1,建立乙個模組的命名空間 2,執行模組對應檔案,將產生的名字存放於1中的命名空間 3,在當...