在函数中使用变量而不作为参数传递

Use a Variable in a Function Without Passing as an Argument

在 python 中是否有任何方法可以让函数使用变量并 return 它而不将其作为参数传递?

你问的可能的。如果函数没有重新绑定(例如,分配给)名称,而是使用它,则该名称将被视为 global 名称,例如:

def f():
    print(foo)

foo = 23
f()

会按照您的要求去做。然而,这已经是一个可疑的想法了:为什么不只是 def f(foo): 并调用 f(23),那么直接和清晰得多?!

如果函数需要绑定名字,那就更可疑了,尽管global语句允许...:[=​​16=]

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)

同样的效果 - 更简洁、更好维护、更好的结构。

为什么 你在寻找劣质(尽管可行)的方法,而更好的方法更容易、更清洁...?!

正如@Alex Martelli 指出的那样,您可以...但是应该吗?这是更相关的问题,IMO。

我理解您所问的吸引力。它似乎应该 只是 好的形式,否则你将不得不在任何地方传递变量,这当然看起来很浪费。

我不敢想知道你的 Python-Fu 有多远(我只能猜测),但是当我还是一个初学者的时候,有几次我也有同样的经历你现在做的问题。使用 global 感觉很丑陋(每个人都说 所以 ),但我有这种不可抗拒的冲动,要按照你的要求去做。最后,我将变量传递给函数。

为什么?

因为这是一种代码味道。你可能看不到它,但在长 运行 中有充分的理由避免它。

不过,你问的是有名字的:

你需要的是实例变量。从技术上讲,这可能离您目前的情况只有一步之遥。所以,你可能想知道:为什么这么大惊小怪?毕竟,实例变量被广泛接受,全局变量似乎在本质上是相似的。那么在常规函数中使用全局变量的大问题是什么?

问题主要是概念性的。 类 设计用于对相关行为(函数)和状态(玩家位置变量)进行分组,并具有与之相关的广泛功能(仅使用函数是不可能的)。 类 也是 语义上重要的 ,因为它们在您的脑海中发出明确的意图,并向未来的读者表明程序的方式组织及其运作方式。

除了这样说之外,我不会详细说明:您可能应该重新考虑您的策略,因为它不可避免地导致的道路是这样的:

  • 1) 增加代码库中的耦合度
  • 2) 无法破译的执行流程
  • 3) 调试大富翁
  • 4) 意大利面条 代码。

现在看来,这似乎有点夸张。关键是学习如何以有意义的方式组织您的程序,概念上,而不是使用当前需要的方式,您将受益匪浅现在 最少量的代码或对您来说似乎很直观的代码。据我所知,您可能正在开发一个小型应用程序,并且只有一个 1 模块 ,因此它可能类似于使用单个 class。

可能发生的最糟糕的事情是您会采用错误的编码做法。在长运行中,这可能会伤害到你。