繁体   English   中英

重命名 **kwargs 以传递给另一个方法

[英]Renaming **kwargs to pass in to another method

我有以下方法。 我试图将一些变量传递给第一个方法,然后在将它们传递给第二个方法之前重命名它们。

def method2(**kwargs):
    # Print kwargs
    for key in kwargs:
        print(key, kwargs[key])

def method1(**kwargs):
    # Need to rename kwargs to pass in to method2 below
    # Keys are method1 kwargs variables and values are method 2 kwargs variables

    rename_dict = {'Val1': 'val_1', 'Val2': 'val_2', 'Val3': 'val_3'}
    new_kwargs = {}

    # The kwargs passed in method 1 need to their values to be set to the 
    # corresponding variables in the rename_dict before they are pass in method 2

    method2(**new_kwargs)

method1(Val1 = 5, Val2 = 6)

# Output desired
val_1 5
val_2 6

您可以使用 dict 理解更简洁地编写它:

new_kwargs = {rename_dict[key]: value for key, value in kwargs.items()}

为了重命名 dict 键,您可以使用以下命令:

new_kwargs = {rename_dict[key]:value in key,value for kwargs.items()}

此外,您可以使用返回元组列表(键、值)的items()在 python 中迭代字典,您可以直接在循环中解压缩它们:

def method2(**kwargs):
    # Print kwargs
    for key, value in kwargs.items():
        print(key, value)

我可以通过在第一种方法中添加一个 for 循环来做到这一点

def method2(**kwargs):
    # Print kwargs
    for key in kwargs:
        print(key, kwargs[key])

def method1(**kwargs):
    # Need to rename kwargs to pass in to method2 below
    # Keys are method1 kwargs variables and values are method 2 kwargs variables

    rename_dict = {'Val1': 'val_1', 'Val2': 'val_2', 'Val3': 'val_3'}
    new_kwargs = {}
    for key in kwargs:
        new_kwargs[rename_dict[key]] = kwargs[key]
    print(new_kwargs)
    # The kwargs passed in method 1 need to their values to be set to the 
    # corresponding variables in the rename_dict before they are pass in method 2

    method2(**new_kwargs)

method1(Val1 = 5, Val2 = 6)

# Output

{'val_1': 5, 'val_2': 6}
val_1 5
val_2 6

我没有意识到您可以在 python 方法中将变量名作为字符串传递。 我希望我能够帮助尝试做同样事情的人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM