为啥我的python函数没有定义,当它存在于同一个文件中时?

Posted

技术标签:

【中文标题】为啥我的python函数没有定义,当它存在于同一个文件中时?【英文标题】:Why is my python function not defined, when it exists in the same file?为什么我的python函数没有定义,当它存在于同一个文件中时? 【发布时间】:2012-06-25 07:07:45 【问题描述】:

我有一个简单的函数,我称之为myFunction。它接受两个参数,对它们进行一些计算,然后返回结果。

我还有一个类,MyClass,它有一个构造函数,其头文件如下:

__init__(self, bar, fun=myFunction):

当我尝试在这个类中运行任何东西时,我收到以下错误:

MyClass
    def __init__(self, bar, fun=myFunction):
NameError: name 'myFunction' is not defined

如果我删除这个类,我可以在 Python Shell 中使用 myFun,那有什么关系?

【问题讨论】:

请将正确答案标记为解决方案。我们以这种方式选择解决方案,而不是通过编辑问题来告诉解决方案是什么。 【参考方案1】:

您尚未显示实际代码,因此很难确定,但我敢打赌 myFunction 是在 MyClass 之后定义的。默认值表达式是在定义 __init__ 方法时计算的,因此必须在该点定义 myFunction。稍后再定义为时已晚。

【讨论】:

哇,你说得对。我所做的只是剪切和粘贴 myFunction 使其位于该文件中的 MyClass 之上,现在一切都很好。蟒蛇很奇怪。谢谢。 +1 没错。为了达到类似的效果,您可以将None(或其他任何东西,但必须定义)分配为默认参数,然后比较并最终分配myFunction函数(此分配将在实际调用该方法时进行评估)。 @user1123936:Python 是我所知道的最简单(并不意味着它不强大)、最简单、最一致的编程语言之一。可能他是以上所有的第一,所以如果你能提到更好的东西,我将非常感激:)真的。 @user1123936 问题是 Python 试图向下读取文件并解析所有而不执行直到它不能再执行(因为它需要进行某种计算以解析其余部分)。我不知道它背后的确切原理,但作为一种权衡,它具有直观的意义:您希望能够动态地执行和更改您的代码而不用编译,但您也希望能够在可能的情况下对其进行优化。 @JeffTratner Python 确实在读取时执行。 def是一个声明。当 Python 遇到 def my_function(): ...被执行。此执行的结果是创建一个表示函数代码的对象,并将其命名为my_function【参考方案2】:

myFunction 是一个变量,而不是一个值,因此您不能将其用作默认参数。

也许您可以使用 lambda 函数作为默认参数,而不是声明函数的名称。

【讨论】:

我在另一个项目中做了同样的事情。 MyClass 和 myFunction 实际上都是从那里复制和粘贴的。 -1:你当然错了(这里:“_...是一个变量,而不是一个值,所以你不能将它用作默认参数...”)。您可以使用任何您喜欢的作为默认参数,但它(将 this 分配给默认参数)将在定义函数(已提及默认参数的函数)时进行评估。

以上是关于为啥我的python函数没有定义,当它存在于同一个文件中时?的主要内容,如果未能解决你的问题,请参考以下文章

为啥没有构造函数参数的类需要括号

在 Python 中,为啥为没有定义超类的类调用 super() 函数不是错误? [复制]

python定义函数为啥一定要有参数

为啥我的函数在 python 中没有打印 [重复]

为啥我的链表内容在退出函数时会消失?

Javascript:当元素存在于数组中时,为啥 indexOf 函数返回 -1?