8
A
回答
17
當你說
global var
你告訴Python的是變種是在全球背景下的定義是相同的變種。 你會在下面的方式來使用它:
var=0
def f():
global var
var=1
f()
print(var)
# 1 <---- the var outside the "def f" block is affected by calling f()
如果沒有全球性的說法,「DEF F」塊內的VAR將是一個局部變量, 並設置其價值將有外面的無功無影響「def f」塊。當你說globals.update(var)我猜你實際上意味着globals()。update(var)。當你說globals.update(var)時, 讓我們分開。
globals()返回一個dict對象。字典的鍵是對象的名稱,並且字典的值是關聯的對象的值。
每個字典都有一個叫做「update」的方法。所以globals()。update()是對這個方法的調用。 更新方法需要至少一個參數,並且該參數預計是一個字典。如果你告訴Python的
globals().update(var)
然後VAR最好是一個字典,你告訴Python來使用var字典的內容更新全局()字典。
例如:
#!/usr/bin/env python
# Here is the original globals() dict
print(globals())
# {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__': '/home/unutbu/pybin/test.py', '__doc__': None}
var={'x':'Howdy'}
globals().update(var)
# Now the globals() dict contains both var and 'x'
print(globals())
# {'var': {'x': 'Howdy'}, 'x': 'Howdy', '__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__': '/home/unutbu/pybin/test.py', '__doc__': None}
# Lo and behold, you've defined x without saying x='Howdy' !
print(x)
Howdy
相關問題
- 1. Array&Session - var和$ var之間的差異
- 2. $ GLOBALS和大寫$ var之間的區別
- 3. VAR和Keep語句之間的差異
- 4. var someObj = {}之間的差異;和var someObj = new RealObj
- 5. Task.WhenAll()和foreach(任務中的var任務)之間的差異
- 6. /和/ **之間的差異
- 7. PHP之間的差異()和[]
- 8. '//'和'///'之間的C++差異
- 9. VBA:&和+之間的差異
- 10. 之間的差異和::: ++
- 11. 運算符「==」和「=」之間的差異運算符「==」和「=」之間的差異「==」和「=」
- 12. Ajax更新面板和JQuery之間的差異:ajax()方法
- 13. C#和VB.NET之間的技術差異更新
- 14. 在rails更新中計算created_at和now()之間的差異
- 15. PHP:差異之間 - >和::
- 16. VAR差異
- 17. Htaccess - 和*之間的差異:。*和。+
- 18. 總和和+之間的差異?
- 19. Url.Action和Html.RenderActionLink和Html.RenderAction之間的差異
- 20. +新日期()和1 *新日期()之間的差異
- 21. 確定新對象和新fn之間的差異
- 22. Serilog:之間{..} {差異@ ..}
- 23. Elf32_Phdr的p_filesz和p_memsz之間的差異
- 24. Go和Cython之間的差異
- 25. vcruntime140d_app.dll和vcruntime140d.dll之間的差異
- 26. RestKit和AFIncrementalStore之間的差異
- 27. htop和golang之間的差異readmemstats
- 28. platformwebservices和ycommercewebservices之間的差異
- 29. spawn/1和spawn/3之間的差異
- 30. TTL和Keep alive之間的差異
確定,所以,如果我在方法的變量聲明,並且在該方法稱爲全局()更新(「變種」:「0」)。僅在第一次運行的腳本中,我將無法像第二次執行腳本時其餘代碼一樣聲明爲「全局變量」的變量使用'var'? – frank 2009-10-19 18:11:24
globals()。update('var':'0')應該是globals()。update({'var':'0'})。這會影響全局變量'var',即使這個命令放在方法中。這些命令的行爲在腳本的每次運行中都是相同的。如果這不能解決您的問題,請發佈您的代碼,以便我們可以更好地理解。 – unutbu 2009-10-19 18:19:34
好的,因爲它很短,但格式會奇怪: 嘗試: \t我+ = 1 除了NameError: \t I = 0 。該代碼將在主要方法中,並且我不能更改它,或者在方法之外的代碼之前添加任何方法聲明。我能做的是在這個小小的代碼片段之後,在主要方法中添加代碼。我需要讓'i'充當全局變量,以便在每個後續腳本執行時以'1'遞增。 – frank 2009-10-19 18:35:43