Python的程序结构[3] -> 变量/Variable[0] -> 变量类型
变量类型 / Variable Type
在 Python 中,变量主要有以下几种,即全局变量,局部变量和内建变量,
全局变量 / Global Variable
通常定义于模块内部,大写变量名形式存在,可被其他模块导入,但还有一种特殊的私有变量,以单/双下划线开头,同样定义于模块内,但无法通过 from modelname import * 的方式进行导入。
局部变量 / Local Variable
局部变量通常定义于函数内部,变量名以小写形式存在,仅在函数的局部作用域起作用。
内建变量 / Built-in Variable
内建变量是一些内置存在的变量,可以通过 vars() 进行查看,常用的有 __name__ 等。
变量示例 / Variable Example
下面以一段代码来演示这几种变量之间的区别,
print(vars()) # Show built_in variables GLOBAL_VARIABLE = "This is global variable"
_PRIVATE_VARIABLE = "This is private variable" def call_local():
local_variable = "This is local variable"
print(local_variable) def call_global():
global GLOBAL_VARIABLE
print(GLOBAL_VARIABLE) def call_private():
print(_PRIVATE_VARIABLE) if __name__ == '__main__':
call_local()
call_global()
call_private()
上面的代码首先利用 vars() 函数显示了模块中原始存在的内建变量,主要有 __doc__,__name__ 等。随后定义了全局变量 GLOBAL_VARIABLE 和私有的全局变量 _PRIVATE_VARIABLE,call_local 函数中对局部变量进行了调用,在 call_global 函数中,首先通过关键词声明了全局变量,随后对其进行调用,而在 call_private 函数中却没有对私有的全局变量进行 global 声明,但也成功调用了,这便涉及到了 Python 的 LEGB 法则。
{'__doc__': None, '__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\EKELIKE\\Documents\\Python Note\\3_Program_Structure\\3.4_Variable\\variable_type.py', '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None}
This is local variable
This is global variable
This is private variable
最后,我们在另一个模块中尝试导入当前模块的私有全局变量 _PRIVATE_VARIABLE,
from variable_type import * print(GLOBAL_VARIABLE) try:
print(_PRIVATE_VARIABLE)
except NameError:
print("Name Error, re-import.")
from variable_type import _PRIVATE_VARIABLE
print(_PRIVATE_VARIABLE)
从输出的结果可以看到,使用 from module import * 的方式是无法将私有的全局变量导入的,但若指明具体的变量名则可以。
This is global variable
Name Error, re-import.
This is private variable
Note: 此处的全局私有变量使用单下划线和双下划线效果相同。
相关阅读
1. LEGB 法则
Python的程序结构[3] -> 变量/Variable[0] -> 变量类型的更多相关文章
- Python的程序结构[5] -> 模块/Module[0] -> 内建模块 builtins
builtins 内建模块 / builtins Module 在Python的模块中,有一种特殊模块,无需导入便可以使用,其中包含了许多内建函数与类. builtins 模块内容 / builtin ...
- Python的程序结构[1] -> 方法/Method[0] -> 类实例方法、私有方法和抽象方法
类实例方法.私有方法和抽象方法 Python中最常用的就是类实例方法,类似于属性中的类实例属性,同时,也存在与私有属性类似方法,即私有方法,下面介绍这两种常见的方法,以及一种特殊意义的类实例方法 -- ...
- Python的程序结构[2] -> 类/Class[0] -> 类的特殊属性
类的特殊属性 / Special Property of Class Python 中通过 class 进行类的定义,类可以实例化成实例并利用实例对方法进行调用. 类中还包含的一些共有的特殊属性. 特 ...
- Python的程序结构[4] -> 函数/Function[0] -> 函数与方法的区别
函数与方法的区别 / Distinction of Function and Method 关于函数与方法的区别,可根据两者的定义看出, 函数function -- A series of state ...
- day2 编程语言介绍、Python运行程序的两种方式、变量
一 编程语言介绍 1. 机器语言 用计算机能理解的二进制指令直接编写程序,直接控制硬件 2. 汇编语言 用英文标签取代二进制指令编写程序,本质也是直接控制硬件 3. 高级语言 用人能理解的表达方式去编 ...
- Python的程序结构[4] -> 函数/Function[2] -> 匿名函数
匿名函数 / Anonymous Function 匿名函数是一种不需要绑定函数名的函数 (i.e. functions that are not bound to a name).匿名函数通过 la ...
- Python的程序结构[3] -> 变量/Variable[1] -> LEGB 法则
LEGB法则 / LEGB Rule LEGB 变量搜索顺序 ---- 来源于<Python学习手册>/ Learning Python Page 419 ---- Python 的变量名 ...
- Python的程序结构[0] -> 属性/Property[0] -> 类属性、实例属性和私有属性
类属性.实例属性和私有属性 Python中类的属性主要包括类属性,实例属性和私有属性,下面是对三种属性的简单介绍 类属性 / Class Property 类属性在__init__()之外初始化,在外 ...
- Python基本程序结构
条件判断: 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断.比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:
随机推荐
- 网络--TIME_WAIT状态
MSL时间 MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间IP数据包将在网络中消失 .MSL在RFC 1122 ...
- 爬虫:Scrapy16 - Spider Contracts
Scrapy 通过合同(contract)的方式来提供了测试 spider 的集成方法. 可以硬编码(hardcode)一个样例(sample)url,设置多个条件来测试回调函数处理 response ...
- PAT 1075 链表元素分类
https://pintia.cn/problem-sets/994805260223102976/problems/994805262953594880 给定一个单链表,请编写程序将链表元素进行分类 ...
- InnoDB 存储引擎的线程与内存池
InnoDB 存储引擎的线程与内存池 InnoDB体系结构如下: 后台线程: 1.后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据: 2.另外,将以修改的数据文件刷 ...
- idea中新建的web项目不能新建servlet
============ ======================================================================== 在新建的“ java ”源文 ...
- 在LinkedIn的 Kafka 生态系统
在LinkedIn的 Kafka 生态系统 Apache Kafka是一个高度可扩展的消息传递系统,作为LinkedIn的中央数据管道起着至关重要的作用. Kafka 是在2010年在LinkedIn ...
- DataBase -- Note I
SQL对大小写不敏感! SQL DML和DDL:可以把SQL分为两个部分:数据操作语言(DML)和数据定义语言(DDL) SQL(结构化查询语言)是用于执行查询的语法.但是SQL语言也包含用于更新.插 ...
- 一步步制作RPM包
一步步制作RPM包 来源 http://blog.51cto.com/laoguang/1103628 一.RPM制作步骤 我们在企业中有的软件基本都是编译的,我们每次安装都得编译,那怎么办呢?那就根 ...
- (转)Ant使用例子
文章来自:http://www.blogjava.net/feng0801/archive/2014/07/29/416297.html Ant是一个Apache基金会下的跨平台的构件工具,它可以实现 ...
- 论文笔记《Tracking Using Dynamic Programming for Appearance-Based Sign Language Recognition》
一.概述 这是我在做手势识别的时候,在解决手势画面提取的时候看的一篇paper,这里关键是使用了动态规划来作为跟踪算法,效果是可以比拟cameshift和kf的,但在occlusion,gaps或者离 ...