Python不会定义函数

Python不会定义函数,python,Python,我正在重新学习python,我有一个非常基本的问题 我的消息来源如下 def calrounds(rounds): print rounds 当我在shell中运行此命令并尝试调用calrounds(3)时,我得到 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 calrounds(3) NameError:未定义名称“calrounds” 我已经有一段时间没有使用python了,幽默我。它说程序的第一行使用参数3调用calrounds。将其移动到函数定义下面。在调用函数之前,

我正在重新学习python,我有一个非常基本的问题

我的消息来源如下

def calrounds(rounds):
    print rounds
当我在shell中运行此命令并尝试调用calrounds(3)时,我得到

回溯(最近一次呼叫最后一次):
文件“”,第1行,在
calrounds(3)
NameError:未定义名称“calrounds”

我已经有一段时间没有使用python了,幽默我。

它说程序的第一行使用参数
3
调用
calrounds
。将其移动到函数定义下面。在调用函数之前,需要先定义。如果您使用的是Python3.0+,那么print语句需要括号

>>> def calrounds(rounds):
    print(rounds)


>>> calrounds(3)
3 

它表示程序的第一行使用参数
3
调用
calrounds
。将其移动到函数定义下面。在调用函数之前,需要先定义。如果您使用的是Python3.0+,那么print语句需要括号

>>> def calrounds(rounds):
    print(rounds)


>>> calrounds(3)
3 

您是否先导入源代码?

您是否先导入源代码?

首先要做的是查看如何调用函数。假设它在
myModule.py
中,您是
导入myModule
还是从myModule导入calrounds?如果使用第一个,则需要将其称为
myModule.calrounds()

我要做的下一件事是确保重新启动解释器。如果您已导入模块,
再次导入该模块将不会重新加载源代码,而是使用内存中已有的内容

下一个可能性是您正在导入一个文件,而不是您认为是的文件。您可能位于不同的目录中,或者正在从标准库加载某些内容。导入myModule
后,应
打印myModule.\u_文件\u_
并查看它是否是您认为正在处理的文件。经过20年的编程,我仍然发现自己大约每年做一次这样的事情,这令人难以置信地沮丧


最后,Python有可能只是出了问题。在您的
myModule.py
旁边将有一个
myModule.pyc
——Python将编译好的代码放在这里,以便更快地加载模块。通常情况下,它很聪明,可以判断源代码是否已被修改,但偶尔会失败。删除
.pyc
文件并重新启动解释器。

首先要做的是查看如何调用函数。假设它在
myModule.py
中,您是
导入myModule
还是从myModule导入calrounds?如果使用第一个,则需要将其称为
myModule.calrounds()

我要做的下一件事是确保重新启动解释器。如果您已导入模块,
再次导入该模块将不会重新加载源代码,而是使用内存中已有的内容

下一个可能性是您正在导入一个文件,而不是您认为是的文件。您可能位于不同的目录中,或者正在从标准库加载某些内容。导入myModule
后,应
打印myModule.\u_文件\u_
并查看它是否是您认为正在处理的文件。经过20年的编程,我仍然发现自己大约每年做一次这样的事情,这令人难以置信地沮丧


最后,Python有可能只是出了问题。在您的
myModule.py
旁边将有一个
myModule.pyc
——Python将编译好的代码放在这里,以便更快地加载模块。通常情况下,它很聪明,可以判断源代码是否已被修改,但偶尔会失败。删除你的
.pyc
文件并重新启动解释器。

他在shell中运行它,它实际上不是源文件的第一行。他在shell中运行它,它实际上不是源文件的第一行。你说你的源文件定义了一个函数,你试图从shell中调用该函数。您是如何将源代码加载到shell中的?您是如何运行它的?这是文件的内容还是直接写入shell?我打开python,然后从顶部菜单在shell中运行。您说您的源文件定义了一个函数,您正试图从shell调用该函数。您是如何将源代码加载到shell中的?您是如何运行它的?这是文件的内容还是直接写入shell?我打开python,然后从顶部菜单在shell中运行。如果
myModule
位于命名空间中,则可以避免重新启动解释器,如果
reload(myModule)
insteadIf
myModule
位于命名空间中,则可以避免重新启动解释器,改为执行
重新加载(myModule)