【问题标题】:How to pass dictionary items as function arguments in python? [duplicate]如何在python中将字典项作为函数参数传递? [复制]
【发布时间】: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,从阅读问题中可以清楚地看出英语不是用户的母语,因此很可能是无意的,这就是他们将其翻译成英语的方式。

标签: python function python-2.7 dictionary


【解决方案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
    

    【讨论】:

    • 让我开心:-)
    • 两者有本质的区别。第一个传递引用,第二个复制数据。如果你传递了一个引用并且字典在函数内部发生了变化,它也会在函数外部发生变化,这可能会导致非常糟糕的副作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 2021-09-27
    • 2022-11-02
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    相关资源
    最近更新 更多