第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

那請(qǐng)問(wèn)在哪些情況下必須要使用global聲明全局變量?

那請(qǐng)問(wèn)在哪些情況下必須要使用global聲明全局變量?

千萬(wàn)里不及你 2023-05-01 16:11:16
這段代碼不用在函數(shù)中聲明global x就可以打印出x的值x = 20def getx():    print xgetx()以下是一個(gè)多線程的python代碼片段,其中的x,l都是全局變量,但在threadcode()函數(shù)中只聲明了global x沒(méi)有g(shù)lobal l。完整的代碼是可以成功運(yùn)行,但是把global x注釋掉后就會(huì)報(bào)錯(cuò)。請(qǐng)問(wèn)這是為什么,Lock對(duì)象比較特殊嗎?import threading, time, sysx = 50l = threading.Lock() def threadcode():    global x     l.acquire()     print 'Thread %s invoked.' % threading.currentThread().getName()    try:         print 'Thread %s running.' % threading.currentThread().getName()        x = x + 50         print 'Thread %s set x to %d.' % \                 (threading.currentThread().getName(), x)    finally:         l.release() ...
查看完整描述

2 回答

?
德瑪西亞99

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊

對(duì)于Python2而言,對(duì)于一個(gè)全局變量,你的函數(shù)里如果只使用到了它的值,而沒(méi)有對(duì)其賦值(指a = XXX這種寫(xiě)法)的話,就不需要聲明global。相反,如果你對(duì)其賦了值的話,那么你就需要聲明global。聲明global的話,就表示你是在向一個(gè)全局變量賦值,而不是在向一個(gè)局部變量賦值。

查看完整回答
反對(duì) 回復(fù) 2023-05-04
?
肥皂起泡泡

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊

Python的作用域解析是基于叫做LEGB(Local(本地),Enclosing(封閉),Global(全局),Built-in(內(nèi)置))的規(guī)則進(jìn)行操作的??聪旅娴睦?/p>

>>> x = 10>>> def foo():...     x += 1...     print x...>>> foo()Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in foo
UnboundLocalError: local variable 'x' referenced before assignment

這是因?yàn)?,在一個(gè)作用域里面給一個(gè)變量賦值的時(shí)候,Python自動(dòng)認(rèn)為這個(gè)變量是這個(gè)作用域的本地變量,并屏蔽作用域外的同名的變量。很多時(shí)候可能在一個(gè)函數(shù)里添加一個(gè)賦值的語(yǔ)句會(huì)讓你從前本來(lái)工作的代碼得到一個(gè)UnboundLocalError

下面的是文檔中的解釋?zhuān)?/p>

This is because when you make an assignment to a variable in a scope, that variable becomes local to that scope and shadows any similarly named variable in the outer scope.

在使用列表(lists)的時(shí)候,很容易就觸發(fā)這種錯(cuò)誤。看下面這個(gè)例子:

>>> lst = [1, 2, 3]>>> def foo1():...     lst.append(5)   # 這沒(méi)有問(wèn)題......>>> foo1()>>> lst[1, 2, 3, 5] 
>>> lst = [1, 2, 3]>>> def foo2():...     lst += [5]      # ... 這就有問(wèn)題了!...>>> foo2()Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in foo
UnboundLocalError: local variable 'lst' referenced before assignment
查看完整回答
反對(duì) 回復(fù) 2023-05-04
  • 2 回答
  • 0 關(guān)注
  • 229 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)