• python中函数学习笔记


    # 函数的传参
    def func1(name, age, *args, **kwargs):
        # print(kwargs['skills'])
        tall, weight, sex = args
        skills = kwargs['skills']
        print('我叫做{},我今年{}岁,身高:{},体重:{},性别:{},我学过{}等等'.format(name, age, tall, weight, sex, ','.join(skills)))
    
    
    func1('Brigham', 31, 171, 60, '男', skills=['java', 'js', 'python', 'AE'])
    
    求随机数的函数
    
    import random
    
    
     def generate_random():
         for i in range(10):
             ran = random.randint(1, 20)
             print(ran, end=' ')
    
    
     generate_random()
    
     str1 = 'abc'
     str2 = str1
     str1 = str1.replace('b','')
     print(str1)
    
     函数:
     增加代码复用性,减少代码冗余
    
     定义函数:
     def 函数名([形参,...]):
           函数体
    
     例:
     定义:
     def add(实参):
           result = 1+3
           print(result)
    
     调用:
     add() ---->4
    
    
     * 固定参数个数:
     定义:
    def add(a, b):
        pass
    
    
    # 调用
    add(1, 3)
    
    
    # 可变参数
    # 定义方式
    # 形式一
    def add(*args):
        print(args)
    
    
    add()  # ---->空元祖
    add(1, 2)  # ----> (1,2)
    add(1, 2, 3, 4)  # ----> (1,2,3,4)
    
    
    # 混合形式一
    # 可变参数必须在固定参数的后面
    # 错误:
    def add(*args, name):
        print(args, name)  # 报错
    
    
    # 正确:
    def add(name, age, *args):
        print(args, name, age)
    
    
    # 混合形式二:可变参数+关键字参数(key=value)
    def add(a, b=10):  # 关键字参数
        result = a + b
        print(result)
    
    
    add(5)  # ---->15
    add(4, 7)  # ---->11
    
    
    def add(a, b=10, c=4):
        result = a + b + c
        print(result)
    
    
    add(2, c=6)  # ---->18
    
    
    # 拆包与装包:调用的时候两个*的装用是拆包,定义的时候两个*的作用是装包
    # def aa(**kwargs):
    #     print(kwargs)
    #
    #
    # dict1 = {'a': 1, 'b': 'hello', 'c': 'tom'}
    #
    # aa(**dict1)  # a=1,b='hello',c='tom' 两个*的作用在这里是拆包
    
    
    # def bb(a, b, *c, **d):
    #     print(a, b, c, d)
    #
    #
    # bb(1, 2)  # ----> 1 2 () {}
    # bb(1, 2, 3, 4)  # ----> 1 2 (3, 4) {}
    # bb(1, 2, x=100, y=200)  # ----> 1 2 () {'x':100,'y':200}
    # bb(1, 2, 3, x=100)  # ----> 1 2 (3,) {'x':100}
    
    
    # bb(1, 2, x=100, 5, 6)  # ---->报错 ()
    
    # def func(a, *args):
    #     print(a, args)
    #
    #
    # func(2, 3, 4, 5)  # ----> 2 (3,4,5)
    # func(2, [1, 2, 3, 4])  # ----> 2 ([1,2,3,4],)
    # func(2, 3, [1, 2, 3, 4, 5])  # ----> 2 (3,[1,2,3,4,5])
    # func(5, 6, (4, 5, 7), 9)  # ----> 5 (6,(4,5,7),9)
    
    
    # def func(a, b=10, c=3, **kwargs):
    #     print(a, b, c, kwargs)
    #
    #
    # func(1)  # ----> 1 10 3 {}
    # func(2, b=10)  # ----> 2 10 3 {}
    # func(3, 5, 7, a=1, b=2)  # ----> 报错  不能重复给b传参
    
    
    def func(a, *args, **kwargs):
        print(a, args, kwargs)
    
    
    def func2(a, b, *args, **kwargs):
        print(a, b, args, kwargs)
    
    
    t = (1, 2, 3, 4)
    func(1, t)  # ---->1 ((1,2,3,4),) {}
    func2(1, t)  # ----> 1 (1,2,3,4) () {}
    
    list1 = [2, 5, 8]
    
    # func(1, list1, a=9, b=6)  # ----> 报错 不能重复给a传参
    
    func(1, list1, x=9, y=6)  # ----> 1 ([2,5,8],) {'x':9,'y':6}
    func2(1, list1, x=9, y=6)  # ----> 1 [2,5,8] () {'x':9,'y':6}
    
    dict1 = {'1': 'a', '2': 'b', '3': 'c'}
    
    
    # 列表类型的参数用一个 * 拆包,字典类型的参数用两个 * 拆包
    
    # 案例一
    # list1 通过一个*拆包变成 2,5,8这种形式的参数,dict1通过两个*拆包成 '1'='a','2'='b','3'='c'这种形式的参数
    # func(1, *list1, **dict1)  # ----> 1 (2, 5, 8) {'1': 'a', '2': 'b', '3': 'c'}
    #
    #
    # func(1, 2, 3, 4, 5, dict1)  # 1 (2,3,4,5,{'1': 'a', '2': 'b', '3': 'c'}) {}
    # func(1, 2, 3, 4, 5, **dict1)  # 1 (2,3,4,5) {'1': 'a', '2': 'b', '3': 'c'}
    # 案例二
    def func1(name, *args):
        if len(args) > 0:
            for i in args:
                print('{}学过了{}'.format(name, i))
        else:
            print('没有学过任何编程知识!')
    
    
    course = ['html', 'mysql', 'python']
    
    # 调用函数
    func1('lucy', course)  # ----> lucy学过了['html', 'mysql', 'python']
    # func1('lucy', *course) #拆包
    # 结果:
    # lucy学过了html
    # lucy学过了mysql
    # lucy学过了python
    
    
    总结:
    无参数函数:
        1.普通函数  
    
        def func(name,age):
            pass
        func('aa',18) ---->形参和实参的个数要一致
    
        2.可变参数
        A.def func(*args):
            pass
        func() ----> 函数调用时,参数的个数可以没有,也可以多个   *不能是关键字参数
    
        B.def func(**kwargs):
            pass
        func('a'=1,'b'=2) ---->函数调用时,实参的个数可以没有,也可以多个   **必须是关键字参数
    
        C.def func(*args,**kwargs):
            pass
    
        list1=[1,3]
        dict1=['1':'a','2':'b']
        func(*list1,**dict1)  # func(1,3,'1'='a','2'='b')
    
        D. 混用
    
        def func(name,*args,**kwargs):
            pass
    
        func('tom') ---->必须赋值
    
        3.默认值+关键字
    
        def func(name,age=18):
            pass
    
        func('tom') ----> tom 18
        func('tom',age=18) ----> 关键字赋值
    
    
    # return 返回值
    # 1. return 后面可以是一个参数,在调用的时候可以用一个变量来接收
    # 2. return 后面页可以是多个参数,如果是多个参数则底层会将多个参数放在一个元组中,将元组作为一个整体返回
    # 3. 接收的时候也可以是多个:return 'hello','world' x,y = ('hello','world') ----> x='hello'   y='world'
    ------学习贵在分享,贵在记录,贵在总结。
  • 相关阅读:
    [LINUX-05]Linux的进程线程及调度
    如何感性地理解EM算法?
    [LINUX-04]linux进程、调度、线程、进程上下文等几点理解
    centos定时删除log文件
    关于 Nginx 配置的一些疑惑, Nginx 根据cookie 进行rewrite
    oracle中如何创建表的自增ID(通过序列)
    Windows下PHP7/5.6以上版本 如何连接Oracle 12c,并使用PDO
    Tomcat不能访问ln -s软连接文件夹的前因后果
    rm命令删除文件时排除特定文件
    nginx中的url转发
  • 原文地址:https://www.cnblogs.com/kevin1220/p/14357724.html
Copyright © 2020-2023  润新知