笔记

def func(a, *args):
    print('{}{}'.format(a, args))


func(2, [1, 23, 4], 'fad')


def func2(a, b=10, c=3, **kwargs):
    print(a, b, c, kwargs)


func2(1)  # 1 10 3 {}  给默认值所以可传入一个参数
func2(2, b=11)  # 2 11 3 {}
func2(3, c=5, b=7, x=1, y=2)  # 3 7 5 {'x': 1, 'y': 2},传值的时候可以打乱位置


def func3(a, *args, **kwargs):
    print(a, args, kwargs)


t = (1, 2, 3, 4)
func3(1, t)  # 1 ((1, 2, 3, 4),) {}

l = [2, 5, 8]
func3(1, l, c=9, b=6)  # 1 ([2, 5, 8],) {'c': 9, 'b': 6}

dict1 = {'1': 'a', '2': 'b', '3': 'c'}
func3(1, *l, **dict1)       # 1 (2, 5, 8) {'1': 'a', '2': 'b', '3': 'c'}        # *拆列表 **拆字典

def func1(name, *args):
    if len(args) > 0:
        for i in args:      # 这里args是元组
            print('{}学过了{}'.format(name, i))
    else:
        print('没有学过任何语言')


courses = ['html', 'mysql', 'c++', 'python']
# 调用函数
func1('健健', *courses)       # *拆列表(拆包)
'''
无参数函数:
    def func():
        pass
    func() ---调用
    
    有参数函数
1.普通参数
    def func(name,age):
        pass
    func('aa',19) --->形参与实参的个数要一致

2.可变参数:
    A.
        def func(*args):
            pass
        func() ----> 函数调用时,实参的个数可以没有,也可以多个,*不能是关键字参数
        func(4) 
        func(5,'h')

    B.
        def func(**kwargs):
            pass
        func(a=1,b=2)----> 函数调用时,实参的个数可以没有,也可以多个,**必须是关键字参数
    
    C.
        def func(*args,**kwargs):
            pass
        list1 = [1,2,3,4,5]
        dict1 = {'1':'a','2':'b','3':'c'}
        func(*list1,**dict1)    拆包func(1,2,3,4,5,'1':'a','2':'b','3':'c')
    
    D.混用
        def func(name,*args,*8kwargs):
            pass
        func('tom') ---->必须赋值
3.默认值
    def func(name,age=18):
        pass
    func('tom') ----> tom 18
    func('tom',age = 20) ---->关键字赋值
        
'''