python - 替换全局变量
问题描述
下面,我想出了人为地将引用 var n2
from传递给f2()
tog2(x)
而不是全局 var n
inf()
和嵌套的g()
. 在这种情况下,还有其他更好的方法来替换全局变量吗?
from random import randint
# global value var
def f():
global n
n=0
def g():
global n
if randint(1,100)>50: n+=1
for _ in range(100): g()
print(n)
# local reference var
def f2():
n2=[0]
for _ in range(100): g2(n2)
print(n2[0])
def g2(x):
if randint(1,100)>50: x[0]+=1
解决方案
简短回答:您试图通过引用传递一个不可变值(整数)并想要更新它。像你正在做的那样将它包装在一个小类,列表或字典中是要走的路。但是,如果您能够稍微修改您的代码,还有其他方法。
更长的答案:(注意:这可能不是您问题的直接答案。)
我知道这是一个人为的例子。但是想想你真正的问题——g2()
是否需要知道有一个变量应该作为其调用的一部分进行更新?有没有办法让更新变量的责任属于定义它的责任?f2()
定义变量并更新它的那个怎么样?这样,您可以将对该变量的所有更改限制在一个非常小的周长 ( f2()
) 内。
在这种情况下,我的方法类似于:
def f2():
n2 = 0
for _ in range(100):
n2 += g2()
print(n2)
def g2():
return 1 if randint(1,100)>50 else 0
推荐阅读
- prolog - 错误:未知程序:dups2/2(DWIM 无法更正目标)
- html - 使用第三方 HTTP 请求发送 cookie
- python - 向用户输入文本框添加虚拟键盘
- javascript - 具有 autoGroupColumnDef 中的树结构的 AgGrid 中的奇怪行为
- json - 在 Flutter 中区分两个 JSON 键
- reactjs - 我的 nextPerson 函数哪里出错了,因为一旦所有人都被淘汰,代码就会中断
- testing - Testcafe 在 embedding-utils.js 中跳过测试
- ssas - 在数据源视图中表之间的关系未显示
- prolog - Prolog中的谓词连接
- javascript - Custom CKEditor TypeError: this.props.editor.create is not a function