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

时间:2015-02-07 06:37:06

标签: python function variables arguments

在python中有没有办法让函数使用变量并返回它而不将其作为参数传递?

2 个答案:

答案 0 :(得分:2)

您要求 的可能性。如果某个函数没有重新绑定(例如,分配给)一个名称,但使用该名称,则该名称将被视为全局名称,例如:

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)

同样的效果 - 更清洁,更好维护,更好的结构。

为什么你正在寻找劣质(虽然可行)的方法,当一个更好的方法更容易和更清洁......?

答案 1 :(得分:0)

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

我理解您提出的诉求。它似乎只是只是良好的形式,因为否则你必须在任何地方传递变量,这当然看起来很浪费。

我不会想知道你在你的Python-Fu中有多远(我只能猜),但当我更像初学者时,有时我会遇到同样的问题。使用global感到很难看(每个人都说所以),但我有这种不可抗拒的冲动去做你正在问的问题。最后,我将变量传递给函数。

<强>为什么吗

因为它有代码味道。您可能看不到它,但从长远来看,有充分的理由可以避免它。

但是,您提出的问题有一个名称

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

问题主要是概念。类被设计用于对相关行为(函数)和状态(播放器位置变量)进行分组,并具有与其一起使用的各种功能(否则只有功能才能实现)。课程也是 具有语义意义 ,因为它们表明了您的思想和未来读者对计划组织方式及其运作方式的明确意图。

除了这样说之外,我还没有进一步详细说明:你应该重新考虑一下你的策略,因为它不可避免的道路是:

  • 1)增加代码库中的耦合
  • 2)无法解释的执行流程
  • 3)调试富矿
  • 4) Spaghetti 代码。

现在,这似乎有些夸张。关键是要了解如何以有意义的方式组织您的程序, 概念 ,而不是使用目前最少量的代码或您现在看起来很直观的现在。您可能正在为我所知道的一个小应用程序工作,只有一个 1模块 ,因此它可能类似于使用单个类。

最糟糕的可能发生的事情是你采用了错误的编码方法。从长远来看,这可能会伤害你。