zoukankan      html  css  js  c++  java
  • python 参数笔记 --> 位置参数 关键字参数 命名参数 形式参数 默认参数 可变参数 可选参数 位置顺序

    这么多名称,python到底有几种参数:

      2种:普通参数(即位置参数,靠位置先后来指定参数),关键字参数(即命名参数,靠名字来指定参数)。

    常说的可变参数也就是普参的集合,*args。

    常说的关键字参数一般指关键字参数集合,**kwargs。

    参数优先级:普通参数(位参)> 普参集 > 关键字参数 > 关参集:

    def add(a, *args, b=2, **kwargs):
        print('a:', a)#普通参数
        print('args:', args)#普参集
        print('b:', b)#关键字参数,在定义函数时使用就是默认参数
        print('kwargs:', kwargs)#关参集
    
    add(1, 2, 3, b=4, c=5, d=6)
    输出>>a: 1
         args: (2, 3)
         b: 4
         kwargs: {'c': 5, 'd': 6}    

    具体如下:

    形参:形式参数:parameter;(在定义函数时指定的参数形式,区别于实参,跟位参关参等不在一个维度。如:

    def add(a,b): #这里的a,b为形参(换个维度也可以称为位置参数)
        return a+b

    实参:实际参数(或直接称参数,以下同理):argument(简:arg,复:args);(在调用函数时指定的参数值,如:

    c = add(1, 2) #这里的1,2为实参(换个维度也可以称为位置参数)

    参考:

    默认参数:形参里的关键字参,如

    def c(a=1, b): #a为默认参,b为位参
        pass

    可变参数:即可选参数,即参数集,如*args,**kwargs, 即调用函数时可随意填入*args,**kwargs中的0个或多个,具体参考下文。

    普通参数:即位置参数,最普通常用的参数形式, 区别于关键字参数,顾名思义,是靠位置来明确参数指定的。即不靠名字标识符,就一个光杆。

    位置参数集:把位参打包,放入*args元组;(args只是名称,可换成其他任意合法标识符,如:*my_args)

    def c(*my_argsss): #类型被指定为元组
        print(type(my_argsss))
    
    c(1,2)
    输出>><class 'tuple'>
    c(1)
    输出>><class 'tuple'>

    命名实参:关键字参数:keyword_argument(简:kwarg,复:kwargs);(区别于位参,关参靠名字来指定参数,在定义函数和调用函数的时候指定了名字(标识符),如:

    def add(a, b=1): #a为位参,b为默认参(注意顺序,不能把位参放到关键参后面)
        return a+b
    
    add(2, b=5) #调用的时候,b=5就是关键参,这里b为标识符(identifier)
    
    

    def c(**k):
        print(type(k)) #类型被指定为字典

    c(a=1, b=2) #a,b为标识符

    输出>><class 'dict'>

    c(**{'a':1,'b':2})

    输出>><class 'dict'>

    c({'a':1,'b':2})

    输出>>TypeError: c() takes 0 positional arguments but 1 was given(类型错误:c()未定义位置参数,但接收到了 1 个位置参数)

    #{'a':1,'b':2}被当成一个参数,这个参数是字典,这个字典没有标识符,所以是位参;

    #**{'a':1,'b':2}被解析成多个参数,参数是字典里的key=value,标识符为key,实参为value

    命名实参集:关键字参数集:**kwargs;(kwargs只是名称,可换成其他任意合法标识符,如:**some_kws。具体如下:

    def add(a, b):
        return a + b
    add(a
    =1, b=2) 输出>>3 add(**{'a':1,'b':2}) 输出>>3 def add(**k): return k['a']+k['b']
    add(a
    =1,b=2) 输出>>3 add(**{'a':1,'b':2}) 输出>>3
  • 相关阅读:
    昨天晚上简单英文词典查询及排版系统写完了
    c函数 atoi() 将字符串转换为整型 kbhit() 检测是否有按键按下 区分bioskey()
    写了一个字典树
    用scanf清空缓冲区 对比fflush
    爬取千千小说 -- xpath
    第二十六篇 -- 去掉标题栏并自定义标题栏
    git clone 中途停止不动
    使用turtle库画一朵玫瑰花带文字
    正则爬取我要个性网的头像
    用Pygal画一个英雄能力的图
  • 原文地址:https://www.cnblogs.com/oler/p/13532641.html
Copyright © 2011-2022 走看看