深度实践OpenStack:基于Python的OpenStack组件开发—3.5.7 变量作用域

举报
华章计算机 发表于 2019/06/06 12:08:15 2019/06/06
【摘要】 本书摘自《深度实践OpenStack:基于Python的OpenStack组件开发》——书中第3章,3.5.7节,作者是喻涛、田亮、张家龙、赵利军、李飞。

3.5.7 变量作用域

在讲解变量的时候,提到了两个概念:全局变量和局部变量,下面介绍这两种变量之间的区别。先看下面的代码:

operation = ["add","sub"] 

def get_operation():

    operation = {"lucifer":10000}

    return operation

暂时忽略这段代码的命名是否规范,先看一下这段代码的返回值,返回的是字典形式的operation还是列表形式的operation?为了回答这个问题,先讲解一下Python的变量搜索顺序。在Python中搜索变量时,总是local>file>global,即优先搜索局部变量,其次是在本文件中定义的全局变量,最后才是整个工程中的全局变量。如果这三种变量同时出现,默认优先使用局部变量,当查找不到局部变量时,再依次查找文件中的全局变量和工程中的全局变量。值得注意的是,由于可读性和可维护性,一般来说,在代码中禁止使用工程级别的全局变量。所以,上边一段代码返回的将是字典形式的operation。那么,如果想得到列表形式的operation,该怎么做?

operation = ["add","sub"]

def get_operation():

    operation = {"lucifer":10000}

    global operation

    return operation 


operation = ["add","sub"]

def get_operation(): 

    return operation

添加上面加粗部分的代码,或者如同第二段代码一样,就能得到列表形式的operation。

下面来介绍一下关键字global。global一般用于表明该变量是全局变量。搜索用global修饰的变量时,应该在全局变量中查找。上边的代码中使用global,表示在该条语句之后,使用的operation变量均是全局变量。global关键字的存在,导致很多代码的可读性和可维护性下降;同时,搜索全局变量比搜索局部变量要慢,导致全局变量在一定程度上将影响程序的性能。

在此,提出Python性能优化的第九条原则:除了实现switch语法和日志记录之外,在没有必要的情况下,禁止使用全局变量。

总结:

1)从循环的角度看,变量可以分为可迭代的变量和不可迭代的变量。

2)从执行的角度看,变量可以分为可调用的变量和不可调用的变量。

3)从作用域和搜索顺序的角度看,变量可以分为局部变量和全局变量。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。