• 第一章 1.10 函数进阶


    一.函数返回值

    • 1.返回值的作用:将函数里面的数据传到函数外(在函数里的打印只能看不能操作)
    • 2.怎么确定需不需要返回值:看函数的功能完成后会不会产生新的数据
    • 3.怎么确定函数的返回值:函数声明的时候return后面的值就是函数的返回值;如果没有return,函数的返回值就是None

    return是关键字;只能出现在函数体中
     作用:①.确定函数的返回值
       ②.结束函数(执行函数体的时候若遇到return函数直接结束,同时将return后面的值作为函数的额返回值)

    • 4.怎么获取函数的返回值:函数调用表达式就是函数的返回值
      函数调用表达式:函数调用语句(普通数据能做的事,它都能做)


    二.函数的调用

    1.函数调用过程:

    ①.回到函数声明的位置
    ②.传参 - 保证每个参数都有值
    ③.执行函数体
    ④.执行完函数体确认返回值:若遇到return,return后面的值就是返回值;若没有遇到,返回值就是None
    ⑤.回到函数调用的位置(函数表达式的值就是返回值)

    2.内存的变化:

    函数的调用过程事一个压栈的过程(系统会自动在栈区间开辟一个专用的内存区域,专门用来保存在函数内声明的变量和产生的数据(形参也是函数内的)) 当函数调用结束的时候,这个内存区域会自动销毁(销毁前会将返回值送出)


    三.变量的作用域

    1).全局变量

    没有生命在函数中或者类中的变量都是全局变量
    作用域:全局变量从声明开始到文件结束任何地方都可以用

    2).局部变量

    在函数内声明的变量就是局部变量;
    作用域:从声明开始到函数结束可以使用(形参是声明在函数中的局部变量)

    #a是全局变量
    a = 10
    # 循环内声明的变量也是全局变量(b和c)
    for b in range(5):
        c = 100
        pass
    # 在循环内部可以用
    for x in range(3):
        print(a)
    
    # 在函数中可以用
    def func1():
        print('函数中:', a)
    

    1.global
    若要在函数内改变全局变量的值,要先用global进行说明在函数中若要声明一个全局变量,也要在变量前加global
    语法:global 变量名
    2.nonlocal
    使用方法:在函数中给变量赋值前加:nonlocal 变量名
    作用:在局部的局部中修改局部变量的值


    四.匿名函数

    匿名函数还是函数,除了声明的语法和类型说明以外,其他语法基本都适用匿名函数

    1).声明匿名函数

    变量(函数名) = lambda 参数列表:返回值
     def (参数列表):
     return 返回值

    2).说明:

    lambda - 关键字,固定写法
    参数列表 - 形参:参数名1,参数名2,...
    :(冒号) - 固定写法
    返回值 - 相当于普通函数中函数体中的return语句

    # 用匿名函数求两个数的和
    func1 = lambda num1, num2: num1 + num2
    # 练习:写一个函数判断指定的年是否是闰年
    diy_year = lambda year: year % 400 == 0 or (year % 4 == 0 and year % 100 != 0)
    print(diy_year(2008))
    


    五.递归函数

    1.什么是递归函数

    声明函数的时候调用函数本身
    递归可以实现循环效果,除了死循环,其他的循环递归都可以实现

    2.递归怎么用

    使用递归的方法:
    1).设置临界值 - 循环结束的条件(保证函数结束)
    2).找关系 - 找f(n)和f(n-1)的关系(上一次循环和下一次循环的关系)
    3).假设函数的功能已经实现,通过f(n-1)去实现f(n)的功能

    # 写一个递归函数,计算1+2+3+...+n
    def diy_sum(n):
      if n == 1:
        return 1
    return diy_sum(n-1) + n
    
    print(diy_sum(10))
    
    # 写一个递归函数,计算斐波那契额数列的第n个数
    def diy_series(n):
      if n == 1 or n == 2:
        return 1
      return diy_series(n-1) + diy_series(n-2)
    
    print(diy_series(5))
    
    # 练习:
    '''
    n = 4
    *
    **
    ***
    ****
    
    n = 3
    *
    **
    ***
    '''
    def diy_p(n):
      if n == 1:
        print('*')
        return
      diy_p(n-1)
      print(n * '*')
    
  • 相关阅读:
    网站的域名带www的和不带www的有什么区别呀
    网站域名加WWW与不加WWW区别
    QQ第三方登录报错error=-1
    Centos7 Apache配置虚拟主机的三种方式
    HTTP和HTTPS有什么区别? 什么是SSL证书?使用ssl证书优势?
    微博第三方登录时,域名使用错误报错, Laravel Socialite Two InvalidStateException No message
    Laravel5.1 实现第三方登录认证教程之
    php第三方登录(微博登录,仿照慕课网)
    php实现第三方登录
    laravel5.4 前后台未登陆,跳转到各自的页面
  • 原文地址:https://www.cnblogs.com/anjhon/p/11892339.html
Copyright © 2020-2023  润新知