导入/运行另一个python文件并打印其输出时出现问题

导入/运行另一个python文件并打印其输出时出现问题,python,Python,我正在尝试导入我编写的脚本,并打印其输出;但是,我不断收到一个错误,输出名称没有定义 #del2.py def fun(): return print('hello world') #script I am running import del2 print(fun()) 我得到错误名称错误:未定义名称“fun” #del2.py def fun(): return print('hello world') #script I am running import del2 print(

我正在尝试导入我编写的脚本,并打印其输出;但是,我不断收到一个错误,输出名称没有定义

#del2.py
def fun():
  return print('hello world')
#script I am running
import del2
print(fun())
我得到错误名称错误:未定义名称“fun”

#del2.py
def fun():
  return print('hello world')
#script I am running
import del2
print(fun())
我没有得到一个导入错误,所以它会找到我的文件,并且我已经阅读了当你导入它时,它也会自动运行你的文件。所以我不明白的是,为什么我不能打印该文件的输出?

两件事:

对fun的调用必须是del2.fun,因为您没有将fun导入命名空间 fun返回print'hello world'的返回值,该值为None,因此您将看到fun在其中打印hello world,然后在您运行的脚本中显示printfun的None 将屈服

hello world
None
这里调用了两个打印函数。第一个是del2.fun,打印hello world。只要执行对del2.fun的调用,就会发生这种情况

对print的调用也是del2.fun函数的返回值,而对print的调用的返回值是None


当主脚本的printdel2.fun接收到来自该调用的输出时,它将打印None,因为None是print的返回值。

您必须以以下方式导入函数:

from del2 import fun
fun() # is enough to print

您只导入了del2,没有乐趣。使用del2.fun或将导入更改为从del2导入fun。一种技术比另一种技术有任何优势吗?如果优点是,如果del2有多个函数,您可以导入多个函数,那么您是否可以只从del2导入*执行操作,这将使事情更清晰/更容易,这样您就不必定义每次导入的文件。不鼓励使用del2导入*,因为这使得不查看源模块就无法知道名称来自何处。它还可能意外地覆盖来自其他模块的名称为什么没有?显然有一个值,因为它打印出value@samman得到None是因为这是调用printhello world的返回值,它是函数的返回值。您对del2.fun的调用收到此None并尽职尽责地将其打印出来。我想我的困惑是,如果print的值为None,那么为什么在执行printhello world时,我仍然会得到hello world的打印输出。我不应该只得到None吗?@samman print的返回值是None,但是当它被调用并成功时,print会在运行时将内容打印到控制台。哦,好的,我想我得到了。这是因为如果不是这样的话,我会用printprint“hello world”,而printprint没有。所以首先它会打印“hello world”,然后它会打印删除打印实际上不会删除任何内容。为什么会这样?看起来printfun和fun给出了2个不同的outputs@samman,这是因为函数不返回任何内容,所以你打印的东西没有任何价值,如果你想打印函数,你可以这样返回内容:def fun:return'hello world'我在给别人的评论中也问过这个问题,做form del2 import fun有什么好处吗?从del2导入*,这样做不是更好吗,如果还有其他函数,你也可以调用它们……Nvm刚刚发现了一个困难的方法,当我尝试在函数中这样做时,得到了一个错误导入*,只允许在模块级别从del2导入*,将导入所有内容,这是正确的,但是,如果您只想使用一些特定的函数,您将使用比您需要的更多的内存,因此最好只导入您需要的内容need@samman使用from del2 import fun的优点是只键入fun而不是del2.fun。缺点是,当您稍后阅读代码时,如果不向上滚动到导入块,您就不知道乐趣从何而来,除非它因为其他原因而令人难忘。