函数不可变参数覆盖

时间:2019-07-10 04:56:56

标签: python parameters overriding mutable

函数参数使用可变类型 ->错误)参数的多个值

朱庇特笔记

https://docs.python.org/ko/3/tutorial/controlflow.html

def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
    print("-- This parrot wouldn't", action, end=' ')
    print("if you put", voltage, "volts through it.")
    print("-- Lovely plumage, the", type)
    print("-- It's", state, "!")
parrot(110, voltage=220)
def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
    print("-- This parrot wouldn't", action, end=' ')
    print("if you put", voltage, "volts through it.")
    print("-- Lovely plumage, the", type)
    print("-- It's", state, "!")

为什么用户可变类型可以覆盖参数变量?

parrot({1,2,}, voltage={})

TypeError跟踪(最近一次通话)  在 ----> 1只鹦鹉({1,2,},voltage = {})       2#???

TypeError:parrot()为参数“ voltage”获得了多个值

1 个答案:

答案 0 :(得分:1)

出现该错误的原因是在函数定义中,您的第一个参数是voltage。当您调用parrot时,您在此调用语句中传递的第一个参数将被赋予voltage

现在,在parrot(110,voltage=220)中,您给voltage 2个不同的值110和220。这自然会引起错误。同样,出于相同的原因,即使对于parrot({1,2,}, voltage={}),也会遇到相同的错误。

您可以通过删除两个函数调用中的任何一个参数来解决此问题。