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爬虫之抓取百度贴吧代码分享
Nov 06 Python
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
python将字典内容存入mysql实例代码
Jan 18 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
python 列表,数组和矩阵sum的用法及区别介绍
Jun 28 Python
python re正则匹配网页中图片url地址的方法
Dec 20 Python
Django restframework 源码分析之认证详解
Feb 22 Python
Django 解决distinct无法去除重复数据的问题
May 20 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
python redis存入字典序列化存储教程
Jul 16 Python
Python类的继承super相关原理解析
Oct 22 Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 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
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
在线短消息收发的程序,不用数据库
2006/10/09 PHP
PHP 面向对象详解
2012/09/13 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
jquery插件制作简单示例说明
2012/02/03 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
JScript中的条件注释详解
2015/04/24 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
对angular4子路由&辅助路由详解
2018/10/09 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
详解javascript设计模式三:代理模式
2019/03/25 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
Python中logging日志库实例详解
2020/02/19 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
WSDL的操作类型主要有几种
2013/07/19 面试题
保险公司年会主持词
2014/03/22 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
给numpy.array增加维度的超简单方法
2021/06/02 Python