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

Python中關鍵字nonlocal和global的聲明與解析

 更新時間:2017年03月12日 11:58:14   作者::Brad1994  
這篇文章主要給大家介紹了關于Python中關鍵字nonlocal和global的聲明與解析的相關資料,文中介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。

一、Python中global與nonlocal 聲明

如下代碼

a = 10 
 
def foo(): 
 a = 100 

執(zhí)行foo() 結果 a 還是10

函數(shù)中對變量的賦值,變量始終綁定到該函數(shù)的局部命名空間,使用global 語句可以改變這種行為。

>>> a 
10 
>>> def foo(): 
...  global a 
...  a = 100 
... 
>>> a 
10 
>>> foo() 
>>> a 
100 

解析名稱時首先檢查局部作用域,然后由內而外一層層檢查外部嵌套函數(shù)定義的作用域,如找不到搜索全局命令空間和內置命名空間。

盡管可以層層向外(上)查找變量,但是! ..python2 只支持最里層作用域(局部變量)和全局命令空間(gloabl),也就是說內部函數(shù)不能給定義在外部函數(shù)中的局部變量重新賦值,比如下面代碼是不起作用的

def countdown(start): 
 n = start 
 def decrement(): 
  n -= 1 

python2 中,解決方法可以是是把修改值放到列表或字典中,python3 中,可以使用nonlocal 聲明完成修改

def countdown(start): 
 n = start 
 def decrement(): 
  nonlocal n 
  n -= 1 

二、Python nonlocal 與 global 關鍵字解析

nonlocal

首先,要明確 nonlocal 關鍵字是定義在閉包里面的。請看以下代碼:

x = 0
def outer():
 x = 1
 def inner():
  x = 2
  print("inner:", x)

 inner()
 print("outer:", x)

outer()
print("global:", x)

結果

# inner: 2
# outer: 1
# global: 0

現(xiàn)在,在閉包里面加入nonlocal關鍵字進行聲明:

x = 0
def outer():
 x = 1
 def inner():
  nonlocal x
  x = 2
  print("inner:", x)

 inner()
 print("outer:", x)

outer()
print("global:", x)

結果

# inner: 2
# outer: 2
# global: 0

看到區(qū)別了么?這是一個函數(shù)里面再嵌套了一個函數(shù)。當使用 nonlocal 時,就聲明了該變量不只在嵌套函數(shù)inner()里面
才有效, 而是在整個大函數(shù)里面都有效。

global

還是一樣,看一個例子:

x = 0
def outer():
 x = 1
 def inner():
  global x
  x = 2
  print("inner:", x)

 inner()
 print("outer:", x)

outer()
print("global:", x)

結果

# inner: 2
# outer: 1
# global: 2

global 是對整個環(huán)境下的變量起作用,而不是對函數(shù)類的變量起作用。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • python關鍵字and和or用法實例

    python關鍵字and和or用法實例

    這篇文章主要介紹了python關鍵字and和or用法實例,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-05-05
  • 利用Python內置庫實現(xiàn)創(chuàng)建命令行應用程序

    利用Python內置庫實現(xiàn)創(chuàng)建命令行應用程序

    Python?有一個叫做argparse的內置庫,可以用它來創(chuàng)建一個命令行界面。本文將詳解如何利用argparse實現(xiàn)創(chuàng)建一個命令行應用程序,需要的可以參考一下
    2022-06-06
  • pandas求兩個表格不相交的集合方法

    pandas求兩個表格不相交的集合方法

    今天小編就為大家分享一篇pandas求兩個表格不相交的集合方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Pycharm無法使用已經安裝Selenium的解決方法

    Pycharm無法使用已經安裝Selenium的解決方法

    今天小編就為大家分享一篇Pycharm無法使用已經安裝Selenium的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python去除字符串中換行符的四種方法

    python去除字符串中換行符的四種方法

    python中換行符的作用就是將字符串劃分為上下兩行去輸出顯示,但是在有些情況下是不需要去用到換行符的,這個時候就要用方法將其給去除掉,這一篇文章小編會來給大家介紹一下python去除字符串中換行符的方法,感興趣的話就一起往下看看吧
    2024-04-04
  • python獲取當前文件路徑以及父文件路徑的方法

    python獲取當前文件路徑以及父文件路徑的方法

    今天小編就為大家分享一篇python獲取當前文件路徑以及父文件路徑的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 關于numpy版本兼容問題解決方案

    關于numpy版本兼容問題解決方案

    這篇文章主要給大家介紹了關于numpy版本兼容問題解決方案的相關資料,文中通過圖文介紹的非常詳細,對大家學習或者使用numpy具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • Python結合Sprak實現(xiàn)計算曲線與X軸上方的面積

    Python結合Sprak實現(xiàn)計算曲線與X軸上方的面積

    這篇文章主要介紹了Python結合Sprak實現(xiàn)計算曲線與X軸上方的面積,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-02-02
  • Python接口測試數(shù)據(jù)庫封裝實現(xiàn)原理

    Python接口測試數(shù)據(jù)庫封裝實現(xiàn)原理

    這篇文章主要介紹了Python接口測試數(shù)據(jù)庫封裝實現(xiàn)原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 關于Python Socket編程的要點詳解

    關于Python Socket編程的要點詳解

    Socket是網(wǎng)絡編程的一個抽象概念,通常我們用一個Socket表示“打開了一個網(wǎng)絡鏈接”,而打開一個Socket需要知道目標計算機的IP地址和端口號,再指定協(xié)議類型即可,這篇文章主要給大家介紹了關于Python Socket編程的相關資料,需要的朋友可以參考下
    2021-08-08

最新評論