【发布时间】:2015-02-07 17:21:05
【问题描述】:
在python中有没有办法让函数使用变量并返回它而不将其作为参数传递?
【问题讨论】:
-
使用
global但不推荐 -
我试过了,但它只有在你不改变变量值并返回它的情况下才有效。能不能不修改函数内部的任何变量并返回?
标签: python function variables arguments
在python中有没有办法让函数使用变量并返回它而不将其作为参数传递?
【问题讨论】:
global但不推荐
标签: python function variables arguments
你问的是可能的。如果一个函数没有重新绑定(例如,分配给)一个名称,而是使用它,则该名称被视为 全局 之一,例如:
def f():
print(foo)
foo = 23
f()
会按照你的要求去做。然而,这已经是一个可疑的想法了:为什么不直接def f(foo): 并调用f(23),这样更直接、更清晰?!
如果函数需要绑定名称,那就更令人怀疑了,尽管global 语句允许...:
def f():
global foo
print(foo)
foo += 1
foo = 23
f()
print(foo)
在这里,很多更好的选择是:
def f(foo):
print(foo)
foo += 1
return foo
foo = f(23)
print(foo)
同样的效果 - 更清洁、更易于维护、更可取的结构。
为什么您要寻找劣质(虽然可行)的方法,而更好的方法更容易更清洁......?!
【讨论】:
Player 课程的一部分?然后你只需要传递一件事。
正如@Alex Martelli 指出的那样,您可以...但是应该吗?这是更相关的问题,IMO。
我理解您所要求的吸引力。看起来它应该只是好的形式,否则你必须到处传递变量,这当然看起来很浪费。
我不会假设知道您在 Python-Fu 中的进度(我只能猜测),但是当我还是初学者时,有时我会遇到与您现在相同的问题。使用global 感觉很难看(每个人都说所以),但我有一种不可抗拒的冲动,要完全按照你的要求去做。最后,我将变量传递给函数。
为什么?
因为这是一种代码味道。您可能看不到它,但从长远来看,有充分的理由避免它。
但是,您要问的内容有一个名称:
您需要的是 instance 变量。从技术上讲,它可能离你目前的情况只有一步之遥。所以,你可能想知道:为什么要这么大惊小怪呢?毕竟,实例变量被广泛接受,而全局变量似乎在本质上相似。那么在常规函数中使用全局变量有什么大问题呢?
问题主要是概念。类被设计用于对相关的行为(函数)和状态(玩家位置变量)进行分组,并具有与之相伴的广泛的功能(否则仅使用函数是不可能的)。类也在语义上很重要,因为它们向您和未来的读者表明了关于程序组织方式和运行方式的明确意图。
除了这样说之外,我不会再详细说明:您可能应该重新考虑您的策略,因为它不可避免地通向这样的道路:
现在,这似乎有些夸张。关键是学习如何以一种有意义的方式组织您的程序,从概念上,而不是使用目前需要最少代码量或现在对你来说似乎很直观。据我所知,您可能正在开发一个小型应用程序,并且只有一个 1 模块,因此它可能类似于使用单个类。
可能发生的最糟糕的事情是你会采用糟糕的编码实践。从长远来看,这可能会伤害到你。
【讨论】: