91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

名稱空間-作用域-裝飾器

發布時間:2020-08-02 22:06:38 來源:網絡 閱讀:254 作者:DevOperater 欄目:編程語言

1.名稱空間

1.1含義

名稱空間正是存放名字x與1綁定關系的地方

1.2名稱空間種類

locals:是函數內的名稱空間,包括局部變量和形參
globas:全局變量,函數定義所在模塊的名字空間
builtins:內置模塊的名字空間

1.3作用域

作用域即范圍:
全局范圍:全局存貨,全局有效
局部范圍:臨時存活,局部有效
查看作用域的方法globals(),locals()

>>> locals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_import
lib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins'
(built-in)>, 'l': [2, 3, 4, 5, 6, 7], 's': bytearray(b'aoaini'), 'd': {10: 2, 12: 1, 9: 0}, 'a': [1
, 2, 3, 4, 5], 'b': ['a', 'b', 'c']}
>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_import
lib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins'
(built-in)>, 'l': [2, 3, 4, 5, 6, 7], 's': bytearray(b'aoaini'), 'd': {10: 2, 12: 1, 9: 0}, 'a': [1
, 2, 3, 4, 5], 'b': ['a', 'b', 'c']}
>>>

1.4作用域查找順序

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: vita

level = 'L0'
n = 22

def func():
    level = 'L1'
    n = 33
    print(locals())

    def outer():
        n = 44
        level = 'L2'
        print(locals(),n)

        def inner():
            level = 'L3'
            print(locals(),n) #此外打印的n是多少?
        inner()
    outer()

func()

E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py
{'n': 33, 'level': 'L1'}
{'level': 'L2', 'n': 44} 44
{'level': 'L3', 'n': 44} 44

Process finished with exit code 0

LEGB代表變量查找順序:locals->enclosing function ->globals ->builtins
locals:函數內的名字空間,包括局部變量和形參
enclosing外部嵌套函數的名字空間
globals全局變量,函數定義所在模塊的名字空間
builtins內置模塊的名字空間

1.5閉包

在外部函數中定義了一個內部函數,內函數中使用了外部函數中的臨時變量,并且外部函數的返回值是內部函數的引用,這樣就形成了閉包。
一般情況下我們認為,如果一個函數結束,函數內部所有的東西都會在內存中被釋放掉,還給內存,局部變量消失。但是閉包是一種特殊情況,如果外部函數結束的時候,發現自己的局部變量還會在內部函數中使用,就會把這個局部變量綁定給內部函數,然后自己再結束。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: vita

def outer(a):
    b = 23

    def inner():
        print(a+b)
    return inner
inner_fun = outer(12)
inner_fun()

E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py
35

Process finished with exit code 0

1.6裝飾器

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: vita
user_status = False
def login(func): #把要執行的模塊從這里傳進來

    def inner():#再定義一層函數
        _username = "vita" #假裝這是DB里存的用戶信息
        _password = "123" #假裝這是DB里存的用戶信息

        global user_status

        if user_status == False:
            username = input("user:")
            password = input("pasword:")

            if username == _username and password == _password:
                print("welcome login....")
                user_status = True
            else:
                print("wrong username or password!")

        if user_status == True:
            func() # 看這里看這里,只要驗證通過了,就調用相應功能

    return inner #用戶調用login時,只會返回inner的內存地址,下次再調用時加上()才會執行inner函數
@login
def america():

    print("----歐美專區----")
america()
# 上面代碼相當于下面的內容
 "函數開始執行到@login時做的事"
# inner_fun = login(america) 
 "真正調用america()函數,執行inner函數"
# inner_fun()  
def japan():
    print("----日韓專區----")

@login
def henan():
    print("----河南專區----")
henan()

E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py
user:vita
pasword:123
welcome login....
----歐美專區----
----河南專區----

Process finished with exit code 0

1.7函數帶參數的裝飾器

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: vita
user_status = False
def login(func): #把要執行的模塊從這里傳進來

    def inner(*args,**kwargs):#再定義一層函數
        _username = "vita" #假裝這是DB里存的用戶信息
        _password = "123" #假裝這是DB里存的用戶信息

        global user_status

        if user_status == False:
            username = input("user:")
            password = input("pasword:")

            if username == _username and password == _password:
                print("welcome login....")
                user_status = True
            else:
                print("wrong username or password!")

        if user_status == True:
            func(*args,**kwargs) # 看這里看這里,只要驗證通過了,就調用相應功能

    return inner #用戶調用login時,只會返回inner的內存地址,下次再調用時加上()才會執行inner函數
@login
def america(style):
    print("style:",style)
    print("----歐美專區----")
america("america")
# 上面的代碼相當于
# inner_fun = login(america)
# inner_fun("america")
def japan():
    print("----日韓專區----")

@login
def henan(style):
    print("style:", style)
    print("----河南專區----")
henan("china")

E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py
user:vita
pasword:123
welcome login....
style: america
----歐美專區----
style: china
----河南專區----

Process finished with exit code 0

1.8帶參數的裝飾器

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: vita
user_status = False
def login(login_type):
    def auth(func): #把要執行的模塊從這里傳進來

        def inner(*args,**kwargs):#再定義一層函數
            _username = "vita" #假裝這是DB里存的用戶信息
            _password = "123" #假裝這是DB里存的用戶信息

            global user_status

            if user_status == False and login_type == "qq":
                username = input("user:")
                password = input("pasword:")

                if username == _username and password == _password:
                    print("welcome login....")
                    user_status = True
                else:
                    print("wrong username or password!")

            if user_status == True and login_type == "qq":
                func(*args,**kwargs) # 看這里看這里,只要驗證通過了,就調用相應功能

        return inner #用戶調用login時,只會返回inner的內存地址,下次再調用時加上()才會執行inner函數
    return auth
@login("qq")
def america(style):
    print("style:",style)
    print("----歐美專區----")
america("america")
# 上面的代碼相當于
# auth = login("qq")
# inner_fun = auth(america)
# inner_fun("america")
def japan():
    print("----日韓專區----")

# 由于這里是不是qq登錄,所以沒有執行
@login("weixin")
def henan(style):
    print("style:", style)
    print("----河南專區----")
henan("china")

E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py
user:vita
pasword:123
welcome login....
style: america
----歐美專區----

Process finished with exit code 0
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临漳县| 柯坪县| 徐闻县| 宁都县| 图木舒克市| 海城市| 肇源县| 阜康市| 灵山县| 抚远县| 大方县| 登封市| 遵化市| 特克斯县| 双辽市| 岢岚县| 申扎县| 丰宁| 宁蒗| 福泉市| 华亭县| 定边县| 定兴县| 涞水县| 元氏县| 盐山县| 西贡区| 潼南县| 蕉岭县| 怀化市| 高邮市| 长治县| 彭山县| 肥城市| 乐陵市| 鹿泉市| 雅江县| 大洼县| 澎湖县| 光泽县| 板桥市|