全域性命名空間---個人寫的**但不是函式中的**
區域性命名空間---函式
各級別命名空間之間使用關係
def max(l): print('in max func')print(max([1,2,3]))
def func(s): # func ---> 函式的記憶體位址 # 函式名()-----> 函式的呼叫 # 函式的記憶體位址()-----> 函式的呼叫 print('in max func')print(func)
a = 1def func(): global a a = 2func()print(a) # a = 2
# a = 1# b = 2# def func():# x = 'aaa'# y = 'bbb'# print(locals())# print(globals())## func()# print(globals())# print(locals()) #本地的#globals 永遠列印全域性的名字#locals 輸出什麼 根據locals所在的位置
def max2(x, y): i = y if x < y else x return idef max1(a,b,c,d): s1 = max2(a, b) # 函式的巢狀呼叫 s2 = max2(c, s1) s3 = max2(d, s2) return s3print(max(1,2,3,4))
def f1(): # 宣告函式f1 print("in f1") def f2(): # 宣告函式f2 print("in f2") f2() # 呼叫函式f2f1() # 呼叫函式f1
a = 1def outer(): a = 1 def inner(): a = 2 def inner2(): nonlocal a #宣告了乙個上面第一層區域性變數 a += 1 #不可變資料型別的修改 inner2() print('##a## : ', a) # ##a## : 3 inner() print('**a** : ',a) # **a** : 1outer()print('全域性 :',a) # 全域性 : 1
a = 0def outer(): a = 1 def inner(): a = 2 def inner2(): nonlocal a print(a) inner2() inner()outer()
函式名本質上就是函式的記憶體位址
def func(): print('in func')f = funcprint(f)
def f1(): print('f1')def f2(): print('f2')def f3(): print('f3')l = [f1,f2,f3]d = #呼叫l[0]()d['f2']()
思考
def func(): name = 'eva' def inner(): print(name) return innerf = func()f()
#輸出的__closure__有cell元素 :是閉包函式def func(): name = 'eva' def inner(): print(name) print(inner.__closure__) return innerf = func()f()#輸出的__closure__為none :不是閉包函式name = 'egon'def func2(): def inner(): print(name) print(inner.__closure__) return innerf2 = func2()f2()
from urllib.request import urlopendef index(): url = "" def get(): return urlopen(url).read() return getxiaohua = index()content = xiaohua()print(content)
python命名空間列印 Python 命名空間
命名空間 在python直譯器開始執行 之後,就會在記憶體中開闢乙個空間,每當遇到乙個變數的時候,就 把變數名和值之間的關係記錄下來,但是當遇到函式定義的時候,直譯器只是把函式名讀入內 存,表示這個函式存在了 至於函式內部的變數和邏輯,直譯器是不關心的.也就是說一開始 的時候函式只是載入進來,僅此而...
Python 命名空間
本文介紹python中命名空間中的legb原則。legb含 釋 l local function 函式內的名字空間,包括區域性變數和形參 e enclosing function locals 外部巢狀函式的名字空間 例如closure g global module 函式定義所在模組 檔案 的名字...
python 命名空間
作用域 第五章說過,將輸入字元作為命令放在作用域字典裡 作用域,每個函式都有乙個作用域,就是 字典,字典名字為函式名,鍵為變數,鍵值為變數對應的賦值。函式的作用域為區域性作用域 在函式內部訪問全域性變數,且只是讀取變數的值不重新繫結變數。這樣引用易出錯誤。慎重使用全域性變數 defcombine p...