2024-04-29 06:55:48 发布
网友
我的问题是为什么我不能再次调用函数?或者,怎么做?
假设我有这个功能:
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”赋给函数?
完成此操作后:
a = 2
a不再是一个函数,它只是一个整数(您重新分配了它!)。因此,如果您试图像调用函数一样调用它,解释器自然会抱怨,因为您正在执行以下操作:
a
2() => TypeError: 'int' object is not callable
底线:不能同时有两个同名的东西,无论是函数、整数还是Python中的任何其他对象。换个名字就行了。
将名称a赋给函数定义,然后将其赋给整数。
这在语法上是正确的,但不是你想要的。
最好给函数提供语义名称,描述传递给它们的参数的用途,给变量提供语义名称,描述它们指向的对象。如果你这样做,你将有更多的可读性代码,你肯定不会再犯这个错误。
python中的名称通常是特定类型的identifiers,更像是命名一个存储变量/函数/方法或python中任何对象的框。 重新分配时,只需重命名一个框。
identifiers
你可以在下面找到答案。
最初,a在位置140515915925784处被分配一个值9。 当我对一个函数使用相同的标识符时,a现在引用一个框,其中包含在4512942512中该函数的地址
140515915925784
9
4512942512
将a重新指派到3再次指向a以引用其他地址。
3
>>> 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 >>>
完成此操作后:
a
不再是一个函数,它只是一个整数(您重新分配了它!)。因此,如果您试图像调用函数一样调用它,解释器自然会抱怨,因为您正在执行以下操作:底线:不能同时有两个同名的东西,无论是函数、整数还是Python中的任何其他对象。换个名字就行了。
将名称a赋给函数定义,然后将其赋给整数。
这在语法上是正确的,但不是你想要的。
最好给函数提供语义名称,描述传递给它们的参数的用途,给变量提供语义名称,描述它们指向的对象。如果你这样做,你将有更多的可读性代码,你肯定不会再犯这个错误。
python中的名称通常是特定类型的
identifiers
,更像是命名一个存储变量/函数/方法或python中任何对象的框。 重新分配时,只需重命名一个框。你可以在下面找到答案。
最初,
a
在位置140515915925784
处被分配一个值9
。 当我对一个函数使用相同的标识符时,a
现在引用一个框,其中包含在4512942512
中该函数的地址将
a
重新指派到3
再次指向a
以引用其他地址。相关问题 更多 >
编程相关推荐