簡體   English   中英

Python中的全局變量和局部變量

[英]Global and local variables in Python

我正在學習Python。 一本關於Python 3的書說以下代碼應該可以正常工作:

def funky():
    print(myvar)
    myvar = 20
    print(myvar)

myvar = 10
funky()

但是當我在Python 3.3中運行它時,我得到了

UnboundLocalError: local variable 'myvar' referenced before assignment

錯誤。 我的理解是, funky的第一個print(myvar)應該是10,因為它是一個全局變量。 第二個print(myvar)應該是20,因為當地的myvar被定義為20.這里發生了什么? 請幫忙澄清一下。

在分配值之前,需要在函數中調用global

def funky():
    global myvar
    print(myvar)
    myvar = 20
    print(myvar)

myvar = 10
funky()

請注意,您可以在不調用全局的情況下打印值,因為您可以在不使用global變量的情況下訪問全局變量,但嘗試分配值將需要它。

來自文檔

程序文本中每次出現的名稱都是指在包含該用途的最內層功能塊中建立的該名稱的綁定。

這意味着除非您將其聲明為global或非nonlocal (嵌套函數),否則myvar是局部變量或自由變量(如果myvar未在函數中定義)。

這本書不對。 在同一個塊中,名稱表示相同的變量(示例中的局部變量myvar ,即使存在具有相同名稱的全局變量,也不能使用它直到定義它)。 還可以更改函數外部的值,即第65頁末尾的文本也不正確 以下作品:

def funky(): # local
    myvar = 20 
    print(myvar) # -> 20
myvar = 10 # global and/or local (outside funky())
funky()
print(myvar) # -> 10 (note: the same)

def funky(): # global
    global myvar
    print(myvar) # -> 10
    myvar = 20
myvar = 10
funky() 
print(myvar) # -> 20 (note: changed)

def funky(): # free (global if funky is not nested inside an outer function)
    print(myvar) # -> 10
myvar = 10
funky() 

def outer():
    def funky():  # nonlocal
        nonlocal myvar
        print(myvar) # -> 5
        myvar = 20
    myvar = 5 # local
    funky()
    print(myvar) # -> 20 (note: changed)
outer()

Python“假設”我們想要一個局部變量,因為在funky()中分配了myvar,所以第一個print語句拋出## UnboundLocalError:在賦值##錯誤消息之前引用的局部變量'myvar'。 在函數內部更改或創建的任何變量都是本地的,如果它尚未聲明為全局變量。 要告訴Python,我們要使用全局變量,我們必須使用關鍵字“global”,如以下示例所示:

def f():
  global s
  print s
  s = "That's clear."
  print s 


s = "Python is great!" 
f()
print s

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM