Назначение функции печати - PullRequest
0 голосов
/ 22 апреля 2020

Моя подруга проходит учебный курс Python и попросила некоторой помощи, потому что ее код не работал должным образом.

Я смог сразу определить проблему и помочь ей вывести проблему для нее. Код был примерно таким:

myValue = 575.0
print=(myValue)

Очевидно, print не удалось. Но когда я говорю, что это не удалось, я имею в виду только то, что ничего не печаталось. Переводчик все еще выполнил эту строку без каких-либо проблем. Итак, мой вопрос: почему оператор присваивания не вызывает синтаксическую ошибку?

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Ошибка не возникает, потому что в 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
0 голосов
/ 22 апреля 2020

Поэкспериментируйте следующим образом:

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 теперь действует как плавающее число значение (в Python 3.x)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...