我和Python的Py交易》》》》》》 命名空间的小弟作用域
命名空间的小弟作用域
在这要明确一个观点,在Python中万物皆对象,而变量指向的就是对象。
变量可以是 类名,函数名,储存数据的变量……
对象可以是 类 ,被封装的一段代码(函数),数据……
命名空间
命名空间是从名字到对象的映射。在Python大多数命名空间目前以字典的形式实现。变量名是“键”,对象(内置函数,内置常量,内置类型,函数,类,变量)是“值”。
各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。
命名空间都是有创建时间和生存期的。对于Python built-in namespace(内置命名空间——内置函数,内置常量,内置类型)组成的命名空间,它在Python解释器启动的时候被创建,在解释器退出的时候才被删除;
对于一个Python 模块的global namespace(全局变量),它在这个模块被 引用的时候创建,在解释器退出的时候退出;
对于一个函数的local namespace(局部作用域),它在函数每次被调用的时候创建,函数返回的时候被删除。
作用域
作用域只是命名空间表示大小(适用范围)的属性。
作用域是Python程序(文本)的某一段或某些段,在这些地方,某个命名空间中的名字可以被直接引用。这个作用域就是这个命名空间的作用域。
python中的作用域分4种情况:
- L:local,局部作用域,即函数中定义的变量;
- E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
- G:globa,全局变量,就是模块级别定义的变量;
- B:built-in,系统固定模块里面的变量,比如int, bytearray等
搜索变量的优先级顺序
局部作用域>外层作用域>当前模块中的全局>python内置作用域,也就是L>E>G>B。
B = str("B:built-in 内置作用域")
G = "G:globa,全局变量,就是模块级别定义的变量"
print(B) # 当前模块中的全局>python内置作用域 找B
print(G) # 当前模块中的全局 找G
print(E) # 找不到E
print(L) # 找不到L
def f():
E = "E:enclosing,嵌套的父级函数的局部作用域"
print(B) # 外层作用域>当前模块中的全局>python内置作用域 找B
print(G) # 外层作用域>当前模块中的全局 找G
print(E) # 外层作用域 找E
print(L) # 找不到L
def z ():
L = "L:local,局部作用域,即函数中定义的变量"
print(B) # 作用域局部>外层作用域>当前模块中的全局>python内置作用域 找B
print(G) # 作用域局部>外层作用域>当前模块中的全局 找G
print(E) # 作用域局部>外层作用域 找E
print(L) # 作用域局部 找L
注意:在Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if、try、for等)是不会引入新的作用域的
变量的修改
在“作用域局部>外层作用域>当前模块中的全局>python内置作用域”中,更内层的作用域不可直接修改外层的作用域的变量,要修改要用到global关键字 和 nonlocal关键字
global关键字
当修改的变量是在全局作用域(global作用域)上的,就要使用global先声明一下。
nonlocal关键字
global关键字声明的变量必须在全局作用域上,不能嵌套作用域上,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)就需要nonlocal关键字了
B = str("B:built-in 内置作用域")
G = "G:globa,全局变量,就是模块级别定义的变量"
def f():
E = "E:enclosing,嵌套的父级函数的局部作用域"
def z ():
L = "L:local,局部作用域,即函数中定义的变量"
global B
B = "修改全局作用域的变量" nonlocal E
E = "修改嵌套作用域的变量"
欢迎评论,番茄,鸡蛋都砸过来吧!!!
我和Python的Py交易》》》》》》 命名空间的小弟作用域的更多相关文章
- 我和Python的Py交易》》》》》》 浮点数的身世字谜
什么是浮点数? 在数据类型中写道,浮点数是带小数点的小数,这个概念是不准确的:浮点数是除了无限不循环小数之外的小数,也就是可以用分数表示的带小数点的数. 好了,浮点数就这些内容,讲完了,各回各家,各找 ...
- 我和Python的Py交易》》》》》》数据类型
Python里的变量 ---门牌 Python在使用变量之前无须定义它的类型,但是必须声明以及初始化该变量. Python中给变量赋值就是声明,初始化变量(也就是创建一个相应数据类型的对象,而那些数据 ...
- 我和Python的Py交易》》》》》》函数
一 函数是什么? 是数学中的函数? Python中 函数是指将一组语句的集合通过一个名字(函数名)封装起来的一段代码.(所以这里的函数是subroutine子程序) 那要函数干嘛.不都是代码吗?只不 ...
- python web.py安装使用
官方首页:http://webpy.org/) 它的源代码非常整洁精干,学习它一方面可以让我们快速了解python语法(遇到看不懂的语法就去google),另一方面可以学习到python高级特性的使用 ...
- 『无为则无心』Python函数 — 31、命名空间(namespace)
目录 1.什么是命名空间 2.三种命名空间 3.命名空间查找顺序 4.命名空间的生命周期 5.如何获取当前的命名空间 1.什么是命名空间 命名空间指的是变量存储的位置,每一个变量都需要存储到指定的命名 ...
- python调用py中rar的路径问题。
1.python调用py,在py中的os.getcwd()获取的不是py的路径,可以通过os.path.split(os.path.realpath(__file__))[0]来获取py的路径. 2. ...
- python gettitle.py
#!/usr/bin/env python # coding=utf-8 import threading import requests import Queue import sys import ...
- Python pydoc.py
1. 查看帮助,我们可以在python命令行交互环境下用 help函数,比如: 查看 math 模块: >>> help('math')Help on built-in module ...
- django 1.7之后python manage.py syncdb没有了
在命令行输入python manage.py createsuperuser按照提示输入即可记得先初始化表. django>1.7 python manage.py makemigrations ...
随机推荐
- 漫谈 Clustering (4): Spectral Clustering
转:http://blog.pluskid.org/?p=287 如果说 K-means 和 GMM 这些聚类的方法是古代流行的算法的话,那么这次要讲的 Spectral Clustering 就可以 ...
- 关于函数指针与c++多态
原文 https://www.cnblogs.com/zhchngzng/p/4013031.html 虚函数是实现多态的重要元素,请看: class A { public: void a0(){c ...
- BZOJ2820:YY的GCD(莫比乌斯反演)
Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...
- SpringBoot学习(三)IDEA
一.什么是JPA JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate.TopLink等. 二.Mysql数据库示例 1.在app ...
- Eclipse安装Sonarlint插件
这里安装的是Sonarlint3.6.插件安装非常简单.插件比Sonar更为简单快捷. 一.首先通过点击Eclipse上方Help菜单会出现一个下拉列表,点击其中的Eclipse MarketPlac ...
- [转载]对iOS开发中内存管理的一点总结与理解
对iOS开发中内存管理的一点总结与理解 做iOS开发也已经有两年的时间,觉得有必要沉下心去整理一些东西了,特别是一些基础的东西,虽然现在有ARC这种东西,但是我一直也没有去用过,个人觉得对内存操作 ...
- 基于uIP和uC/OS-II嵌入式网络开发
基于uIP和uC/OS-II嵌入式网络开发 ——uIP主动发送数据分析 摘要:uIP协议栈简单易用,可以为16位单片机或者是更低级的处理器使用,占用的资源很少,相关移植网上有详细介绍,本文主要讨论uI ...
- Impossible WHERE noticed after reading const tables
阿里云反馈的慢SQL,执行计划返回如下:Impossible WHERE noticed after reading const tables sql很简单: SELECT * FROM deposi ...
- ArrayList的去重问题
面试被问及arraylist的去重问题,现将自己想的两种解决方案写在下面 /** * Description: * ClassName:Uniq * Package:com.syd.interview ...
- OpenGL 3 and OpenGL 4 with GLSL
Here are some OpenGL samples with advance features. NeHe OpenGL tutorial focus on the OpenGL fixed p ...