zoukankan      html  css  js  c++  java
  • 函数(局部变量与全局变量,函数即变量理论,递归函数)

    一.局部变量和全局变量
    函数内部:局部变量优先全局变量
    局部变量仅限于函数内部使用
    通常:全局变量变量名大写
    局部变量变量名小写
    1.global关键字 在函数内部只能读全局变量,利用global进行修改
    name='fjy'
    def change_name():
    global name
    name='bcs'

    print(name)
    ##打印结果 fjy
    错误用法:global在变量名后面
    name = ["雪花","寒冰"]
    def snow():
    name = "雾霾"
    global name
    print('冬天有', name)

    snow() #直接报错

    2.函数内部优先读取局部变量
    name = ["雪","寒冰"]
    def snow():
    global name
    name = "雾霾"
    print("冬天下",name)
    name='温暖'
    print('冬天有', name)

    snow()
    打印结果:
    冬天下 雾霾
    冬天有 温暖

    3.对于可变类型,利用global可以对内部元素进行操作
    name = ["雪","寒冰"]
    def snow():
    global name
    name[0] = "雾霾"
    print("冬天下",name)
    name='温暖'
    print('冬天有', name)

    snow()

    打印结果:
    冬天下 ['雾霾', '寒冰']
    冬天有 温暖

    4.关于多重嵌套函数
    (1)对于里层函数有global时,优先取值全部变量
    在这里global有种如同指针指向内存的方式
    name = "艾欧尼亚"
    def w():
    name = "永不"
    def ww():
    global name
    name ='放弃'

    print(name)
    ww()
    w()
    打印结果:
    放弃
    (2)对于多层函数没有global函数没有定义变量就往上层找
    name = "艾欧尼亚"
    def w():
    name = "永不"
    def ww():

    print(name)
    ww()
    w()
    打印结果:
    永不

    5.nonlocal关键字,指定上一级变量可修改,如果没有就继续往上直到找到为止(但不能到全局变量否则报错)
    上层有变量:
    name = "艾欧尼亚"
    def w():
    name = "永不"
    def ww():
    nonlocal name
    name='战无不胜'
    print(name)
    ww()
    w()
    打印结果:
    战无不胜

    上层无变量:
    name = "艾欧尼亚"
    def p():
    name='牛逼'
    def w():

    def ww():
    nonlocal name
    # name='战无不胜'
    print(name)
    ww()
    w()
    p()
    打印结果:
    牛逼

    二.函数即变量理论
    函数在未调用时,执行到函数,函数名如同变量名,函数体如同字符串封存在内存中。
    调用时在执行。
    例如:
    正常运行
    def qi():
    print('祁磊大坏蛋')
    li()
    def li():
    print('历经风是条子')
    qi()
    运行错误(第二个函数未定义,如同这个变量没有定义)
    def qi():
    print('祁磊大坏蛋')
    li()
    qi()
    def li():
    print('历经风是条子')
    三.浅谈递归函数
    真正领悟递归的精髓、灵活地运用递归思想来解决问题必须经过长期使用,是一个漫长的过程。
    递归特性:

    1.必须有一个明确的结束条件
    2.每次进入更深一层递归,规模比上一层递归减少
    3.递归效率不高,循环越多会导致栈溢出
    ****递归中每一次return都是返还给上一层递归函数,如果中途没有打印,最终只有一个结果
    1 def cla(n):
    2     print(n)
    3     if int(n/2) == 0:
    4         return n
    5     return cla(int(n/2))
    6 print(cla(8))
    ******
    8
    4
    2
    1
    1
    ******
    cla(8)本身等于1, 8 4 2 1是在执行cla()函数过程中打印出来的
    原理图
    全面发展
  • 相关阅读:
    nginx 限流配置
    redis-sentinel 高可用方案实践
    redis之 主从复制和哨兵
    MySQL架构与业务总结图
    MGR实现分析
    通过 SCQA 的框架来讲故事
    MECE分析法
    如何提高问题的认知高度
    Mac 应用程序不能打开解决方法
    vscode打开文件在同一个tab的问题
  • 原文地址:https://www.cnblogs.com/snowony/p/11773828.html
Copyright © 2011-2022 走看看