如何在python中将字典项作为函数参数传递? [复制]

Posted

技术标签:

【中文标题】如何在python中将字典项作为函数参数传递? [复制]【英文标题】:How to pass dictionary items as function arguments in python? [duplicate] 【发布时间】:2014-03-26 00:33:17 【问题描述】:

我的代码

第一个文件:

data = 'school':'DAV', 'standard': '7', 'name': 'abc', 'city': 'delhi'
my_function(*data)

第二个文件:

my_function(*data):
    schoolname  = school
    cityname = city
    standard = standard
    studentname = name

在上面的代码中,只有“数据”字典的键被传递给my_function(),但我希望键值对传递。如何纠正这个问题?

我希望my_function() 像这样修改

my_function(school='DAV', standard='7', name='abc', city='delhi')

这是我的要求,根据这个给出答案

EDIT: 字典键class 改为standard

【问题讨论】:

不要使用 Python 中默认对象的变量名,例如单词class ...这是我的要求,按照这个给出答案 -- 呃,有点苛刻。不过,这是个好问题。 @pfabri,从阅读问题中可以清楚地看出英语不是用户的母语,因此很可能是无意的,这就是他们将其翻译成英语的方式。 【参考方案1】:

如果您想这样使用它们,请照常使用变量名定义函数:

def my_function(school, standard, city, name):
    schoolName  = school
    cityName = city
    standardName = standard
    studentName = name

现在您可以在调用函数时使用**

data = 'school':'DAV', 'standard': '7', 'name': 'abc', 'city': 'delhi'

my_function(**data)

它会按你的意愿工作。

P.S.不要使用class等保留字。(例如,改用klass

【讨论】:

我有这行 def my_function(*data),根据这行修改你的代码 你的意思是重新编译整个 python 解释器,让它像你想要的那样工作? @markcial 有什么方法可以按照我的喜好在代码中实现吗? @Patrick 不是机会,唯一的方法是 RemcoGerlih 提出的方法。他有一个有效的代码示例,你的失败了,那么遵循他们的指导方针是合乎逻辑的 @MayankChoudhary:要么先用选定的键构造一个新字典,然后用** 传递它,要么只用my_function(mykey1=mydict["mykey1"], ...)。没有自动方式来调用这样的函数。【参考方案2】:

*data 将参数解释为元组,而您必须传递 **data 将参数解释为字典。

data = 'school':'DAV', 'class': '7', 'name': 'abc', 'city': 'pune'


def my_function(**data):
    schoolname  = data['school']
    cityname = data['city']
    standard = data['class']
    studentname = data['name']

你可以这样调用函数:

my_function(**data)

【讨论】:

【参考方案3】:

你可以通过它

def my_function(my_data):
    my_data["schoolname"] = "something"
    print my_data

或者如果你真的想要

def my_function(**kwargs):
    kwargs["schoolname"] = "something"
    print kwargs

【讨论】:

让我开心:-) 两者有本质的区别。第一个传递引用,第二个复制数据。如果你传递了一个引用并且字典在函数内部发生了变化,它也会在函数外部发生变化,这可能会导致非常糟糕的副作用。

以上是关于如何在python中将字典项作为函数参数传递? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

没有指针,我可以在 Python 中将引用作为参数传递吗? [复制]

如何在 FastAPI 中将字典列表作为 Body 参数发送?

如何在类中将函数作为参数传递?

如何在 Python 中将方法作为参数传递

如何在 CoffeeScript 中将两个匿名函数作为参数传递?

如何在python类中将方法名称作为参数传递