• 函数2——参数


    1.位置参数:从左至右进行匹配

    2.关键字参数:通过参数名进行匹配

    3.默认参数:为没有传入值的参数定义参数值

    4.可变参数(动态传参):收集任意多基于位置或关键字的参数

    参数出现顺序

    ​ 在函数中,参数出现顺序为:位置参数、关键字参数、默认参数(函数定义时)、任意长度的位置参数、任意长度的关键字参数

    位置参数和关键字参数
    def f(id,name,age):
    	print(id,name,age)
    f(1901001,'Able',21)
    # 1901001 Able 21
    f(id =1901001,'Able',21)
    #报错
    f(1901001,'Able',age =21)
    # 1901001 Able 21
    #  位置参数 > 关键字参数
    
    关键字参数和默认参数
    def f(name,age,gender = 'man'):
    	print(name,age,gender)
    f('Able',21)
    # Able 21 man
    def f(name,gender = 'man',age)
    	print(name,age,gender)
    #导致默认参数无法使用,还会增加关键字参数的使用
    
    #  位置参数 >关键字参数 > 默认参数
    

    重要警告: 默认值只会创建一次。这条规则在默认值为可变对象(列表、字典以及大多数类实例)时很重要

    def func(a,L = []):
        L.append(a)
        print(a,L)
    func(1)  			#第一使用默认参数
    func(2,L = [2])
    func(3)             #第二次使用默认参数
    #结果:
    1 [1]
    2 [2, 2]
    3 [1, 3]     
    
    任意参数

    1.任意数量的位置参数

    def func(*arges):
        print(arges)
    func(1,2,3)
    #结果
    (1, 2, 3)
    
    #Python将所有位置相关的参数收集到一个新的元组中,并将这个元组赋值给变量arges。
    
    #在函数定义时,如果将位置参数放在*arges后面,在函数调用时,都会当作是*arges的形参,从而引发错误。
    

    2.任意数量的关键字参数

    def func(**kwarges):
    	print(kwarges)
    func(a = 1,b = 2)
    #结果
    {'a': 1, 'b': 2}
    
    # **它只对关键字参数有效,将这些关键字参数传递给一个新的字典
    
    #在函数定义时,如果将关键字参数或默认参数放在**kwarges后面,在函数调用时,都会当作是**kwarges的形参,从而引发错误。
    
    参数解包

    ​ 在函数调用时,同样能够使用*和**语法

    def func(a,b,c):
    	print(a,b,c)
    L = [7,8,9]
    func(*L)   
    #  7 8 9
    
    #在函数调用时,*会对参数集合进行解包。
    
    def func(a,b,c):
        print(a,b,c)
    D = {'a':1,'b':2,'c':3}
    #  1 2 3
    
    #在函数调用时,**会以key:value对的形式解包一个字典,使其成为独立的关键字参数。
    

    ​ 查找一个序列中与其它n(n>1)个序列中的相同元素(每个序列中都至少有一个)

    def union(*arges):
    	res = []
    	for i in arges[0]:
    		for other in arges[1:]:
    			if i not in other:
    				break  
    		else:
    			res.append(i)
    	return res		
    

    keyword - only参数

    def kwo(a,*b,c):
    	print(a,b,c)
    #c必须按关键字传递
    

    函数作为参数

    例如内置函数map(function,iterable)

  • 相关阅读:
    Swift扩展(Extension)
    Swift构造器(Initializer)与析构器(Deinitializer)
    Swift下标
    Swift方法
    Swift属性
    Swift类与结构体
    Swift闭包(Closure)
    python调用c++/c 共享库,开发板上编译的一些坑!
    python调用c++类方法(2)
    ubuntu 18.04 gcc g++降级4.8版
  • 原文地址:https://www.cnblogs.com/notfind/p/11479863.html
Copyright © 2020-2023  润新知