分配给打印功能

最后发布: 2020-08-03


问题

我的一个朋友正在做Python教程课程,因为她的代码没有按照预期工作,所以向我寻求帮助。

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

myValue = 575.0
print=(myValue)

很明显的。印制 失败了。但是当我说失败时,我只意味着它没有打印任何东西。解释器仍然执行了那一行,没有任何问题。所以,我的问题是,为什么赋值操作符没有引发语法错误?

python python-3.x function variable-assignment
回答

它不会引起错误,因为在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中)