Function python 3.3在交互和程序模式下的结果不一致

Function python 3.3在交互和程序模式下的结果不一致,function,python-3.3,Function,Python 3.3,如果运行代码python function2.py,则 # File function2.py def f(): print("I am f") return("return f") if __name__ == "__main__": print("print(f) gives", end=": "); print(f) print("f gives", end=": "); f print("f() gives", end=": "); f()

如果运行代码
python function2.py
,则

# File function2.py

def f():
  print("I am f")
  return("return f")

if __name__ == "__main__":
  print("print(f) gives", end=": "); print(f)
  print("f        gives", end=": "); f
  print("f()      gives", end=": "); f()
print(f)给出:
f给出:f()给出:我是f
但是,如果以交互方式键入并执行代码,您将有:

print(f) gives: <function f at 0x026CD6F0>
f        gives: f()      gives: I am f
>>def():
...   打印(“我是f”)
...   返回(“返回f”)
...
>>>如果名称=“\uuuuu main\uuuuuuuu”:
...   打印(“打印(f)给出”,end=“:”;印刷品(f)
...   打印(“f给出”,end=“:”);F
...   打印(“f()给出”,end=“:”;f()
...
印刷品(f)给出:
f给出:
我是f
“返回f”
>>>

这是一个错误吗?

@DSM是正确的。
背后的东西
是一个新语句

你写的是

>>> def f():
...   print("I am f")
...   return("return f")
...
>>> if __name__ == "__main__":
...   print("print(f) gives", end=": "); print(f)
...   print("f        gives", end=": "); f
...   print("f()      gives", end=": "); f()
...
print(f) gives: <function f at 0x025BD6F0>
f        gives: <function f at 0x025BD6F0>
f()      gives: I am f
'Return f'
>>>
REPL=读取评估打印循环=交互式解释器=
>>

你也是

print("print(f) gives", end=": ")
print(f)
print("f        gives", end=": ")
f # this causes the program to just go over it and do nothing but in the REPL this is printing f
print("f()      gives", end=": ")
f()
>>f#在REPL中打印(f)
>>>f()#print(f())in REPL#=print(“我是f”);打印(“返回f”)
我是f
“返回f”
因此,REPL在键入的程序的每一行周围都放置了一个
print()


这就是为什么会有输出。如果您想使其一致,请使用
打印

我不确定不一致是什么。如果在控制台上键入
3
,您会看到
3
打印出来。但是如果你只是在程序
3
中有一行,你就看不到任何打印的内容。这里您刚刚用
f
替换了
3
。让您困惑的是Python REPL本身的工作方式吗?谢谢您的回答。但是,在第一个实例中,f()没有返回字符串,但第二个实例返回了字符串。f()在交互模式和程序模式之间有什么区别吗?
>>> f # print(f) in REPL
<function f at 0x025BD6F0>
>>> f() # print(f()) in REPL # = print("I am f"); print("return f")
I am f
'return f'