zoukankan      html  css  js  c++  java
  • 15.python变量,递归

     原文:https://www.cnblogs.com/linhaifeng/articles/6113086.html#_label6

    # 如果函数的内容有global关键字
    #   - 有声明局部变量
            # NAME = ["产品经理","廖波湿"]
            # def qupengfei():
            #     global NAME
            #     NAME = "自己"
            #     print('我要搞', NAME)
            # qupengfei()
    #   - 错误示例
            # NAME = ["产品经理","廖波湿"]
            # def qupengfei():
            #     NAME = "自己"
            #     global NAME
            #     print('我要搞', NAME)
            # qupengfei()
    #   - 无声明局部变量
            # NAME = ["产品经理","廖波湿"]
            # def qupengfei():
            #     global NAME
            #     NAME = ["阿毛"]
            #     NAME.append('XXOO')
            #     print('我要搞', NAME)
            # qupengfei()
    
    ######## 全局变量变量名大写
    ######## 局部变量变量名小写
    
    
    # 优先读取局部变量,能读取全局变量,无法对全局变量重新赋值 NAME=“fff”,
    #     但是对于可变类型,可以对内部元素进行操作
    # 如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值 NAME=“fff”

    函数之间可以进行嵌套

    NAME = '海风'
    
    def huangwei():
        name = "黄伟"
        print(name)
        def liuyang():
            name = "刘洋"
            print(name)
            def nulige():
                name = '沪指花'
                print(name)
            print(name)
            nulige()
        liuyang()
        print(name)
    
    huangwei()
    # 黄伟
    # 刘洋
    # 刘洋
    # 沪指花
    # 黄伟

    def weihou():
        name = "陈卓"
        def weiweihou():
            nonlocal name   # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
            name = "冷静"
    
        weiweihou()
        print(name)
    
    print(name)
    weihou()
    print(name)
    # 刚娘
    # 冷静
    # 刚娘
    def foo():
        print('from foo')
        bar()
    
    foo()#报错,未定义
    
    def bar():
        print('from bar')

    递归:

    def calc(n):
        print(n)
        if int(n/2) ==0:
            return n
        return calc(int(n/2))
     
    calc(10)
     
    输出:
    10
    5
    2
    1
    import time
    
    person_list=['alex','wupeiqi','linhaifeng','zsc']
    def ask_way(person_list):
        print('-'*60)
        if len(person_list) == 0:
            return '根本没人知道'
        person=person_list.pop(0)
        if person == 'linhaifeng':
            return '%s说:我知道,老男孩就在沙河汇德商厦,下地铁就是' %person
    
        print('hi 美男[%s],敢问路在何方' % person)
        print('%s回答道:我不知道,但念你慧眼识猪,你等着,我帮你问问%s...' % (person, person_list))
        time.sleep(1)
        res=ask_way(person_list)
        return res
    res=ask_way(person_list)
    print(res)

    递归特性:

    1. 必须有一个明确的结束条件

    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

    3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

    堆栈扫盲http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html 

    尾递归优化:http://egon09.blog.51cto.com/9161406/1842475

  • 相关阅读:
    rocketMQ部署
    Redis Cluster集群搭建
    如何为nginx配置https(免费证书)
    台式机主机u盘安装centos7报错及注意事项
    docker运行模式图
    Mysql5.7版本安装
    Jumpserver安装过程
    macos系统安装mysql
    macos系统安装nginx
    一些小知识总结(虽然可能没用)
  • 原文地址:https://www.cnblogs.com/raitorei/p/11682188.html
Copyright © 2011-2022 走看看