提问人:Roma V 提问时间:8/15/2022 更新时间:8/15/2022 访问量:70
在 python 中为函数定义输入参数时更灵活?
More flexibility in defining input arguments for a function in python?
问:
我有以下函数,我正在使用它来运行分析。
当我设置时,它应该运行整个第一段分析,输出图 1、2 和 3。当我设置时,它应该运行整个第二部分分析,输出图 4、5 和 6。run_analysis_1 = True
run_analysis_2 = True
def save_locally(self,
run_all_analysis: bool = False,
run_analysis_1: bool = False,
run_analysis_2: bool = False):
if run_analysis_1 = True
plot_1 # some function that creates plot 1 + saves to local folder
plot_2 # some function that creates plot 2 + saves to local folder
plot_3 # some function that creates plot 3 + saves to local folder
if run_analysis_2 = True
plot_4 # some function that creates plot 4 + saves to local folder
plot_5 # some function that creates plot 5 + saves to local folder
plot_6 # some function that creates plot 6 + saves to local folder
我希望在选择我想要运行的地块时有很大的灵活性,这样我就能够:
- 运行整个分析(例如,运行分析 1 的所有分量以输出图 1、2 和 3)
- 运行分析的一部分(例如,仅运行分析 1 中的绘图 1)
所以它看起来像下面这样......
save_locally(run_analysis_1.plot_1=True, run_analysis_2.all=True)
有没有办法做到这一点?
答:
1赞
Mandera
8/15/2022
#1
这样的东西可能对你有用;
- 将分析中的所有图存储在其自己的类中
- 自定义属性,用于将所有定义的绘图存储在一个列表中
all
- 更改 的签名 to take
save_locally
*args
会让你像这样非常干净地调用你的函数:
save_locally(Analysis1.plot1, Analysis1.plot2, Analysis2.all)
from itertools import chain
class _Analysis:
all = ...
def __init_subclass__(cls, **kwargs):
cls.all = [value for key, value in cls.__dict__.items() if not key.startswith("_")]
class Analysis1(_Analysis):
plot1 = "a"
plot2 = "b"
plot3 = "c"
class Analysis2(_Analysis):
plot4 = "d"
plot5 = "e"
plot6 = "f"
def save_locally(*plots):
plots = chain(*plots) # Flatten - lets us write Analysis.all without *
for plot in plots:
print(plot, end=" ") # Do whatever with plot
save_locally(Analysis1.plot1, Analysis1.plot2, Analysis2.all)
>>> a b d e f
评论
1赞
Roma V
8/15/2022
太棒了,这就是我所追求的!
评论