函数的命名空间
# 函數(shù)進(jìn)階
# a = 1
# def func():
# print(a)
# func()# 命名空間和作用域
# print()
# input()
# list
# tuple#命名空間 有三種
#內(nèi)置命名空間 —— python解釋器# 就是python解釋器一啟動(dòng)就可以使用的名字存儲(chǔ)在內(nèi)置命名空間中# 內(nèi)置的名字在啟動(dòng)解釋器的時(shí)候被加載進(jìn)內(nèi)存里
#全局命名空間 —— 我們寫的代碼但不是函數(shù)中的代碼# 是在程序從上到下被執(zhí)行的過程中依次加載進(jìn)內(nèi)存的# 放置了我們?cè)O(shè)置的所有變量名和函數(shù)名
#局部命名空間 —— 函數(shù)# 就是函數(shù)內(nèi)部定義的名字# 當(dāng)調(diào)用函數(shù)的時(shí)候 才會(huì)產(chǎn)生這個(gè)名稱空間 隨著函數(shù)執(zhí)行的結(jié)束 這個(gè)命名空間就又消失了#在局部:可以使用全局、內(nèi)置命名空間中的名字
#在全局:可以使用內(nèi)置命名空間中的名字,但是不能用局部中使用
#在內(nèi)置:不能使用局部和全局的名字的# def func():
# a = 1
#
# func()
# print(a)# def max(l):
# print('in max func')
#
# print(max([1,2,3]))
#在正常情況下,直接使用內(nèi)置的名字
#當(dāng)我們?cè)谌侄x了和內(nèi)置名字空間中同名的名字時(shí),會(huì)使用全局的名字
#當(dāng)我自己有的時(shí)候 我就不找我的上級(jí)要了
#如果自己沒有 就找上一級(jí)要 上一級(jí)沒有再找上一級(jí) 如果內(nèi)置的名字空間都沒有 就報(bào)錯(cuò)
# 多個(gè)函數(shù)應(yīng)該擁有多個(gè)獨(dú)立的局部名字空間,不互相共享# def input():
# print('in input now')
# def func():
# # input = 1
# print(input)
# func()
# def fun1():
# a = 1
#
# def fun2():pass#func --> 函數(shù)的內(nèi)存地址
#函數(shù)名() 函數(shù)的調(diào)用
#函數(shù)的內(nèi)存地址() 函數(shù)的調(diào)用# 作用域兩種
# 全局作用域 —— 作用在全局 —— 內(nèi)置和全局名字空間中的名字都屬于全局作用域 ——globals()
# 局部作用域 —— 作用在局部 —— 函數(shù)(局部名字空間中的名字屬于局部作用域) ——locals()# a = 1
# def func():
# global a
# a = 2
#
# func()
# print(a)# 對(duì)于不可變數(shù)據(jù)類型 在局部可是查看全局作用域中的變量
# 但是不能直接修改
# 如果想要修改,需要在程序的一開始添加global聲明
# 如果在一個(gè)局部(函數(shù))內(nèi)聲明了一個(gè)global變量,那么這個(gè)變量在局部的所有操作將對(duì)全局的變量有效
# a = 1
# b = 2
# def func():
# x = 'aaa'
# y = 'bbb'
# print(locals())
# print(globals())
#
# func()
# print(globals())
# print(locals()) #本地的#globals 永遠(yuǎn)打印全局的名字
#locals 輸出什么 根據(jù)locals所在的位置# a = 1
# def func(a):
# a = 2
# return a
#
# a = func(a)
# print(a)
?
轉(zhuǎn)載于:https://www.cnblogs.com/hopelv/p/10089220.html
總結(jié)
- 上一篇: iPhone 12 mini辐射很大吗对
- 下一篇: 第十二章 泛型