Python 个关键字参数解压和 return 个字典
Python keyword arguments unpack and return dictionary
我有一个函数定义如下,我正在传递关键字参数。我如何获得 return 与关键字参数同名的字典?
手动我可以做:
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.
获取 **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
如果这种方式适合您,请使用 kwargs (see Understanding kwargs in Python),如下面的代码片段所示:
def generate_student_dict(self, **kwargs):
return kwargs
否则,您可以在函数开始时创建一个带有 built-in locals()
的参数副本,并且 return 该副本:
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()
如果你不想通过**kwargs
,你可以简单地return locals
:
def generate_student_dict(first_name=None, last_name=None,
birthday=None, gender=None):
return locals()
请注意,如果将 self
作为参数传递,您希望从结果中删除它。
您可以使用locals()
功能。 locals()
更新和 returns 表示当前本地符号的字典 table。 locals()
在功能块中调用时返回自由变量,但在 class 块中不返回。
如果您想return将更新值作为字典
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}
如果您想return将初始值作为字典
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}
我有一个函数定义如下,我正在传递关键字参数。我如何获得 return 与关键字参数同名的字典?
手动我可以做:
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.
获取 **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
如果这种方式适合您,请使用 kwargs (see Understanding kwargs in Python),如下面的代码片段所示:
def generate_student_dict(self, **kwargs):
return kwargs
否则,您可以在函数开始时创建一个带有 built-in locals()
的参数副本,并且 return 该副本:
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()
如果你不想通过**kwargs
,你可以简单地return locals
:
def generate_student_dict(first_name=None, last_name=None,
birthday=None, gender=None):
return locals()
请注意,如果将 self
作为参数传递,您希望从结果中删除它。
您可以使用locals()
功能。 locals()
更新和 returns 表示当前本地符号的字典 table。 locals()
在功能块中调用时返回自由变量,但在 class 块中不返回。
如果您想return将更新值作为字典
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}
如果您想return将初始值作为字典
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}