国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python變量作用域LEGB用法解析

2020-02-15 21:26:04
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了Python變量作用域LEGB用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

閉包就是, 函數內部嵌套函數. 而 裝飾器只是閉包的特殊場景而已, 特殊在如果外函數的參數是指向一個, 用來被裝飾的函數地址時(不一定是地址哈, 隨意就好) , 就有了 "@xxx" 這樣的寫法, 還是蠻有意思的. 裝飾器的作用是 在不改變原函數的代碼前提下, 額外給原函數填寫新功能. 寫法上來看, 還是比較簡潔優雅的.

裝飾器的通俗寫法

# 裝飾器的通用寫法def out(func):  def inner(*args, **kwargs):    print("we are checking...", args[0])    return func(*args, **kwargs)  return inner@outdef check_2019_nCov(name):  return f"now, {name} is very healthy..."tmp = check_2019_nCov('youge')print(tmp)# outputwe are checking... yougenow, youge is very healthy...

給裝飾器傳參

雖然這種 "@" 的寫法, 是要求 外函數的參數是一個 func 地址 , 但要達到可以傳參, 只要 再在外面包一層函數 (作用是接受參數) , 這樣不就相當于擴大作用空間, 拿到參數了呀 .

# 最外層的函數作用是, 給裝飾器傳遞參數def get_param(*args, **kwargs):  def out(func):    def inner(*args, **kwargs):      print("get params", args, kwargs)      return func(*args, **kwargs)    return inner  return out@get_param("youge")def check_2019_nCov(name):  return f"now, {name} is very healthy..."tmp = check_2019_nCov("youge")print(tmp)# outputget params ('youge',) {}now, youge is very healthy...

這種個裝飾器傳遞參數的應用場景, 在 Web應用中, 以 Flask 為例, 就是所有的 路由 url 的概念呀, 如 route("/login") 這樣的寫法, 其原理就是用各種裝飾器來實現 路由 -> 視圖 的映射關系的.

仔細一看, 整個過程忽略了一個重要的話題, 即命名空間, 及 變量的作用域, 或者說命名空間如怎樣的.

LEGB 法則

命名空間

前篇已經詳細闡述過了, Python 變量的本質是指針, 是對象的引用, 而 Python中 萬物皆對象. 這個對象是真正存儲數據的內存地址, 是各種類(數據類型, 數據結構) 的實例. (變量就是用來引用對象的) 差不多這個意思吧.

最為直觀的解釋:

" A namespace is a mapping from names to objects". (變量名和對象的映射)

"Most namespaces are currently implemented as Python dictionaries." (大部分命名空間通過字典來實現)

即命名空間是用來 避免變量命名沖突 的約束. 各個命名空間是彼此獨立的, 一個空間中不能重名, 不同空間中是不沒有關系的. 就跟 計算機系統, 存儲文件是樣的邏輯.

for i in range(10):  print(i)  # 這兩句話都用到了 i 但其各自的空間是不一樣的.  [i for i in range(100)]            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长垣县| 宣武区| 宜兴市| 新密市| 浑源县| 余庆县| 榆社县| 淮滨县| 南部县| 肥东县| 洛隆县| 时尚| 南昌县| 灵台县| 辽阳市| 淄博市| 高青县| 阜城县| 曲阜市| 秀山| 丹寨县| 北海市| 汤阴县| 枞阳县| 清水县| 阜新市| 铜梁县| 武功县| 图们市| 色达县| 嘉峪关市| 襄樊市| 隆昌县| 五莲县| 吴堡县| 三门县| 谢通门县| 深州市| 河源市| 托克逊县| 巴塘县|