Python命名空间及作用域原理实例解析


Posted in Python onAugust 12, 2020

Python命名空间和作用域

总结

emmm,这一块讲了2个内容,一个是命名空间,一个是作用域。一个一个说吧

命名空间

A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries

上边这段是官方文档定义的,简单来说就是名字到对象的映射,我们知道,python的一切都是对象,你所定义的变量名其实只是个引用。这样就好理解了。python的命名空间由python数据结构字典实现。
python的命名空间细分的话有三种。如图所示。
Python命名空间及作用域原理实例解析

这一部分没什么好说的,重要的是理解其概念

作用域

A scope is a textual region of a Python program where a namespace is directly accessible. "Directly accessible" here means that an unqualified reference to a name attempts to find the name in the namespace.

由官方文档可以看出,作用域就是可以直接访问的区域。就是全局到局部。这里举个代码例子就行了。

#demo.py
global_var='haha'  #定义全局变量

def tool():
  local_var='local'  #局部变量
  print(local_var)  #访问局部变量,可以访问
print(global_var)  #访问全局变量,可以访问
print(local_var)  #访问局部变量,找不到,无法访问

这一部分的惊喜知识是跟作用域有关的。学到了2个关键字global和nonlocal

global_var='haha'  #定义全局变量
def tool():
  global_var='22'
  print(global_var)
print(global_var)  #访问全局变量,可以访问
tool()

这段代码输出了2个global_var。输出结果是不一样的。tool函数里在局部修改了global_var的值,并不影响全局。此时如果你想影响全局,你就需要用到关键字global.

global_var='haha'  #定义全局变量

def tool():
  global global_var
  global_var='22'
  print(global_var)

tool()
print(global_var)

这样就好了。

nonlocal作用类似,用来修改嵌套作用域的。

def tool():
  var=1
  def inner():
    nonlocal var
    var=2
    print(var)
  inner()
  print(var)
tool()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
介绍Python的@property装饰器的用法
Apr 28 Python
Python正则表达式教程之二:捕获篇
Mar 02 Python
Pycharm学习教程(3) 代码运行调试
May 03 Python
Python实现的基于优先等级分配糖果问题算法示例
Apr 25 Python
便捷提取python导入包的属性方法
Oct 15 Python
python 获取页面表格数据存放到csv中的方法
Dec 26 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
Feb 03 Python
对python中return与yield的区别详解
Mar 12 Python
python如何求100以内的素数
May 27 Python
通过Python实现Payload分离免杀过程详解
Jul 13 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 15 Python
python将字典内容写入json文件的实例代码
Aug 12 #Python
Python调用jar包方法实现过程解析
Aug 11 #Python
如何用python免费看美剧
Aug 11 #Python
Pythonic版二分查找实现过程原理解析
Aug 11 #Python
Python3合并两个有序数组代码实例
Aug 11 #Python
Python基于gevent实现文件字符串查找器
Aug 11 #Python
Python3如何实现Win10桌面自动切换
Aug 11 #Python
You might like
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
php中动态调用函数的方法
2015/03/16 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
javascript类继承机制的原理分析
2009/09/12 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
python实现简单日期工具类
2019/04/24 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
2020/01/10 Python
如何写python的配置文件
2020/06/07 Python
基于python实现图片转字符画代码实例
2020/09/04 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
python3判断IP地址的方法
2021/03/04 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
毕业学生推荐信
2013/12/01 职场文书
2014年高三毕业生自我评价
2014/01/11 职场文书
学期自我评价
2014/01/27 职场文书
工厂标语大全
2014/10/06 职场文书
2015元旦标语横幅
2014/12/09 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL