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

Pat*_*ick 65 python dictionary function python-2.7

我的代码

第一档:

data = {'school':'DAV', 'standard': '7', 'name': 'abc', 'city': 'delhi'}
my_function(*data)
Run Code Online (Sandbox Code Playgroud)

第二档:

my_function(*data):
    schoolname  = school
    cityname = city
    standard = standard
    studentname = name
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,只传递了"data"字典的键my_function(),但我希望键值对能够通过.怎么纠正这个?

我想要my_function()像这样修改

my_function(school='DAV', standard='7', name='abc', city='delhi')
Run Code Online (Sandbox Code Playgroud)

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

编辑:字典键更改为标准

Rem*_*ich 108

如果你想像这样使用它们,用正常的变量名定义函数(但是使用klassfor class,你不能使用保留字):

def my_function(school, city, klass, name):
    schoolname  = school
    cityname = city
    standard = klass
    studentname = name
Run Code Online (Sandbox Code Playgroud)

现在(只要在类字典中将类重命名为klass),您可以**调用函数时使用:

my_function(**data)
Run Code Online (Sandbox Code Playgroud)

它会按你的意愿工作.

  • 你的意思是重新编译整个python解释器工作就像你希望它工作? (2认同)

ven*_*npa 39

*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']
Run Code Online (Sandbox Code Playgroud)

您可以像这样调用函数:

my_function(**data)
Run Code Online (Sandbox Code Playgroud)


Jak*_*yer 9

你可以通过它

def my_function(my_data):
    my_data["schoolname"] = "something"
    print my_data
Run Code Online (Sandbox Code Playgroud)

或者如果你真的想

def my_function(**kwargs):
    kwargs["schoolname"] = "something"
    print kwargs
Run Code Online (Sandbox Code Playgroud)

  • 两者之间有根本的区别。第一个传递引用,第二个复制数据。如果您传递引用并且字典在函数内部发生更改,那么它也会在函数外部发生更改,这可能会导致非常严重的副作用。 (9认同)