zoukankan      html  css  js  c++  java
  • python---函数作用域

    #变量作用域

      -变量有作用范围限制

      -分类:按照作用域分类

        -全局(global):在函数外部定义

        -局部(local):在函数内部定义

      -变量的作用范围:

        -全局变量:在整个全局范围都有效

        -全局变量在局部可以使用(即函数内部可以访问函数外部定义的变量)

        -全局变量在局部范围可以使用

        -局部变量在全局无法使用

      -LEGB原则:    -L(Local):局部作用域

        -E(Enclosing function locale):外部嵌套函数作用域

        -G(Global module):函数定义所在模块作用于

        -B(Buildin):Python内置模块的作用于

    #a1是全局的
    a1 = 100
    def fun():
    print(a1)
    print("I am fun")
    #a2的作用域范围是fun
    a2 = 99
    print(a2)

    print(a1)
    fun()
    # print(a2)无法访问a2

    提升局部变量为全局变量

    #b1是全局的
    b1 = 100
    def fun():
    #提升b2为全局变量
    global b2
    print(b1)
    print("I am fun")
    b2 = 90
    print(b2)

    print(b1)
    fun()
    print(b2)

    运行结果:

    100
    100
    I am fun
    90
    90

    #globals, locals 函数

      -可以通过globals和locals显示出局部变量和全局变量

      -参看以下案例:

        

    #globals 和llcals
    a = 1
    b = 2
    def fun(c, d):
    e = 111
    print("Locals = {0}".format(locals()))
    print("Globals = {0}".format(globals()))

    fun(100, 200)

    Locals = {'e': 111, 'd': 200, 'c': 100}
    Globals = {'__name__': '__main__', '__doc__'...}


    #eval()函数
      -把一个字符串当成一个表达式来执行,返回表达式执行后的结果
    语法:
      eval(string_code, globals=None, locals=None)
    #eval
    x = 100
    y = 200
    z1 = x + y
    z2 = eval("x+y")
    print(type(z1))
    print(z1)
    print(type(z2))
    print(z2)

    运行结果:
      <class 'int'>
      300
      <class 'int'>
      300

    #exec
      -跟eval功能类似,但是,不返回结果
      -语法:
        exec(string_code, globals=None, locals=None)

    #exec
    x = 100
    y = 200
    z1 = x + y
    z2 = exec("print('x+y:', x+y)")
    z3 = exec("x+y")
    print("z1", type(z1))
    print("z1:", z1)
    print("z2", type(z2))
    print("z2", z2)
    print("z3", type(z3))
    print("z3", z3)

    运行结果:
    x+y: 300
    z1 <class 'int'>
    z1: 300
    z2 <class 'NoneType'>
    z2 None
    z3 <class 'NoneType'>
    z3 None


    #递归函数
      -函数直接或者间接调用自身
      -优点:简洁, 理解容易
      -缺点:对递归深度有限制,消耗资源
      -python对递归深度有限制,超过限制报错
      -再写递归程序的时候,一定注意结束条件

    x = 0
    def fun():
    global x
    x = x + 1
    print(x)
    #函数自己调用自己
    fun()

    fun()
    .
    ..
    ....
    RecursionError: maximum recursion depth exceeded while calling a Python object








  • 相关阅读:
    前端必看的数据可视化入门指南
    win10下查看进程,杀死进程
    前端如何使用proxyTable和nginx解决跨域问题
    vue-wechat-title动态修改title
    npm与cnpm混用导致的问题
    sass与less对比学习
    nginx,作为前端的你会多少?
    Ubuntu16.04安装python3.7及相应的pip
    漫游Kafka设计篇之性能优化(7)
    漫游Kafka设计篇之消息传输的事务定义(5)
  • 原文地址:https://www.cnblogs.com/Slxc/p/9700037.html
Copyright © 2011-2022 走看看