欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單了解Python變量作用域正確使用方法

 更新時間:2020年06月12日 15:57:09   作者:程序員的人生A  
這篇文章主要介紹了簡單了解Python變量作用域正確使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

在寫代碼的時候,免不了要使用變量。但程序中的一個變量并不一定是在哪里都可以被使用,根據(jù)情況不同,會有不同的“有效范圍”。

看這樣一段代碼:

def func(x):
  print ('X in the beginning of func(x): ', x)
  x = 2
  print ('X in the end of func(x): ', x)
x = 50func(x)print ('X after calling func(x): ', x)

輸出:

X in the beginning of func(x): 50
X in the end of func(x): 2
X after calling func(x): 50

變量 x 在函數(shù)內(nèi)部被重新賦值。但在調(diào)用了函數(shù)之后,x 的值仍然是50。為什么?

這就得說一下變量的“作用域”:

當(dāng)函數(shù)內(nèi)部定義了一個變量,無論是作為函數(shù)的形參,或是另外定義的變量,它都只在這個函數(shù)的內(nèi)部起作用。函數(shù)外即使有和它名稱相,另外注意:光理論是不夠的。這里順便送大家一套2020最新python入門到高級項目實戰(zhàn)視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數(shù)字的諧音)轉(zhuǎn)換下可以找到了,還可以跟老司機交流討教!

同的變量,也沒有什么關(guān)聯(lián)。這個函數(shù)體就是這個變量的作用域。像這樣在函數(shù)內(nèi)部定義的變量被稱為“局部變量”。

要注意的是,作用域是從變量被定義的位置開始。像這樣的寫法是有問題的:

def func():
  print (y)
  y = 2
  print (y)

報錯:

UnboundLocalError: local variable 'y' referenced before assignment

因為在 y = 2 之前,y 并不存在,調(diào)用 y 的值就會出錯。

回到開始那個例子:

在函數(shù) func 外部,定義的變量 x,賦值為 50,作為參數(shù)傳給了函數(shù) func。而在函數(shù) func 內(nèi)部,變量 x 是形參,它的作用域是整個函數(shù)體內(nèi)部。它與外面的那個 x 沒有關(guān)系。只不過它的初始值是由外面那個 x 傳遞過來的。

所以,雖然函數(shù)體內(nèi)部的 x 被重新賦值為 2,也不會影響外面那個 x 的值。

不過有時候,我們希望能夠在函數(shù)內(nèi)部去改變一些變量的值,并且這些變量在函數(shù)外部同樣被使用到。怎么辦?

一種方法是,用 return 把改變后的變量值作為函數(shù)返回值傳遞出來,賦值給對應(yīng)的變量。比如開始的那個例子,可以在函數(shù)結(jié)尾加上

return x

然后把調(diào)用改為

x = func(x)

還有一種方法,就是使用“全局變量”。

在 Python 的函數(shù)定義中,可以給變量名前加上 global 關(guān)鍵字,這樣其作用域就不再局限在函數(shù)塊中,而是全局的作用域。

通過 global 改寫開始的例子:

def func():
  global x  print ('X in the beginning of func(x): ', x)
  x = 2
  print ('X in the end of func(x): ', x)
x = 50func()print ('X after calling func(x): ', x)

輸出:

X in the beginning of func(x): 50
X in the end of func(x): 2
X after calling func(x): 2

函數(shù) func 不再提供參數(shù)調(diào)用。而是通過 global x 告訴程序:這個 x 是一個全局變量。于是函數(shù)中的 x 和外部的 x 就成為了同一個變

量。這一次,當(dāng) x 在函數(shù) func 內(nèi)部被重新賦值后,外部的 x 也隨之改變。

前面講的局部變量和全局變量是 Python 中函數(shù)作用域最基本的情況。實際上,還有一些略復(fù)雜的情況,比如:

def func():
  print ('X in the beginning of func(x): ', x)  # x = 2
  print ('X in the end of func(x): ', x)
x = 50func()print ('X after calling func(x): ', x)

輸出:

X in the beginning of func(x): 50
X in the end of func(x): 50
X after calling func(x): 50

程序可以正常運行。雖然沒有指明 global,函數(shù)內(nèi)部還是使用到了外部定義的變量。然而一旦加上

x = 2

這句,程序就會報錯。因為這時候,x 成為一個局部變量,它的作用域從定義處開始,到函數(shù)體末尾結(jié)束。

建議在寫代碼的過程中,顯式地通過 global 來使用全局變量,避免在函數(shù)中直接使用外部變量。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python疊加兩幅柵格圖像的實現(xiàn)方法

    Python疊加兩幅柵格圖像的實現(xiàn)方法

    今天小編就為大家分享一篇Python疊加兩幅柵格圖像的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 有趣的Python圖片制作之如何用QQ好友頭像拼接出里昂

    有趣的Python圖片制作之如何用QQ好友頭像拼接出里昂

    這篇文章主要介紹了有趣的Python圖片制作之如何用QQ好友頭像拼接出里昂,本文通過截圖實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • 用Python實現(xiàn)一個簡單的能夠發(fā)送帶附件的郵件程序的教程

    用Python實現(xiàn)一個簡單的能夠發(fā)送帶附件的郵件程序的教程

    這篇文章主要介紹了用Python實現(xiàn)一個簡單的能夠發(fā)送帶附件的郵件程序的教程,用MIMEApplication模塊來發(fā)送各種類型的文件,需要的朋友可以參考下
    2015-04-04
  • Python基類函數(shù)的重載與調(diào)用實例分析

    Python基類函數(shù)的重載與調(diào)用實例分析

    這篇文章主要介紹了Python基類函數(shù)的重載與調(diào)用方法,實例分析了Python中基類函數(shù)的重載及調(diào)用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • Python3 無重復(fù)字符的最長子串的實現(xiàn)

    Python3 無重復(fù)字符的最長子串的實現(xiàn)

    這篇文章主要介紹了Python3 無重復(fù)字符的最長子串的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python?hashlib模塊詳情

    Python?hashlib模塊詳情

    本文,我們來對Python?提供的安全哈希算法的通用接口-hashlib模塊進行學(xué)習(xí),文章內(nèi)容具有一定的參考價值,需要的小伙伴可以參考一下
    2021-11-11
  • Python的爬蟲程序編寫框架Scrapy入門學(xué)習(xí)教程

    Python的爬蟲程序編寫框架Scrapy入門學(xué)習(xí)教程

    Python的一大優(yōu)勢就是可以輕松制作Web爬蟲,而超高人氣的Scrapy則是名副其實的Python編寫爬蟲的利器,這里我們就來看一下Python的爬蟲程序編寫框架Scrapy入門學(xué)習(xí)教程:
    2016-07-07
  • python實現(xiàn)清屏的方法

    python實現(xiàn)清屏的方法

    這篇文章主要介紹了python實現(xiàn)清屏的方法,涉及Python調(diào)用系統(tǒng)命令的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Python時間序列缺失值的處理方法(日期缺失填充)

    Python時間序列缺失值的處理方法(日期缺失填充)

    這篇文章主要給大家介紹了關(guān)于Python時間序列缺失值(日期缺失填充)的處理方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 深入淺析python繼承問題

    深入淺析python繼承問題

    這篇文章主要介紹了深入淺析python繼承問題的相關(guān)資料,非常不錯,感興趣的朋友一起看看吧
    2016-05-05

最新評論