我不太明白用函数返回值和只在函数中操作全局变量之间的区别。我读过的大多数指南和书籍似乎都鼓励使用前者,而不是后者。
例如,这里有两个Python代码块(据我所知)做同样的事情:
someVariable = first_function(5)
def first_function (foo):
bar = foo + 1
return(bar)
anotherVariable = 0
second_function(5)
second_function (foo):
global anotherVariable
anotherVariable = foo + 1
当然,第一个例子看起来更简洁明了,但是两者得到了相同的结果;他们得到了一个值为6的变量。那么有理由使用第一个例子而不是第二个例子吗?
第一部分有本地代码,这使得它更容易理解。如果我剪切函数并让您看到它,您可能会理解它的功能:
def add_one(foo):
bar = foo + 1
return(bar)
它也是通用的,因为我可以将其应用于一个范围的值,这将保持代码干燥:
map(add_one, range(10))
第二部分特定于另一个变量。这会创建一种类似对象的行为,其中函数会影响一个状态变量(在本例中为
另一个变量
)。另外,另一个变量
在函数的作用域之外定义,这使得它更难读取/理解。
当您遇到这样的代码时,您可能应该使用一个类来代替它,捕获另一个变量的状态并对其进行操作。或者,您可以使用一个通用函数来执行您需要的操作,而不依赖于在别处定义的特定变量。
如果您想为另一个变量实现相同的行为,那么您必须编写两次相同的代码,这就违背了最初使用函数的目的!
你最终会得到:
assign_x_plus_1_to_anothervariable(foo):
global anotherVariable
anotherVariable = foo + 1
assign_x_plus_1_to_anothervariable2(foo):
global anotherVariable2
anotherVariable2 = foo + 1
assign_x_plus_1_to_anothervariable3(foo):
global anotherVariable3
anotherVariable3 = foo + 1
等等...
这取决于上下文。但为什么要声明一个全局变量,然后以这种方式更改它呢?如果你的目标是:“在数字x上加1”,那么第一个更好。还考虑信息隐藏:
def addOne(foo):
return (foo+1)
有了这个解决方案,作为程序员,你现在确切地知道这个函数是做什么的(但不是如何-
在第二个示例中,它完全不清楚,您必须首先定义一个变量(具有特定名称),然后执行methode。我看不出第二种变体的用途。
问题内容: 为什么全局变量是不好的?[closed] 问题答案: 这与Python无关。全局变量在任何编程语言中都是不好的。 但是,全局常量在概念上与全局变量并不相同。全局常数完全无害。只是在Python中没有强制性差异,只有约定是。 它们不好的原因是它们使函数具有隐藏的(非显而易见的,令人惊讶的,难以检测的)副作用,从而导致复杂性的增加,并有可能导致产生Spaghetti代码。 但是,即使在函数
我正在尝试学习C,特别是如何声明和初始化变量。我写了这段代码,我不知道为什么变量c给出了一个我还没有分配的值。 输出是-2,但我没有状态c=-2任何地方!
问题内容: 全局变量在Python中如何工作?我知道全局变量是有害的,我只是在做实验。 这在python中不起作用: 我收到一个错误: 我究竟做错了什么? 问题答案: 您需要声明: 在Python中, 您分配的 变量默认情况下成为局部变量。您需要使用将它们声明为全局变量。另一方面,您 引用但未分配的 变量不会自动成为局部变量。这些变量指的是封闭范围内最接近的变量。 Python 3.x引入了类似于
我使用的是swing,有一个函数(CreateAndShowGUI())可以监听上、左、右键的按下 现在,当我运行程序并按下任意键(向上、向左、向右、向下)时,我可以看到按下的键变量被设置为True。但当我试图在main中访问相同的内容时,按下的这个键的值为false。谁能帮我找出我错的地方吗?
问题内容: 我试图在量角器上设置一个全局变量,以在所有描述块中使用。 但这返回了以下错误: 我也看了这个问题:量角器angularJS全局变量 所以我试图以这种方式在conf.js中设置变量glob: 仍然有相同的错误。 如何在量角器测试中正确添加全局变量? 问题答案: 可以借助属性从量角器配置文件设置全局变量: 您可以使用规范中访问它。 请参阅参考配置文件。 params对象将直接传递到Prot
本文向大家介绍static全局变量与普通的全局变量有什么区别?相关面试题,主要包含被问及static全局变量与普通的全局变量有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 static全局变量只初使化一次,防止在其他文件单元中被引用; 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。 这两者在存储方式