Python: функция и переменная с тем же именем

Мой вопрос в том, почему я не могу снова вызвать функцию? Или, как это сделать?

Предположим, что у меня есть эта функция:

def a(x, y, z):
 if x:
     return y
 else:
     return z

и я вызываю его с помощью:

print a(3>2, 4, 5)

Я получаю 4.

Но представьте, что я объявляю переменную с тем же именем, что функция (по ошибке):

a=2

Теперь, если я попытаюсь сделать:

a=a(3>4, 4, 5)

или

a(3>4, 4, 5)

Я получу эту ошибку: "TypeError: объект" int "не может быть вызван"

Невозможно назначить переменную 'a' функции?

Ответ 1

После этого выполните следующие действия:

a = 2

a больше не является функцией, это просто целое число (вы переназначили его!). Поэтому, естественно, интерпретатор будет жаловаться, если вы попытаетесь вызвать его, как если бы это была функция, потому что вы это делаете:

2()
=> TypeError: 'int' object is not callable

В нижней строке: вы не можете иметь две вещи одновременно с тем же именем, будь то функция, целое число или любой другой объект в Python. Просто используйте другое имя.

Ответ 2

имена в python, как правило, являются identifiers для определенного типа, больше похоже на присвоение имени блоку, в котором хранится переменная/функция/метод или любой объект в python. Когда вы переназначаете, вы просто переименовываете окно.

Вы можете узнать это, выполнив следующие действия.

Первоначально a присваивается значение 9 в местоположении 140515915925784. Как только я использовать один и тот же идентификатор для функции, относится теперь к коробке, содержащей адрес этой функции в a 4512942512

Переназначение к a 3 раз указывает, чтобы обратиться к другому адресу. a

>>> a = 9
>>> id(a)
140515915925784
>>> def a(x):
...     return x
... 
>>> id(a)
4512942512
>>> a
<function a at 0x10cfe09b0>
>>> 
>>> 
>>> 
>>> a = 3
>>> id(a)
140515915925928
>>> a
3
>>>

Ответ 3

Вы назначаете имя a определению функции, а затем присваиваете его целому числу.

Синтаксически правильно, но это не то, что вы хотите.

Лучше всего дать функции семантическим именам, которые описывают, что вы делаете, с передаваемыми им аргументами и давать семантические имена переменных, которые описывают, на какой объект они указывают. Если вы это сделаете, у вас будет более читаемый код, и вы наверняка не повторите эту ошибку.

Ответ 4

Почему это так, здесь имя переменной и метода совпадают

def age: age = int (input()) print (age)

возраст() 5 5