Python自定义函数仅定义一次无法多次调用 报DataFrame不可调用错误如何解决
可以仅定义一次函数就在for循环中多次调用,你遇到的报错和for循环本身无关,是变量命名冲突导致的问题。
报错原因
你收到的TypeError: 'DataFrame' object is not callable报错,本质是table_for_something这个名称原本指向你定义的函数,但后续你在代码的其他位置将table_for_something赋值为了一个DataFrame对象,原函数定义被覆盖。
Jupyter Notebook 环境中全局变量共享,只要运行过一次类似table_for_something = table_for_something(xxx)的赋值语句,该名称就会指向返回的DataFrame而非函数,第二次调用时自然会报错。只有重新运行函数定义的cell,才能把table_for_something重新指向函数对象,和你观察到的现象完全吻合。
修复方案
- 避免使用函数名作为接收返回结果的变量名,将调用代码从类似
table_for_something = table_for_something(table)的写法,改为res_table = table_for_something(table)即可,只要不覆盖函数名,一次定义可任意次调用 - 放开函数中第一行被注释的
df_1= df_1.copy()代码,避免函数运行时修改传入的原始DataFrame,减少额外副作用 - 如果已经出现名称被覆盖的情况,除了重新运行函数定义cell,也可以运行
del table_for_something删除被覆盖的变量,即可恢复原函数的调用
验证方法
你可以通过以下代码确认问题根源:
# 刚定义完函数时运行,输出为 <class 'function'> print(type(table_for_something)) # 报错时运行,输出为 <class 'pandas.core.frame.DataFrame'> print(type(table_for_something))
内容的提问来源于stack exchange,提问作者Alejandro
相关产品推荐
相关产品推荐

