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

    目录:

    一、形参与实参

    二、形参与实参的具体使用

    • 2.1位置参数
    • 2.2关键字参数
    • 2.3默认参数
    • 2.4可变长度的参数(*与**的用法)
    • 2.5命名关键字参数

    一、形参与实参

    #形参:在定义函数时,括号内声明的参数。 形参--->变量名:接收外部传来的值
    #实参:调用函数时,括号内传入的值(可以是常量、变量、表达式或三者的组合)
    
    res = my_max(1,2)  --> 2
    
    m = 18
    n = 19
    res=my_max(18,19) --> 19
    
    m=17
    res=my_max(2,m,2*my_max(1,4))  -->17

    注意:在调用有参函数时,实参(值)会赋值给形参(变量名)。在Python中,变量名与值只是单纯的绑定关系,而对于函数来说,这种绑定关系只在函数调用时生效,在调用结束后解除。

    二、形参与实参的具体使用

    2.1位置参数

    # 在定义函数时,按照从左到右的顺序依次定义形参,称为位置形参,凡是按照这种形式定义的形参都必须被传值
    
    #在调用函数时,按照从左到右的顺序依次定义实参,称为位置实参,凡是按照这种形式定义的实参会按照从左到右的顺序与形参一一对应
    def register(name,age,sex): #定义位置形参:name,age,sex,三者都必须被传值
        print('Name:%s Age:%s Sex:%s' %(name,age,sex))
    
    register('lxx',18,'male')

    2.2关键字参数

    在调用函数时,实参可以是key=value的形式,称为关键字参数,凡是按照这种形式定义的实参,可以完全不按照从左到右的顺序定义,但仍能为指定的形参赋值

    >>> register(sex='male',name='alex',age=78)
    Name:alex Age:78 Sex:male

    注意:在调用函数时,实参也可以是按位置或按关键字的混合使用,但必须保证关键字参数在位置参数后面,且不可以对一个形参重复赋值

    2.3 默认参数

    在定义函数时,就已经为形参赋值,这类形参称之为默认参数,当函数有多个参数时,需要将值经常改变的参数定义成位置参数,而将值改变较少的参数定义成默认参数。例如编写一个注册学生信息的函数,如果大多数学生的性别都为男,那完全可以将形参sex定义成默认参数

    注意:
    #1、默认参数必须在位置参数之后
    #2、默认参数的值仅在函数定义阶段被赋值一次
    #3、默认参数的值通常应设为不可变类型

    2.4可变长度的参数

    (1)可变长度的位置参数

    如果在最后一个形参名前加号,那么在调用函数时,溢出的位置实参,都会被接收,以元组的形式保存下来赋值给该形参

    # 溢出的位置实参会被*保存成元组的格式然后赋值给紧跟其后的形参
    def func(x,y,*args): # *args只是格式规范,可以是*z或其他但不推荐
        print(x,y,*args)
    func(1,2,3,4,5)
    
    # *可以用在实参中,实参中带*,先将*后的值打散成位置实参然后再传值
    def func(x,y,z):
        print(x,y,z)
    func(*[1,2,3]) # func(1, 2, 3)
    func(*[1,2]) # func(1, 2)
    
    # 形参与实参中都带*
    def func(x,y,*args):
        print(x,y,args)
    func(1,2,[3,4,5])
    func(1,2,*[3,4,5])

    (2)可变长度的关键字参数

    # **参数名:用来接收溢出的关键字实参,
    # 溢出的关键字实参会被**保存成字典的格式然后赋值给紧跟其后的形参
    def func(x,y,**kwargs): # **kwargs只是格式规范,可以是**z或其他但不推荐
        print(x,y,kwargs)
    func(1,2,mode=3)
    
    # **可以用在实参中(**后跟的只能是字典),实参中带**,先将**后的值打散成关键字实参然后再传值
    def func(x,y,z):
        print(x,y,z)
    func(*[1,2,3]) # func(1, 2, 3)
    func(*[1,2]) # func(1, 2)
    
    # 形参与实参中都带**
    def func(x,y,**kwargs):
        print(x,y,kwargs)
    
    func(y=222,x=111,a=333,b=444)
    func(**{'y':222,'x':111,'a':333,'b':4444})

    重点掌握:

    ***重点
    # 原格式---》汇总-----》打回原形
    
    def index(x,y,z):
        print('index=>>> ',x,y,z)
    
    def wrapper(*args,**kwargs): #args=(1,) kwargs={'z':3,'y':2}
        index(*args,**kwargs)
        index(*(1,),**{'z':3,'y':2})
        index(1,z=3,y=2)
    
    wrapper(1,z=3,y=2) # 为wrapper传递的参数是给index用的
    
    输出:
    index=>>>  1 2 3
    index=>>>  1 2 3
    index=>>>  1 2 3

    小节:

    形参:def func(位置形参,默认形参,*args,**kwargs):
    
    实参:func(位置实参,关键字实参)
  • 相关阅读:
    《手把手教你》系列技巧篇(三十二)-java+ selenium自动化测试-select 下拉框(详解教程)
    《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)
    《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)
    《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)
    ApplicationContext在非Service类中调用Spring的Serivce类
    java多字段排序
    PropertyDescriptor动态setter和getter设置对象属性
    presto timestmp使用
    【效能提升】我们排查一个bug的过程是怎么样的?
    【效能提升】上线前漏了SQL脚本,漏加上某个配置项了?
  • 原文地址:https://www.cnblogs.com/surpass123/p/12519567.html
Copyright © 2011-2022 走看看