zoukankan      html  css  js  c++  java
  • Python-变量、函数及递归

    #规则:

      全局变量全部大写,局部变量全部小写

    #关于局部变量和全局变量在函数中应用的关系:

      定义全局变量:

    name = 'alex'         #全局变量

      1、函数中先定义与全局变量名相同的变量后再引用:

    name = 'alex'         #全局变量
    def test():
        name = 'oliver'  #先定义了局部变量(与全局变量名称相同) 
        print(name)     #后使用该变量
    test()
    print(name)
    # -->  oliver    alex

        可看出先定义与全局变量名称相同的局部变量后,在引用时使用的是局部变量的值(Oliver),且原全局变量不受改变(依旧是alex

      2、函数中先使用全局变量后再引用:

    name = 'alex'         #全局变量
    def test():
        print(name)   #本函数内找不到name,所以将采用全局变量name的值来使用
        name = 'oliver'  #修改name的值
        print(name)
    test()
    print(name)
    # -->  报错

        可看出如果函数中引用某变量时,在本函数内找不到定义,则会使用全局变量。但使用全局变量后就无法更改该变量的值。

    # global的使用:

      在上述的讨论中,已经知道方法二:函数中先使用全局变量后再引用,可以使用全局变量的值,但是不能修改,若想修改则需要使用global 将函数中的该变量更改为全局变量。

    name = 'alex'         #全局变量
    def test():
        global age, name
        age = 18    
        print(name, age)
        name = 'oliver'
        print(name)
    test()
    print(name, age)
    # -->  alex 18     oliver     oliver 18

        只要在函数中先用global定义变量,则该变量与在函数外定义的一样,具有全局性,可被修改(name),也可被外部直接引用(age

    #nonlocal的使用:

      global定义的变量为全局变量,该变量会与最外层定义的指定变量等效,但如果想让该变量与其上层函数所定义的某变量等效,则要使用nonlocal。

    name = 'haifeng'           #全局变量
    def huangwei():
        name = 'chenzhuo'      #第一级变量
        def liuwei():
            nonlocal name      #此处name将与第一级变量name等效
            name = 'lengjing'   #将更改第一级变量的值
        liuwei()
        print(name)
    huangwei()
    print(name)
    # -->  lengjing   haifeng   可看出第一级变量被改变,而全局变量值未被改变

    #定义的函数内也可以定义函数(函数嵌套):

    def huangwei():
        print('huang')
        def liuwei():
            print('liu')
        liuwei()
    huangwei()
    # --> huang   liu

      但内部定义的函数不能在外部调用:

    def huangwei():
        print('huang')
        def liuwei():
            print('liu')
        liuwei()
    liuwei()
    # --> 报错:name 'liuwei' is not defined

    #递归:

      函数内部继续调用本函数

    def calc(n):
        print(n)
        if int(n / 2) == 0:
            return n
        return calc(int(n / 2))
    calc(5)
    # -->  5  2  1

        特性:

            1、必须有一个明确的结束条件(否则内存溢出就会报错)

           2、每次进入更深一层递归时,问题规模要逐渐减小

  • 相关阅读:
    .net C# 利用Session防重复点击防重复提交
    子报表修改后需要重新导入,0.00显示.00的调整方法
    svn错误 svnserve.conf:12: Option expected解决办法
    mysql远程访问 登录ERROR 1130: is not allowed to connect to this MySQL server解决办法
    phpmyadmin新加用户登陆不了,测试解决方案。
    自己封装的php Curl并发处理,欢迎提出问题优化。
    js和php计算图片自适应宽高算法实现
    jquery获取浏览器宽高
    swftools中的pdf2swf转换Error overflow ID 65535 解决办法
    php 根据ip获取城市以及网络运营商名称(利用qqwry.dat)
  • 原文地址:https://www.cnblogs.com/yu-long/p/9961323.html
Copyright © 2011-2022 走看看