zoukankan      html  css  js  c++  java
  • Python函数

    Python-11

    @(Python)

    一、函数的返回值

    1. 什么是返回值

    • 返回值,是函数处理后的结果

    2. 为什么要有返回值

    • 如果需要在程序中拿到函数的处理结果,然后对这个结果进一步处理,就需要函数必须有返回值

    3. 返回值的应用

    • 函数的返回值由return定义:return 值
    • return是一个函数结束的标志,函数内可以有多个return,但是只要执行一次return,整个函数就会结束运行
    • return后面的返回值可以是任何数据类型
    • return后面的返回值没有个数限制,如果有多个,可以使用逗号分隔开多个值
    • return +0个值:返回None,如果函数中不写return,默认会在函数的最后一行添加return,返回None
    • return +1个值:返回的值就是该值本身
    • return +多个值:返回的值以元组形式呈现

    Alt text

    二、函数调用的三种形式

    def func(x,y):
        if x > y:
            return x
        else:
            return y
    
    func(1,2)   # 直接传值
    res=func(3000,2000) * 12   # 调用函数的结果
    res=func(func(1000,2000),3000)   # 把函数的结果(调用)当作参数
    

    三、函数参数的分类

    1. 函数定义阶段的参数

    ① 形参

    • 在函数定义阶段,括号内定义的参数,称之为形式参数,简称形参,本质是变量名

    ② 位置形参

    • 在函数定义阶段,按照从左到右的顺序依次定义的形参,称为位置形参
    • 特点:但凡是按照位置定义的形参,都必须被传值,并且不能多不能少,否则会报错

    ③ 默认参数(默认形参)

    • 在函数定义阶段,就已经为形参赋值,也称为默认形参
    • 特点:在定义阶段就已经被赋值,意味着在调用阶段可以不用为其传值(如果传值,会以传的值为准)
    • def func(x,y=10)中的y=10就是默认参数

    注意:

    • 位置形参必须放在默认形参的前面
    • 默认形参的值在定义阶段已经赋值,即默认参数的值在函数定义阶段就已经固定(除非调用时专门传值)
    • 默认参数的值通常应该定义为不可变类型,避免耦合(解耦思想,单独使用不影响其他)
    • 有一部分,或大多数都一样,可以定义为默认形参,个别不同的再传值

    Alt text

    2. 函数调用阶段的参数

    ① 实参

    • 在函数调用阶段,括号内传入的值,称为实际参数,简称实参,本质就是变量的值

    ② 位置实参

    • 在函数调用阶段,按照从左往右的顺序依次定义的实参,称为位置实参
    • 特点:按照对应的位置,给形参依次传值,严格受限于位置;实参就是给形参传值的

    Alt text

    ③ 关键字实参

    • 在调用函数时,按照key=value的形式为指定的参数传值,称为关键字实参
    • 特点:不受位置的限制,仍然可以给指定的形参传值

    Alt text

    • 位置实参和关键字实参可以混用

    Alt text

    • 但是位置实参必须在关键实参的前面,否则会报错

    Alt text

    • 并且关键字实参不能对一个形参重复赋值

    Alt text

    3. 总结:

    ① 实参的应用场景:

    • 根据需求,可以位置实参传值,也可以使用关键字传值

    ② 形参的应用场景:

    • 当大多数情况不一样时,可以考虑将该参数定义成位置形参
    • 当大多数情况一样时,可以考虑将该参数定义成默认形参(即定义函数时就规定一个大多数都用的值)

    4. 可变长参数

    • 指的是在调用函数时,传入的参数个数可以不固定
    • 长度指的是参数的个数
    • 调用函数时,传值的方式有位置实参和关键字实参,对应形参也需要有两种解决方案,分别来接收溢出的位置实参*和关键字实参**

    ① 形参中*的使用

    • 在函数定义阶段,形参中的*会将溢出的位置实参全部接收,存成元组的形式,然后把元组赋值给*后面的变量名z
    • 格式:def 函数名(x,y,*z):
    • 约定俗成,形参中的*变量名的写法统一为:*args
    • 一般应用于实参不固定的场景

    Alt text

    • 比如:求出多个数的和,数字个数不固定,就可以用到

    Alt text

    ② 形参中**的使用

    • 在函数的定义阶段,形参中的**会将溢出的关键字实参全部接收,以字典的形式存储,并赋值给**后面的变量名
    • 约定俗成,形参中的**变量名的写法统一为:**kwargs

    Alt text

    ③ 实参中*的使用

    • 在函数调用阶段,*会将后面的值,进行for循环取出,形成位置实参(一个个值),因此,*后可以放能被for循环取出的数据类型
    • 格式:函数名(实参,*实参)
    • 但凡遇到实参中带*的,那么它就是位置实参,应该立马打散成位置实参看

    Alt text

    Alt text

    ④ 实参中**的使用

    • 实参中使用**,这个参数必须为字典
    • 实参中的参数前面带****会将这个参数的值循环取出,拆成关键字实参
    • 但凡遇到实参中参数前面带**的,它就是关键字实参,应该将其拆分成关键字实参看

    Alt text

    ⑤ 实参中***的使用

    Alt text

    ⑥ 形参中和实参中*的综合使用

    • 应用场景:*应对溢出

    Alt text

    ⑦ 形参中和实参中***的综合使用

    • 如果想将函数的实参,原封不动的传给内部的函数,就需要使用*args**kwargs
    • 这种原封不动的传值,要遵循index的规则传值方式才可以
    def index(name,age,sex):
        print('Welcome %s:%s:%s to index page' %(name,age,sex))
    
    def wrapper(*args,**kwargs):
        index(*args,**kwargs)   # *(1,2,3) **{'a':4,'b':5,'c':6} 实参都会将这些打散
                                # index(1,2,3,a=4,b=5,c=6) 原封不动的将实参翻译过来,
                                # 因此,wrapper的实参实际是传给index的
    wrapper(name='xut',age=18,sex='male')
    

    Alt text

    5. 命名关键字形参(了解)

    • 目的是让用户必须用关键字实参传值
    • 在函数定义阶段,*后面的参数都是命名关键字参数
    • 格式:定义函数时,def func(x,y,*args,后为命名关键字参数),注意,*args还是接收溢出的位置实参
    • 特点:在传值时,必须按照key=value的形式传,并且key必须命名关键字参数指定的参数名

    Alt text

    • 最全参数使用,但是没有这种应用场景,z=1表示命名关键字默认参数,而不是默认参数

    Alt text

  • 相关阅读:
    android中获取某段程序的执行时间
    图像位宽对齐
    使用 ssh 连接github的方法说明(gitub的官方说法)
    转:程序员必须知道的几个Git代码托管平台
    转:webRTC的前世今生
    Eclipse c++头文件问题(未完)
    [原创] NetBean开发c++程序指南1- 加入c++项目文件夹
    xshell5 启动显示 mfc110.dll msvcp110.dll 未找到问题 解决办法
    vmware12安装vmtools
    转: EclipseIDE开发 for C++
  • 原文地址:https://www.cnblogs.com/itone/p/9443637.html
Copyright © 2011-2022 走看看