命名空間 Python 函式命名空間及作用域

2021-10-15 00:19:15 字數 2435 閱讀 3798

全域性命名空間---個人寫的**但不是函式中的**

區域性命名空間---函式

各級別命名空間之間使用關係

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...