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. var someObj = {}之间的差异;和var someObj = new RealObj
- 3. Task.WhenAll()和foreach(任务中的var任务)之间的差异
- 4. VBA:&和+之间的差异
- 5. 之间的差异和::: ++
- 6. 在rails更新中计算created_at和now()之间的差异
- 7. C#和VB.NET之间的技术差异更新
- 8. PHP:差异之间 - >和::
- 9. Url.Action和Html.RenderActionLink和Html.RenderAction之间的差异
- 10. 确定新对象和新fn之间的差异
- 11. +新日期()和1 *新日期()之间的差异
- 12. C和C++之间的链接差异?
- 13. JSONLint和PHP之间的差异JSON_DECODE
- 14. cabal包之间的差异readPackageDescription和parsePackageDescription
- 15. CrudRepository findOne()和JpaRepository getOne()之间的差异
- 16. SAS和R之间的输出差异
- 17. OT和CRDT之间的差异
- 18. spawn/1和spawn/3之间的差异
- 19. SDK和NDK之间的差异在android
- 20. VS008和VS0210之间的MFC差异
- 21. Silverlight 2.0和3.0之间的差异
- 22. SwingWorker和Executor之间的差异
- 23. PHP和MySQL之间的时区差异
- 24. Blackberry Webworks和Phonegap之间的差异
- 25. ngDialog - open和openConfirm之间的差异
- 26. java.awt。*和java.awt.event。*之间的差异
- 27. Module#const_set和Module#之间的差异module_eval
- 28. iOS 5.1和6.1之间的UIButton差异
- 29. groupids net.sf.jasperreports和jasperreports之间的差异
- 30. 0x01和0x01f之间的差异
确定,所以,如果我在方法的变量声明,并且在该方法称为全局()更新(“变种”:“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