Python中转换列表为tuple时出现'tuple'对象不可调用错误的原因?
问题根源:你覆盖了内置的
tuple构造函数! 这个错误是个典型的「变量名遮蔽内置函数」问题,咱们一步步拆解清楚:
第一步埋下的隐患:
当你执行这行代码时:tuple=tuple(list)你同时做了两件事:
- 调用内置的
tuple()构造函数,把列表list转换成了元组 - 但你把这个元组对象赋值给了一个名为
tuple的变量!
这就出问题了——Python里内置的
tuple本来是用来创建元组的构造函数,现在被你用同名变量给「覆盖」了,之后再提到tuple,Python只会认你这个元组对象,而不是原来的构造函数。- 调用内置的
为什么第二次转换会报错:
当你执行another_tuple=tuple(list)时,Python尝试去「调用」tuple这个对象,但此时tuple已经是一个元组实例了,元组是不可调用的(不像函数那样可以加括号执行),所以直接抛出了TypeError: 'tuple' object is not callable。
解决办法
- 最根本的习惯:别用内置类型/函数名当变量名:把你的元组变量改成别的名字,比如
my_tuple或者t1,示例:my_list=['a','b'] my_tuple=tuple(my_list) my_list.append('a') print(my_tuple) # 输出 ('a', 'b') another_tuple=tuple(my_list) # 此时正常执行,输出 ('a', 'b', 'a') - 如果已经在交互式环境里搞砸了:可以用
del tuple命令删掉这个遮蔽变量,这样Python就会重新识别内置的tuple()构造函数。
内容的提问来源于stack exchange,提问作者rooni
相关产品推荐
相关产品推荐

