python - 如何将类参数名称赋予函数以更改此参数
问题描述
我有一个从 numpy 数组中删除 nan 值的函数:
def _remove_nans(self):
def get_without_nans(array):
mask = np.invert(np.isnan(array))
return array[mask]
self.average_dynamic_depth = get_without_nans(self.average_dynamic_depth)
# ... many more similar lines to clear more arrays
这可行,但很难阅读,更重要的是它很容易产生复制和粘贴错误,例如:
self.a = get_without_nans(self.b) # <= b instead of a!
是否可以将参数名称作为参数提供给函数 get_without_nans() 而不是数组?这样我就可以以某种方式将其称为:
get_without_nans("self.average_dynamic_depth")
# or
get_without_nans("average_dynamic_depth")
?
解决方案
def _remove_nans(self):
def get_without_nans(self, attrname):
array = getattr(self, attrname, None)
if array is not None:
mask = np.invert(np.isnan(array))
setattr(self, attrname, array[mask])
else:
raise AttributeError("some error message")
get_without_nans(self, "average_dynamic_depth")
# ... many more similar lines to clear more arrays
推荐阅读
- google-spreadsheet-api - 使用javascript获取带有工作表api的单元格的谷歌工作表下拉值
- python - Pycharm 和 Django:ImportError:没有名为“local_settings”的模块
- python - 在没有符号的熊猫上连接两个数据帧,只有日期(来自 pd.datareader)
- lucene - Lucene 查询数组和“IN”、“ALL IN”、“ANY IN”操作
- parsing - Filemaker if 语句不起作用
- c++ - 如何仅将部分 OpenGL 代码实现到使用 SDL 编写的游戏中?
- c# - 如何防止 C# WPF 应用程序启动其他应用程序两次?
- git - Jenkins 中的主机密钥验证失败,在 Docker 中工作
- android - AdMob 欧盟用户意见征求政策
- mysql - MariaDB JDBC 驱动程序与 SQL Server 相比不能有效地批量更新