我的一个朋友正在做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
是坏的,你永远无法打印任何东西! 并非如此--有一个副本在 __builtins__.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
用这个做实验
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
实质上,她重写了打印函数,所以... ... print
现在作为float值 (这是在Python 3.x中)