为啥我的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函数没有定义,当它存在于同一个文件中时?的主要内容,如果未能解决你的问题,请参考以下文章