Python:def foo(arg:dict={}):?谁还这样设置参数默认值

# python 3.8.10
class Value():
    def __init__(self, value) -> None:
        self.value = value


def fun1(*args, li: list = []):
    for e in args:
        li.append(e)
    return li


def fun2(di: dict = {
    
    }, **kwargs):
    for k in kwargs.keys():
        di[k] = kwargs[k]
    return di


def fun3(value, val: Value = Value(None)):
    val.value = value
    return val


li = fun1('a', 's', 'd')
print(li)
li = fun1('q', 'w', 'e')
print(li)
di = fun2(a='a', s='s', d='d')
print(di)
di = fun2(q='q', w='w', e='e')
print(di)
va0 = fun3('a')
print(va0.value)
va1 = fun3('s')
print(va0.value)
print(va1.value)

参数默认值仅在方法初始化时初始化一次,所以就会出现下面这种现象。

['a', 's', 'd']
['a', 's', 'd', 'q', 'w', 'e']
{'a': 'a', 's': 's', 'd': 'd'}
{'a': 'a', 's': 's', 'd': 'd', 'q': 'q', 'w': 'w', 'e': 'e'}
a
s
s

还是得在方法内部初始化。

def fun2(di:dict={
    
    },**kwargs):
    if di=={
    
    }:
        di={
    
    }
    for k in kwargs.keys():
        di[k]=kwargs[k]
    return di


di=fun2(a='a',s='s',d='d')
print(di)
di=fun2(q='q',w='w',e='e')
print(di)
{'a': 'a', 's': 's', 'd': 'd'}
{'q': 'q', 'w': 'w', 'e': 'e'}

おすすめ

転載: blog.csdn.net/dscn15848078969/article/details/119301349
おすすめ