zoukankan      html  css  js  c++  java
  • day10:函数的实参&形参

    函数的参数 (参数:配合函数运算的值)
    参数:
          (1)形参:形式参数,在函数的定义处
          (2)实参:实际参数,在函数的调用处

    形参: 普通形参(位置) , 默认形参 , 普通收集形参 , 命名关键字形参 , 关键字收集形参
    实参: 普通实参,关键字实参

    遵循原则:
    形参和实参要一一对应

    1.普通形参

    # 1.普通形参
    # 函数的定义处
    """hang,lie是函数的普通形参"""
    def s_star(hang,lie):
        i = 0
        while i < hang:
            j = 0
            while j < lie:
                print("*",end="")
                j+=1
            print()
            i+=1
            
    # 函数的调用处
    """10,10 是函数的实际参数"""
    s_star(10,10)
    s_star(3,8)

    2.默认形参

    # 2.默认形参
    def s_star(hang=10,lie=10):
        i = 0
        while i < hang:
            j = 0
            while j < lie:
                print("*",end="")
                j+=1
            print()
            i+=1
            
    # 函数的调用处
    """
    在函数调用时:
        如果给予实参,那么直接使用实际参数
        如果没有给予实参,那么使用参数默认自带的值 
    """
    s_star() # 10行10列小星星
    s_star(3,8) # 3行8列小星星
    s_star(4) # 4行10列小星星

    3.普通形参+默认形参 

    默认形参必须跟在普通形参的身后,顺序是一定的

    # 3.普通形参 + 默认形参
    # 函数的定义处
    """默认形参必须跟在普通形参的身后,顺序是一定的"""
    def s_star(hang,lie=10):
        i = 0
        while i < hang:
            j = 0
            while j < lie:
                print("*",end="")
                j+=1
            print()
            i+=1
            
    # 函数的调用处
    s_star(3,3) # 3行3列
    s_star(3) # 3行10列
    s_star() # error

    4.关键字实参

    关键字实参是对具体的某个参数赋值,具体的顺序可以打乱

    # 4.关键字实参
    """关键字实参是对具体的某个参数赋值,具体的顺序可以打乱"""
    # 函数的定义处
    def s_star(hang,a,b,c,d,lie=10):
        i = 0
        while i < hang:
            j = 0
            while j < lie:
                print("*",end="")
                j+=1
            print()
            
            i+=1
    
    # 函数的调用处
    s_star(hang=4,a=1,b=2,c=3,d=4,lie=5)
    s_star(c=3,d=4,lie=5,hang=4,a=1,b=2) # 关键字实参参数顺序可以打乱

    5.普通实参+关键字实参

    关键字实参必须跟在普通实参的身后,顺序是一定的

    # 5.普通实参 + 关键字实参
    def s_star(hang,a,b,c,d,lie=10):
        i = 0
        while i < hang:
            j = 0
            while j < lie:
                print("*",end="")
                j+=1
            print()
            
            i+=1
    
    # 函数的调用处
    """关键字实参必须跟在普通实参的身后,顺序是一定的"""    
    s_star(5,6,99,c=7,d=8,lie=9)
    s_star(c=7,d=8,lie=9,5,6,99) # error 关键字实参必须跟在普通实参的后面
    s_star(5,1,c=2,d=3,lie=10,b=5) # ok
    s_star(5,1,c=2,d=3,lie=10,a=5) # error 重复给a赋值,错误

    6.要注意区分默认形参和关键字实参

    默认参数和关键字实参 在写法上一模一样
    默认形参是在函数的定义处
    关键字实参是在函数的调用处

    7.普通收集参数 *args

    """
    1.普通收集参数:    专门用来收集多余的没人要的普通实参
        def func(*args):
            code...
        *args => arguments(参数)
        在args这个参数的前面加上一个*表达普通收集参数,形成一个元组
    """
    
    # 基本使用
    def func(a,b,c,*args):
        print(a,b,c) # 1 2 3
        print(args) # (4,5,6,7,8)
        
    func(1,2,3,4,5,6,7,8)
    
    # 计算任意个数的累加和
    def func(*args):
        total = 0
        for i in args:
            total += i
        print(total)
        
    func(1,2,3,4,6,10,11,100)

    8.关键字收集参数 **kwargs

    """
    2.关键字收集参数 : 专门用来收集多余的没人要的关键字实参
        def func(**kwargs):
            code1...
        **kwargs => keyword arguments
        在kwargs参数的前面加上2个**表达关键字收集参数,形成一个字典
    """
    
    # 基本使用
    def func(a=1,b=2,c=3,**kwargs):
        print(a,b,c)
        print(kwargs) # {'f': 1, 'g': 2, 'j': 3}
    
    func(f=1,g=2,j=3,a=15,b=16,c=17)
    
    # 任意个数字符串的拼接
    """
    班长:宋云杰
    班花:刘彩霞
    班草:刘子涛
    吃瓜群众:牧树人,晏国彰,刘聪
    """
    
    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(","))
        
    
    
    func(monitor="宋云杰",class_flower="刘彩霞",class_grass="刘子涛",eatgua1="牧树人",eatgua2="晏国彰",eatgua3="刘聪")

    9.命名关键字参数

    # 3.命名关键字参数
    """
    定义命名关键字参数的两种方式:
        (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)

    10.关于* 和 ** 的使用方法

    * 和 ** 在函数的定义处,用来做收集操作,打包
    * 和 ** 在函数的调用处,用来做打散操作,解包

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

    11.形参定义的顺序

    当所有参数都在一起的时候,按照什么顺序定义呢?
    参数定义的顺序:普通参数 -> 默认参数 -> 普通收集参数 -> 命名关键字参数 -> 关键字收集参数
    收集到所有的实参: def func(*args,**kwargs)

    12.关于所有参数混合的练习题

    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) # a=1,b=2,c=0,args=(),kw={}
    f1(1, 2, c=3) # a=1,b=2,c=3,args=(),kw={}
    f1(1, 2, 3, 'a', 'b') # a=1,b=2,c=3,args=(a,b),kw={}
    f1(1, 2, 3, 'a', 'b', x=99) # a=1,b=2,c=3,args=(a,b),kw={x:99}
    f2(1, 2, d=99, ext=None) # a=1,b=2,c=0,d=99,{ext:None}
    
    # 第二题
    args = (1, 2, 3, 4)
    kw = {'d': 99, 'x': '#'}
    f1(*args, **kw) # a=1,b=2,c=3,args=(4,),kw={d:99,x:#}
    
    # 第三题
    myargs = (1, 2, 3)
    mykw = {'d': 88, 'x': '#'}
    f2(*myargs, **mykw) #a=1,b=2,c=3,d=88,kw={x:#}
    
    # 第四题
    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) #a=1,b=2,c=3,args=(a,b),kw={x:99,y:77}  d:67
  • 相关阅读:
    【python接口自动化】httpUtils
    mac上安装chromedriver
    python自动化测试报告(excel篇)
    Fiddler 手机抓包介绍
    Fiddler 简单介绍
    Python splinter 环境搭建
    Python pip 常用命令
    Python Yaml 学习
    Jmeter
    Python3 操作Excel
  • 原文地址:https://www.cnblogs.com/libolun/p/13335728.html
Copyright © 2011-2022 走看看