变量类型 / 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] -> 变量类型的更多相关文章

  1. Python的程序结构[5] -> 模块/Module[0] -> 内建模块 builtins

    builtins 内建模块 / builtins Module 在Python的模块中,有一种特殊模块,无需导入便可以使用,其中包含了许多内建函数与类. builtins 模块内容 / builtin ...

  2. Python的程序结构[1] -> 方法/Method[0] -> 类实例方法、私有方法和抽象方法

    类实例方法.私有方法和抽象方法 Python中最常用的就是类实例方法,类似于属性中的类实例属性,同时,也存在与私有属性类似方法,即私有方法,下面介绍这两种常见的方法,以及一种特殊意义的类实例方法 -- ...

  3. Python的程序结构[2] -> 类/Class[0] -> 类的特殊属性

    类的特殊属性 / Special Property of Class Python 中通过 class 进行类的定义,类可以实例化成实例并利用实例对方法进行调用. 类中还包含的一些共有的特殊属性. 特 ...

  4. Python的程序结构[4] -> 函数/Function[0] -> 函数与方法的区别

    函数与方法的区别 / Distinction of Function and Method 关于函数与方法的区别,可根据两者的定义看出, 函数function -- A series of state ...

  5. day2 编程语言介绍、Python运行程序的两种方式、变量

    一 编程语言介绍 1. 机器语言 用计算机能理解的二进制指令直接编写程序,直接控制硬件 2. 汇编语言 用英文标签取代二进制指令编写程序,本质也是直接控制硬件 3. 高级语言 用人能理解的表达方式去编 ...

  6. Python的程序结构[4] -> 函数/Function[2] -> 匿名函数

    匿名函数 / Anonymous Function 匿名函数是一种不需要绑定函数名的函数 (i.e. functions that are not bound to a name).匿名函数通过 la ...

  7. Python的程序结构[3] -> 变量/Variable[1] -> LEGB 法则

    LEGB法则 / LEGB Rule LEGB 变量搜索顺序 ---- 来源于<Python学习手册>/ Learning Python Page 419 ---- Python 的变量名 ...

  8. Python的程序结构[0] -> 属性/Property[0] -> 类属性、实例属性和私有属性

    类属性.实例属性和私有属性 Python中类的属性主要包括类属性,实例属性和私有属性,下面是对三种属性的简单介绍 类属性 / Class Property 类属性在__init__()之外初始化,在外 ...

  9. Python基本程序结构

    条件判断: 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断.比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:

随机推荐

  1. 剑指Offer - 九度1369 - 字符串的排列

    剑指Offer - 九度1369 - 字符串的排列2014-02-05 21:12 题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所 ...

  2. asp.net 身份验证-Form 身份验证

    一. .net身份验证简介 1.身份验证就是检测用户是否登录及所访问的资源是否有权限.当我们在访问一个受保护网络资源时,往往需要输入用户名.密码信息,或通过其他证书.第三方身份验证等方式.验证(Aut ...

  3. jekens介绍及服务搭建

    https://blog.csdn.net/achuo/article/details/51086599 https://blog.csdn.net/qq_37372007/article/detai ...

  4. springmvc项目搭建三-添加前端框架

    这几年前端框架发展可以说非常迅猛了...实际项目中也用到了几个,easyui相对来讲,算是我第一个接触的前端框架了,用的时候感觉很方便,省了很多代码量,一个好的前端框架可以为你省去很多精力在前端布局上 ...

  5. 项链 [FFT]

    题面 思路 这题很像bzoj4827礼物 还是一样的思路,我们把$y$倍长,$y[i+k]=y[i]+n$ 然后令$f(s,c)$表示从$y$的第$s$个开始匹配,位置偏移量为$c$的答案 可以得到$ ...

  6. Codeforces Round #418 (Div. 2) D. An overnight dance in discotheque

    Codeforces Round #418 (Div. 2) D. An overnight dance in discotheque 题意: 给\(n(n <= 1000)\)个圆,圆与圆之间 ...

  7. BZOJ5301 [Cqoi2018]异或序列 【莫队】

    题目链接 BZOJ5301 题解 莫队水题 BZOJ400AC纪念 #include<algorithm> #include<iostream> #include<cst ...

  8. Linux命令(IT)

    ls  查看当前目录下文件 cd 指定目录 sftp zygf@xxx.xxx.xxx.xxx  进行登录zygf用户 sftp命令行登录过程: ① sftp   xxx.xxx.xxx.xxx   ...

  9. error : cannot open source file "SDKDDKVer.h"

    属性->VC++ Directions-> include path 中加了:$(IncludePath) library path 中加了:$(LibraryPath)

  10. libcurl网络连接使用tcp/ip

    CURL *curl; CURLcode res; const char *request = "GETas.xxxxE测试发送"; curl_socket_t sockfd; / ...