如何在函数中创建或使用全局变量?
如果我在一个函数中创建一个全局变量,我如何在另一个函数中使用该全局变量?我是否需要将全局变量存储在需要访问的函数的局部变量中?
以下代码在Python 2.5和3.0中按预期工作:
a, b, c = (1, 2, 3)
print(a, b, c)
def test():
print(a)
print(b)
print(c) # (A)
#c+=1 # (B)
test()
Run Code Online (Sandbox Code Playgroud)
但是,当我取消注释行(B)时,我得到了UnboundLocalError: 'c' not assigned一行(A).的值a和b被正确地打印.这让我感到困惑,原因有两个:
为什么在行(A)处抛出运行时错误,因为后面的行(B)语句?
为什么变量a和b打印符合预期,同时c引发错误?
我能想到的唯一解释是,赋值创建了一个局部变量,即使在创建局部变量之前,它也优先于"全局"变量.当然,变量在存在之前"窃取"范围是没有意义的.cc+=1c
有人可以解释一下这种行为吗?
我试图找到一个很好的来源,解释为什么global在python(以及一般的编程)中使用被认为是不好的做法.有人可以指点我或解释一下吗?
my_list1 = [30,34,56]
my_list2 = [29,500,43]
Run Code Online (Sandbox Code Playgroud)
如何检查列表中的所有值是否> = 30?my_list1应该工作,my_list2不应该.
我唯一能想到的是:
boolean = 0
def func(ls):
for k in ls:
if k >= 30:
boolean = boolean + 1
else:
boolean = 0
if boolean > 0:
print 'Continue'
elif boolean = 0:
pass
Run Code Online (Sandbox Code Playgroud)
事后看来,在处理速度真正重要且利用的更大数据集后numpy......我会这样做:
>>> my_list1 = [30,34,56]
>>> my_list2 = [29,500,43]
>>> import numpy as np
>>> A_1 = np.array(my_list1)
>>> A_2 = np.array(my_list2)
>>> A_1 >= 30
array([ True, True, True], …Run Code Online (Sandbox Code Playgroud) 我希望能够做到这样的事情:
#mymodule
var = None
def load():
var = something()
Run Code Online (Sandbox Code Playgroud)
其他模块:
#secondmodule
import mymodule
mymodule.load()
#thirdmodule
from mymodule import var
print var #Shouldn't be None
Run Code Online (Sandbox Code Playgroud)
但我不知道如何从模块中定义的函数引用模块变量.
这可能吗?或者我需要在每个我不想使用它的地方发布全球声明.还是我完全错了?
可能重复:
为什么在这种情况下不需要全局关键字?
我想知道为什么我可以在没有global关键字的情 为什么它对其他类型是强制性的?这背后有什么逻辑吗?
例如代码:
#!/usr/bin/env python3
stringvar = "mod"
dictvar = {'key1': 1,
'key2': 2}
def foo():
dictvar['key1'] += 1
def bar():
stringvar = "bar"
print(stringvar)
print(dictvar)
foo()
print(dictvar)
print(stringvar)
bar()
print(stringvar)
Run Code Online (Sandbox Code Playgroud)
给出以下结果:
me@pc:~/$ ./globalDict.py
{'key2': 2, 'key1': 1}
{'key2': 2, 'key1': 2} # Dictionary value has been changed
mod
bar
mod
Run Code Online (Sandbox Code Playgroud)
我期待的地方:
me@pc:~/$ ./globalDict.py
{'key2': 2, 'key1': 1}
{'key2': 2, 'key1': 1} # I didn't use global, so dictionary remains the same
mod
bar
mod
Run Code Online (Sandbox Code Playgroud) 我的程序开始时我想做一些繁重的计算,然后我想将结果(一个大的凹凸矩阵)保存在内存中,以便我可以一次又一次地使用它.我的程序包含多个文件和类,我希望能够从任何地方访问此变量,并且如果可能,将其定义为常量.
如何在Python中定义全局常量?
cache = {}
def func():
cache['foo'] = 'bar'
print cache['foo']
Run Code Online (Sandbox Code Playgroud)
产量
bar
Run Code Online (Sandbox Code Playgroud)
为什么这样做以及为什么不需要使用global关键字?
我是python的新手。
我不太明白我需要如何设置变量并在稍后使用的函数中更改它们。我的脚本需要从函数中获取 x 和 y 值,这些值由函数创建的图表的大小决定。这些变量需要稍后在脚本中传递给打印命令以输出 html。所以假设我有全局变量:
originx_pct = 0.125
originy_pct = 0.11
Run Code Online (Sandbox Code Playgroud)
但是当函数运行时,这些将需要改变......
def makeplot(temp, entropy,preq):
originx_pct = origin.get_points()[0][0]
originy_pct = origin.get_points()[0][1]
Run Code Online (Sandbox Code Playgroud)
然后在后面写的html页面的javascript中打印出来...
print('var originx_pct = {};'.format(originx_pct))
print('var originy_pct = {};'.format(originy_pct))
Run Code Online (Sandbox Code Playgroud)
这两个变量不会改变,我只是不明白我需要做什么来更新它们并能够打印它们(在函数之外)。我假设函数不知道变量,所以它不能改变它们。如果我将 2 个变量作为参数提供给函数,我如何为脚本的打印部分取回值?
python ×9
scope ×4
variables ×2
c ×1
c++ ×1
dictionary ×1
function ×1
global ×1
list ×1
max ×1
python-2.7 ×1
side-effects ×1