Python 分配到打印功能

Python 分配到打印功能,python,python-3.x,function,variable-assignment,Python,Python 3.x,Function,Variable Assignment,我的一个朋友正在学习Python教程,她请求了一些帮助,因为她的代码没有按预期工作 我能够立即发现这个问题,并帮助她自己推断出这个问题。代码就是这样的 myValue = 575.0 print=(myValue) 显然,打印失败。但当我说它失败了,我只是说它没有打印任何东西。解释器仍然执行那一行,没有任何问题。因此,我的问题是,为什么赋值运算符不引发语法错误?它不会引发错误,因为在Python 3中,print是一个常规函数。函数对象与名称绑定,因此,print是一个引用特定函数对象的名称(

我的一个朋友正在学习Python教程,她请求了一些帮助,因为她的代码没有按预期工作

我能够立即发现这个问题,并帮助她自己推断出这个问题。代码就是这样的

myValue = 575.0
print=(myValue)

显然,打印失败。但当我说它失败了,我只是说它没有打印任何东西。解释器仍然执行那一行,没有任何问题。因此,我的问题是,为什么赋值运算符不引发语法错误?

它不会引发错误,因为在Python 3中,
print
是一个常规函数。函数对象与名称绑定,因此,
print
是一个引用特定函数对象的名称(“变量”)

由于函数与变量没有什么不同,您可以随意重新分配它们:

def add(a, b):
    return a + b

add = "ha-ha, I'm a string"
=
符号后的括号是您在数学中使用的括号类型:

print = (1 + 2)  # print == 3
紧跟在名称后面的括号表示函数调用

但是现在
print
坏了,你永远无法打印任何东西!不是真的-有一个副本在
\uu内置\uuuu.print

print = __builtins__.print
但是,您也可以很容易地将其搞糟:

__builtins__.print = 5

然而,在Python 2中,
print
是一个语句,而不是一个常规函数,因此它失败了:

Python 2.7.16 (default, Dec  3 2019, 07:02:07)
>>> print = 5
  File "<stdin>", line 1
    print = 5
          ^
SyntaxError: invalid syntax
Python 2.7.16(默认值,2019年12月3日,07:02:07)
>>>打印=5
文件“”,第1行
打印=5
^
SyntaxError:无效语法

通过这样做进行实验:

my_value = 575.0
print = (my_value)
print(print)
请注意,出现以下错误:

Traceback (most recent call last):
  File "C:/Users/jchca/PycharmProjects/Josepe_project/Josepe/Practice10.py", line 4, in <module>
    print(print)
TypeError: 'float' object is not callable
回溯(最近一次呼叫最后一次):
文件“C:/Users/jchca/PycharmProjects/Josepe_project/Josepe/Practice10.py”,第4行,在
打印(打印)
TypeError:“float”对象不可调用

本质上,她重写了print函数,因此
print
现在充当浮点值(这在Python3.x中)

为什么它会引发语法错误?它只是将一个值赋给局部变量
print
,从而将该名称的内置函数隐藏在同一范围内。虽然这是一个非常糟糕的想法,但它并没有被任何语法规则所禁止。欢迎来到动态语言的世界
print
只是一个可以绑定任何对象的变量。它以python打印函数开始,但您可以将其更改为任何您想要的内容。太好了。谢谢大家!谢谢你的回答。我没有意识到Python变量也可以是函数指针。您的代码警告也很有用。您对Python2和Python3之间状态变化的原因有什么见解吗?Python 2版本对我来说似乎更安全。@buzzdriving,请参阅。谢谢谢谢你的回答,约书亚。