• Python学习之旅(十一)


    Python基础知识(10):函数(Ⅱ)

    一、全局变量和局部变量

    局部变量:在函数内定义的变量,在函数内使用

    全局变量:在函数外定义的变量,在程序任何地方都可以使用

    1、全局变量与局部变量同名

    这时函数内部只调用局部变量,如果要调用全局变量需要在函数内加一句“global 同名变量”

    x=1
    #x:全局变量
    def test():
        global x
        x=5
        #x:局部变量
        print(x)
        return x
    
    test()

    结果:1

    2、一个函数中的内层函数调用外层函数中的变量

    内层函数调用外层函数中的变量要在内层函数中加一句“nonlocal 变量”

    def demo1():
        num=2
        def demo2():
            nonlocal num
            num+=1
            
        return demo2()
    demo1()
    
    demo1()

    结果:3

    3、全局变量一般不可修改,如果函数中想要修改全局变量要加上“global 变量”语句

    如果B函数要调用A函数中的c变量,需要在A函数内部加一句“global c”

    x=1
    def test1():
        global x
        global y
        y=2
        x=x+y
        print(x)
        return x
    def test2():
        print(y)
        print(x)
        
    test1()
    test2()

    结果:

    3
    2

    二、函数递归

    1、一个函数自己调用自己

    2、有明确的结束条件:加if判断

    3、无穷递归:运行后它会永远运行下去,进而导致程序崩溃

    4、理论上所有递归函数都可以写成循环的方式

    计算阶乘

    #用循环语句
    def fact1(num):
        result=num
        for i in range(1,num):
            result *=i
        return result
    
    print(fact1(3))
    
    #用递归函数
    def fact2(n):
        if n==1:
            return 1
        else:
            return n*fact2(n-1)
    
    print(fact2(3))

    结果:6

    5、使用递归函数时要防止栈溢出,解决栈溢出的方法是通过尾递归优化

    6、匿名函数

    用lambda定义,只能有一个表达式,没有函数名

    lambda x:x+1等价于def test(x):x+=1 retrun x

    (1)可以把匿名函数赋值给一个变量,用该变量调用匿名函数

    y=lambda x:x+2
    y(1)
    结果:3

    (2)可以把匿名函数作为返回值返回

  • 相关阅读:
    循环逗号分割数组!
    只是想好好学习一下!
    html元素水平垂直居中
    闭包知识点--笔记
    20160314
    从零开始做运维-零
    Nginx 和 CodeIgniter
    安装PIL库
    init
    NutUI3 多端实践之路
  • 原文地址:https://www.cnblogs.com/finsomway/p/10001265.html
Copyright © 2020-2023  润新知