zoukankan      html  css  js  c++  java
  • 函数的参数

    函数的基本属性

    1.1 函数的含义

    # 1、功能 :包裹代码,实现功能,达到目的
    # 2、特点 :反复调用,提高开发效率,便于代码维护

    1.1.2 函数的基本格式

    # 函数名 :变量命名规则
    # 函数的定义
    def func():
        pass
    # 函数的调用
    func()

    1.2 函数的参数

    1.2.1形式参数(函数定义处)

    # 形式参数的顺序
    # 位置参数 > 默认参数 > *args > 命名关键字参数 > **kwargs 

    1.2.1.1 位置参数

    def func(a,b):
        print(a,b)

    1.2.1.2 默认参数

    def func(a = 0,b = 9):
        print(a,b)

    1.2.1.3 位置参数 + 默认参数

    """
    默认形参必须跟在位置形参的身后,顺序是一定的
    """
    def func(a ,b ,c = 4 , d = 5):
        print(a,b,c,d)

    1.2.2 实际参数(函数调用处)

    1.2.2.1 位置传参

    """
    在函数调用时:实参数量及顺序需要与形参一一对应
    """
    def func(a,b):
        print(a,b)
    func(5,8)                      # 5 8
    func(8,5)                      # 8 5

    1.2.2.2 关键字传参

    """
    在函数调用时:
    如果给予实参,那么直接使用实际参数
    如果没有给予实参,那么使用参数默认自带的值 
    """
    def func(a = 0,b = 9):
        print(a,b)
    func(5,8)                      # 5 8
    func(8,5)                      # 8 5
    func(1)                        # 1 9

    1.2.2.3 位置传参 + 关键字传参

    """
    1、关键字传参是对具体的某个参数赋值,具体的顺序可以打乱
    2、关键字实参必须跟在位置实参的身后,顺序是一定的
    3、默认参数和关键字实参 在写法上一模一样
        一个是在函数的定义处
        一个是在函数的调用处
    """
    def func(a,b,c,d,name = "name",age = 18):
        print(a,b,c,d,name,age)
        
    func(1,2,3,4,age = 20 , name = "bajie")       # 1 2 3 4 bajie 20
    func(1,2,3,age = 20,4 , name = "bajie")       # error

    1.2.3 收集参数( *args , **kwargs)

    1.2.3.1 收集参数 (在函数的定义处 -----> 聚合)

    # *args 在函数的定义处专门用来收集多余的没人要的 位置实参
    def func(a,b,c,*args):
        print(a,b,c)             # 1 2 3
        print(args)              # (4, 5, 5, 6, 7, 8)
        
    func(1,2,3,4,5,5,6,7,8)
    ​
    # **kwarge 在函数的定义处专门用来收集多余的没人要的 关键字实参
    def func(a=1,b=2,c=3,**kwargs):
        print(a,b,c)             # 15 16 17
        print(kwargs)            # {'f': 1, 'g': 2, 'j': 3}
    ​
    func(f=1,g=2,j=3,a=15,b=16,c=17)

    1.2.3.2 收集参数 (在函数的调用处 -----> 打散)

    # * 把列表里面的所有元素拿出来,当成参数一个一个赋值给func进行调用
    def func(a,b,c = 5,d = 6):
        print(a,b)             # 1 2
        print(c,d)  
        
    lst = [1,2]
    func(*lst,c=3,d=4)
    # **把字典里面的所有元素拿出来,拼装成键=值的参数形式,赋值给func进行调用
    def func(a,b,c = 5,d = 6):
        print(a,b)
        print(c,d)              # 3 4 
        
    dic = {"c":3,"d":4}
    func(1,2,**dic,) 
    

      

    1.2.3.3 练习示例

    # 任意个数字符串的拼接
    """
    班长:宋云杰
    班花:刘彩霞
    班草:刘子涛
    吃瓜群众:牧树人,晏国彰,刘聪
    """
    def func(**kwargs):
        print(kwargs)
        # 定义一个字典,存放每一位同学的身份
        dic = {"monitor":"班长","class_flower":"班花","class_grass":"班草"}
        strvar1 = ""
        strvar2 = ""
        
        # 遍历字典中的键值对
        for k,v in kwargs.items():
            print(k,v) # monitor 宋云杰  class_flower 刘彩霞 class_grass 刘子涛 ....
            # 判断键是否在字典当中,如果在,获取对应的身份,拼装成字符串
            if k in dic:
                strvar1 += dic[k] + ":" + v + "
    " # 班长 + ":" + 宋云杰 + '
    '
            else:
                strvar2 += v + ","
        
        # 去掉右边多余的
    和,形成最后的效果
        print(strvar1.strip())
        print("吃瓜群众:"+ strvar2.rstrip(","))

    1.2.4 命名关键字参数

    """
    定义命名关键字参数的两种方式:(在函数调用时,必须使用命名关键字参数来进行赋值)
    (1)def func(a,b,*,c) c是命名关键字
    (2)def func(*args,c,**kwargs) c是命名关键字参数
    """
    # 定义方式一
    def func(a,b,*,d,c):
        print(a,b)                  # 1 2
        print(d)                    # 3
        print(c)                    # 10
        
    func(1,2,d = 3,c=10)
    ​
    # 定义方式二
    def func(*args,c,**kwargs):
        print(args)                  # (1, 2, 3, 4, 5, 6)
        print(c)                     # 100
        print(kwargs)                # {'a': 1, 'b': 2, 'd': 6}
        
    func(1,2,3,4,5,6,a=1,b=2,d=6,c=100)

    1.2.5 参数练习题

    # 读代码测结果
    def f1(a, b, c=0, *args, **kw):
        print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
    ​
    def f2(a, b, c=0, *, d, **kw):
        print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
    ​
    # 以上两个函数 打印结果
    #(一)
    f1(1, 2)
    f1(1, 2, c=3)
    f1(1, 2, 3, 'a', 'b')
    f1(1, 2, 3, 'a', 'b', x=99)
    f2(1, 2, d=99, ext=None)
    ​
    #(二)
    args = (1, 2, 3, 4)
    kw = {'d': 99, 'x': '#'}
    f1(*args, **kw)
    ​
    #(三)
    myargs = (1, 2, 3)
    mykw = {'d': 88, 'x': '#'}
    f2(*myargs, **mykw)
    ​
    #(四)
    def f1(a, b, c=0, *args,d,**kw):
        print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
        print(d)
    f1(1,2,3, 'a', 'b',d=67, x=99,y=77)
    

     

  • 相关阅读:
    [改善Java代码]在equals中使用getClass进行类型判断
    [改善Java代码]equals应该考虑null值的情景
    [改善Java代码]覆写equals方法时不要识别不出自己
    [改善Java代码] 推荐使用序列化实现对象的拷贝
    [改善Java代码]避免对象的浅拷贝
    [改善Java代码]让工具类不可实例化
    [改善Java代码]建议40:匿名类的构造函数很特殊
    [改善Java代码]使用匿名类的构造函数
    [改善Java代码]使用静态内部类提高封装性
    [改善Java代码]构造函数尽量简化
  • 原文地址:https://www.cnblogs.com/zhoulangshunxinyangfan/p/13325444.html
Copyright © 2011-2022 走看看