日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 的变量作用域和 LEGB 原则

發(fā)布時間:2023/12/2 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 的变量作用域和 LEGB 原则 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在 Python 程序中創(chuàng)建、改變或查找變量名時,都是在一個保存變量名的地方進行中,那個地方我們稱之為命名空間。作用域這個術(shù)語也稱之為命名空間。 具體地說,在代碼中變量名被賦值(Python 中變量聲明即賦值,global 聲明的只是變量的使用域)的位置決定了該變量能被訪問的范圍。函數(shù)定義了本地作用域,而模塊定義的是全局作用域。這兩個作用域之前有如下關(guān)系:
  • 每一個模塊都是全局作用域。也就是說,創(chuàng)建于模塊文件頂層的變量具有全局作用域,對于外部訪問就成了一個模塊對象的屬性。
  • 全局作用域的作用范圍僅限于單個文件。“全局”指的是在一個文件的頂層變量名對于這個文件而言是全局的。
  • 每次對函數(shù)的調(diào)用都創(chuàng)建了一個新的本地作用域。Python 中也有遞歸,即可以調(diào)用自身,每次調(diào)用都會創(chuàng)建五個新的本地命名空間。
  • 賦值的變量名除非聲明為全局變量,否則均為本地變量。如果需要在函數(shù)內(nèi)部對模塊文件頂層的變量名賦值,需要在函數(shù)內(nèi)部通過 global 語句聲明該變量。
  • 所有的變量可歸納為本地、全局或者內(nèi)置三種。范圍分別為 def 內(nèi)部,在一個模塊的命名空間內(nèi)部和預(yù)定義的 __builtin__ 模塊提供的變量。

變量名解析:LEGB 原則

如果對以上內(nèi)容有所迷惑的話,請看以下總結(jié)出的幾條原則。在函數(shù)命名空間中:
  • 變量名引用分為三個作用域進行查找:首先是本地,然后是函數(shù)內(nèi)(如果有的話),之后是全局,最后是內(nèi)置。
  • 在默認情況下,變量名賦值會創(chuàng)建或者改變本地變量。
  • 全局聲明將會給映射到模塊文件內(nèi)部的作用域的變量名賦值。
  • Python 的變量名解析機制也稱為?LEGB?法則,具體如下: 當在函數(shù)中使用未確定的變量名時,Python 搜索 4 個作用域:本地作用域(L),之后是上一層嵌套結(jié)構(gòu)中 def 或 lambda 的本地作用域(E),之后是全局作用域(G),最后是內(nèi)置作用域(B)。按這個查找原則,在第一處找到的地方停止。如果沒有找到,Python 會報錯的。
  • 下圖說明了搜索流程(由內(nèi)及外):

作用域?qū)嵗?/h3> # -*- coding: utf8 -*- # 全局作用域 x = 99 # x 和 func 函數(shù)在模塊中聲明,為全局使用域 def func(y): # 本地作用域 z = x + y # x 為全局變量 return z func(1) # func 在模塊中定義,可以調(diào)用.結(jié)果=100

總結(jié)

以上是生活随笔為你收集整理的Python 的变量作用域和 LEGB 原则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。