zoukankan      html  css  js  c++  java
  • Python学习笔记函数之局部和全局作用域

    随笔记录方便自己和同路人查阅。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      在被调用函数内赋值的変元和变量,处于该函数的“局部作用域”。在所有函数之外赋值的变量,属于“全局作用域”。

    处于局部作用域的变量,被称为“局部变量”。处于全局作用域的变量,被称为“全局变量”。一个变量必是其中一种,不能

    即是局部又是全局。

      可以将“作用域”看成是变量的容器,当作用域被销毁时,所有保存在该作用域内的变量的值就被丢弃了。只有一个

    全局作用域,它是程序开始时创建的。如果程序终止,全局作用域就被销毁,他的所有变量就被丢弃了。否则,下次你

    运行程序的时候,这些变量就会记住他们上次运行时的值。

      一个函数被调用时,该函数返回时,这个局部作用域就被销毁了,这些变量就丢失了。下次调用这个函数,局部变量

    不会记得该函数上次被调用时它们保存的值。

      作用域很重要,理由如下:

      (1)全局作用域中的代码不能使用任何局部变量

      (2)但是,局部作用域可以访问全局变量

      (3)一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量

      (4)如果在不同作用域中,你可以使用相同的名字命名不同变量。也就是说可以有一个名为spam的局部变量,和一个

    名为spam的全局变量

      Python有不同的作用域,而不是让所用东西都成为全局变量,这是有理由的。这样一来,当特定函数调用中的代码修改

    变量时,该函数与程序其他部分的交互,只能通过他的参数和返回值。这就缩小了可能导致缺陷的代码作用域。如果程序只

    包含全局变量,又有一个变量赋值错误的缺陷,那就很难追踪这个赋值错误发生的位置。它可能在程序的任何地方赋值,而

    你的程序可能有几百到几千行!但如果缺陷是因为局部变量做粗赋值,你就会知道,只有那一个函数中的代码可能产生赋值

    错误。

      虽然在小程序中使用全局变量没有太大问题,但当程序变得越来越大时,依赖全局变量就是一个坏习惯。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      1、局部变量不能在全局作用域内使用,示例代码:

    #
    # -*- coding:utf-8 -*-
    # Autor: Li Rong Yang
    #import random
    def hell():#定义一个函数
        local = 1+1#定义一个局部变量
    hello() print(local)#在全局作用域打印局部变量

      运行结果:

      发生错误是因为,local只属于hello函数创建的局部作用域。在程序执行从hello()函数返回后,该局部作用域就被销毁了,

    不在有名为local的变量。所以当程序试图执行print(local)时,Python就报错,说local没有定义。这是有意义的,当程序执行

    在全局作用域中时,不存在局部作用域,所以不会有任何局部变量。这就是为什么只有全局变量能用于局部作用域。

      2、局部作用域不能使用其他局部作用域内的变量,示例代码:

    #
    # -*- coding:utf-8 -*-
    # Autor: Li Rong Yang
    #import random
    def hello():#定义一个函数1
        hello_local = 1+1#定义一个局部变量
    def world():#定义一个函数2
        world_local = hello_local+1#使用函数1中的局部变量
    world()#调用函数
    

      运行结果:

      3、全局变量可以在局部作用域中读取,示例代码:

    #
    # -*- coding:utf-8 -*-
    # Autor: Li Rong Yang
    #import random
    def hello():#定义一个函数1
        print(name)#打印全局变量
    name ="Li Rong Yang"#全局变量
    hello()#调用函数
    

      运行结果:

      4、名称相同的局部变量和全局变量

      局部变量是可以和全局变量同名的,在语法上完全合法。但我们在写代码时应尽量避免局部变量和全局变量同名。

      示例代码:

    #
    # -*- coding:utf-8 -*-
    # Autor: Li Rong Yang
    #import random
    def spam():
        eggs = 'spam local'
        print(eggs)
    def bacon():
        eggs = 'bacon loacl'
        print(eggs)
        spam()
        print('我是spam的 eggs:%s',eggs)
    eggs = 'global'
    bacon()
    print(eggs)
    

      运行结果:

      从运行结果可以看出,两个函数中的局部变量eggs和全局变量eggs都被打印了。

       

  • 相关阅读:
    noip2012 同余方程
    bzoj1477 poj1061 青蛙的约会
    Nginx 从入门到放弃(五)
    Nginx 从入门到放弃(四)
    Nginx 从入门到放弃(三)
    Nginx 从入门到放弃(二)
    Nginx 从入门到放弃(一)
    python三大神器之fabric
    Docker 学习(一)
    linux就该这么学 第一天学习笔记
  • 原文地址:https://www.cnblogs.com/lirongyang/p/9532021.html
Copyright © 2011-2022 走看看