gpt4 book ai didi

python - 如何避免 Python 3 中函数调用中的重复参数

转载 作者:行者123 更新时间:2023-12-04 10:59:22 34 4
gpt4 key购买 nike

如何避免在 Python 中在类似的方法调用中一遍又一遍地重复相同的参数?

例如在这个片段中:

for col in self.numerical_columns:
self.comp_train_df = self.comp_train_df.merge(self.get_aggregates(self.train_df, col), left_index=True, right_index=True)
self.comp_test_df = self.comp_test_df.merge(self.get_aggregates(self.test_df, col), left_index=True, right_index=True)

重复这些参数:
left_index=True, right_index=True

理想情况下,您可以在变量中定义重复参数并重新使用它们。我试过这段代码,但作为一个 Python 新手,我不确定这是否是正确的方法:
merge_args = {'left_index':True, 'right_index':True}
for col in self.numerical_columns:
self.comp_train_df = self.comp_train_df.merge(self.get_aggregates(self.train_df, col), **merge_args)
self.comp_test_df = self.comp_test_df.merge(self.get_aggregates(self.test_df, col), **merge_args)

最佳答案

这是一个有趣的问题,我记得我曾经用装饰器做过这个。这可能有点矫枉过正,但也许值得考虑。

考虑一个带有多个关键字参数的函数,比如这个函数:

def yell(sound='woof', volume='loud', pitch='high')
return f'{sound} -> {volume} -> {pitch}'

假设您想连续多次使用此功能,但音量仅为中等。在这种情况下,您必须每次都使用 volume 参数调用该函数。您可以装饰该函数并根据自己的喜好更改其默认参数,而不是这样做。
def change_default(**new_kwargs):
def wrapper(func):
def new_fn(*args, **kwargs):
for key, val in kwargs.items():
if key in new_kwargs:
new_kwargs[key] = kwargs.pop(key)
return func(*args, **kwargs, **new_kwargs)
return new_fn
return wrapper

本质上,您创建了一个可参数化的装饰器,它接受您的函数并更改其默认参数。所有其他 kwarg 不受影响,但可以根据需要手动更改。

回到用例,你可以这样装饰它:
@change_default(volume='medium')
def yell(sound='woof', volume='loud', pitch='high')
return f'{sound} -> {volume} -> {pitch}'

调用 yell 函数后,它返回:
woof -> medium -> high

我发现在某些情况下这比传递字典更舒服。

关于python - 如何避免 Python 3 中函数调用中的重复参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58930117/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com