23

我有一个如下的函数定义,并且我正在传递关键字参数。如何返回与关键字参数同名的字典?

手动我可以这样做:

def generate_student_dict(first_name=None, last_name=None , birthday=None, gender =None):
    return {
        'first_name': first_name,
        'last_name': last_name,
        'birthday': birthday,
        'gender': gender
    }

但我不想那样做。有什么方法可以让我在不实际输入字典的情况下完成这项工作?

 def generate_student_dict(self, first_name=None, last_name=None, birthday=None, gender=None):
     return # Packed value from keyword argument.
4

5 回答 5

14

如果这种方式适合您,请使用kwargs(请参阅了解 Python 中的 kwargs),如下面的代码片段所示:

def generate_student_dict(self, **kwargs):            
     return kwargs

否则,您可以使用built-in locals()at 函数开始创建参数的副本并返回该副本:

def generate_student_dict(first_name=None, last_name=None , birthday=None, gender =None):
     # It's important to copy locals in first line of code (see @MuhammadTahir comment).
     args_passed = locals().copy()
     # some code
     return args_passed

generate_student_dict()
于 2016-02-04T10:06:01.917 回答
8

如果你不想通过**kwargs,你可以简单地返回locals

def generate_student_dict(first_name=None, last_name=None, 
                          birthday=None, gender=None):
    return locals()

请注意,self如果您将结果作为参数传递,则要从结果中删除。

于 2016-02-04T10:06:52.890 回答
3

获取关键字参数**kwargs

def generate_student_dict(self, **kwargs):
  # use it like
  # kwargs.get('first_name')
  # kwargs.get('last_name')
  # kwargs.get('birthday')
  # kwargs.get('gender')
  return kwargs
于 2016-02-04T10:05:43.383 回答
1

你可以使用locals()函数。locals()更新并返回表示当前本地符号表的字典。自由变量locals()在功能块中被调用时返回,而不是在类块中。

于 2016-02-04T10:09:05.833 回答
0

如果您想将更新的值作为字典返回

    def generate_student_dict(first_name=None, last_name=None , birthday=None, gender =None):
        main_args = locals().copy()
        first_name = 'first'
        last_name = 'last'
        birthday = '20 jan 1993'
        newvar = 100
        new_args = locals().copy()
        updated_args = {}

        for k,v in new_args.items():
            if k in main_args.keys():
                updated_args[k] = v
        return updated_args

    dict = generate_student_dict()
    print(dict) #{'first_name': 'first', 'last_name': 'last', 'birthday': '20 jan 1993', 'gender': None}

如果您想将初始值作为字典返回

    def generate_student_dict_1(first_name=None, last_name=None , birthday=None, gender =None):
        args = locals()
        first_name = 'first'
        last_name = 'last'
        birthday = '20 jan 1993'
        newvar = 100
        return args

    dict = generate_student_dict_1()
    print(dict) #{'first_name': None, 'last_name': None, 'birthday': None, 'gender': None}

如果您想包含所有更改,包括方法内定义的额外变量

    def generate_student_dict_2(first_name=None, last_name=None , birthday=None, gender =None):
        first_name = 'first'
        last_name = 'last'
        birthday = '20 jan 1993'
        newvar = 100
        args = locals()
        return args

    dict = generate_student_dict_2()
    print(dict) #{'first_name': 'first', 'last_name': 'last', 'birthday': '20 jan 1993', 'gender': None, 'newvar': 100}
于 2020-02-11T11:58:30.363 回答