• 小知识:Python函数传递变长


    先来实践一把:

    def f1(*args):
        print(args)
    f1(1,2,3,4)
    得出:(1, 2, 3, 4)  ----- 是一个元祖

    Part 1:

    *args可以传递任意多的数,args返回的是一个元祖,可迭代

    如果要传入一个列表或元祖,变成多个参数传递,比方说我输入[1,2,3,4],传入到f1变成f1(1,2,3,4)四个参数

    def f1(*args):
    print(args)
    
    f1([1,2,3,4])
    得出:([
    1,2,3,4],), 如果我这么做传入的只是一个参数,对于args,只是元祖中的一个元素 *args可以看作多参数类型,把元祖拆成一个个参数,就像下面这样 print(*args) 得出:1 2 3 4

    如果我传一个参数给一个函数,这个函数把参数传递给另一个函数,就可以像上面这样用

    def f1(*args):
        f2(*args)        #这样a,b,c,d都会被赋值
    def f2(a,b,c,d):
        print(a,b,c,d)
    f1([1,2,3,4])

    Part 2:

    **args为自定参数传值,args为字典类型,**args拆开args字典,如果要二次传递也是这么组:

    def f3(**kwargs):
        f2(**kwargs)
    def f2(a,b,c,d):
        print(a,b,c,d)
    f3(a=1,b=2,c=3,d=4)

    *kwargs是什么鬼?

    def f4(*args,**kwargs):
    print(args,kwargs)
    f4(1,2,a=3,b=4)
    如果这样的函数,好理解,第一个是元祖(1,2),第二个是字典{'a': 3, 'b': 4}
    def f4(*args,**kwargs):
    print(*args,*kwargs)
    第一眼看:擦,这能执行,但是
    这个执行的结果是:1 2 a b
    
    来一个三段论:
    *取出kwargs的key
    Kwargs是字典
    也可以说*可以取出任意字典的key。
    
    推测:也就是任意的key都可以被*拆分,
    
    来执行一个:
    print(*{'a': 3, 'b': 4})
    得出a b
    也就是说*类似运算符,列表来试试:
    print(*[1,2,3,4])
    得出1 2 3 4
    字符串来试试:
    print(*"fdfdsfd")
    得出f d f d s f d
    
    
    可以扩展为任意迭代器?确实,不行,*只能和字符串,列表,字典,集合合作,只能在函数中传递参数,字典只能传key,那我要传value就两个**
  • 相关阅读:
    算法图解-散列表
    算法图解-笔记
    ERROR:cannot read property 'getAttribute' of null 报错处理
    Error: Cannot find module 'node-sass' 报错处理
    一、Spring Cloud概述
    十、ActiveMQ多节点集群
    九、ActiveMQ的消息存储和持久化
    八、ActiveMQ的传输协议
    七、SpringBoot整合ActiveMQ
    六、Spring整合ActiveMQ
  • 原文地址:https://www.cnblogs.com/euewrqe/p/5933066.html
Copyright © 2020-2023  润新知