当前位置: 首页 > news >正文

python命名空间更改_python命名空间

python的命名空间

python使用命名空间记录变量。python中的命名空间就像是一个dict,key是变量的名字,value是变量的值。python中,每个函数都有一个自己的命名空间,叫做local namespace,它记录了函数的变量。

python中,每个module有一个自己的命名空间,叫做global namespace,它记录了module的变量,包括 functions, classes 和其它imported modules,还有 module级别的 变量和常量。

还有一个build-in 命名空间,可以被任意模块访问,这个build-in命名空间中包含了build-in function 和 exceptions。

当python中的某段代码要访问一个变量x时,python会在所有的命名空间中寻找这个变量,查找的顺序为:local namespace - 指的是当前函数或者当前类方法。如果在当前函数中找到了变量,停止搜索

global namespace - 指的是当前的模块。如果在当前模块中找到了变量,停止搜索

build-in namespace - 如果在之前两个namespace中都找不到变量x,python会假设x是build-in的函数或者变量。如果x不是内置函数或者变量,python会报错NameError。

对于闭包来说,这里有一点区别,如果在local namespace中找不到变量的话,还会去父函数的local namespace中找变量。

locals

内置函数locals(), 返回当前函数(方法)的局部命名空间def func(a = 1):

b = 2

print(locals())

return a+b

func()

# {'a': 1, 'b': 2} 可以看出,locals返回的是个dict

globals

内置函数globals(),返回当前module的命名空间def func(a = 1):

b = 2

return a+b

func()

print(globals()) # globals()返回的也是个dict

locals()和globals()有一个区别是,locals只读,globals可以写def func(a = 1):

b = 2

return a+b

func()

glos = globals()

glos['new_variable'] = 3

print(new_variable)

# 3 , 我们并没有显示定义new_variable这个变量,只是在globals中添加了这个key,在随后的代码中,

#就可以像访问一般变量一样来访问。

def func(a = 1):

b = 2

locs = locals()

locs['c'] = 1

print(c)

func()

# NameError: name 'c' is not defined

from module import 和 import module使用import module时,module本身被引入,但是保存它原有的命名空间,所以我们需要使用module.name这种方式访问它的 函数和变量。

from module import这种方式,是将其它模块的函数或者变量引到当前的命名空间中,所以就不需要使用module.name这种方式访问其它的模块的方法了。

if __name__ trick

python中的module也是对象,所有的modules都有一个内置的属性__name__,模块的__name__属性的值取决于如何使用这个模块,如果import module,那么__name__属性的值是模块的名字。如果直接执行这个模块的话,那么__name__属性的值就是默认值__main__。

module的一些内置属性__name__: 上面已经介绍过

__file__ : 当前module的绝对路径

__dict__:

__doc__ :

__package__:

__path__:

相关文章:

  • vb 查找word中的字符 单元格坐标_Word天,原来查找和替换功能这么强大
  • python网课答案董付国_Python 董付国
  • 苹果手机运行python_JavaScript_iPhone手机上搭建nodejs服务器步骤方法,一、为在ios上面运行,编译jxco - phpStudy...
  • vba 怎么选择网页中的下拉框_书法、国画中怎么选择用纸?
  • python编写手机自动化脚本_使用appium+python编写手机游戏功能自动化
  • pythonrandom函数用法_Python之np.random.permutation()函数的使用
  • python显示文字框_自定义悬停框Plotly:Python以适应文本
  • seay svn漏洞利用工具_roptool 一种帮助您编写二进制漏洞利用的工具
  • springcloud全家桶_Spring cloud 微服务组件 mica 2.0.5GA 发布,添加对sentinel、undertow指标收集。...
  • 查看约束信息_谢菲尔德资源与蚌埠中恒签订“转型”约束钛铁矿承购协议
  • recyclerview item 有选中字体颜色_PPT金属文字怎么插入?PPT模板金属字体制作,PPT金属字体怎么做?...
  • 3d旋转相册代码源码_Qt Data Visualization ,让数据3D可视化
  • asp 执行 exe_Asp.Net Core学习笔记:(五)构建和部署
  • mybatis if test 用法_手写一个简易版的Mybatis,带你深入领略它的魅力
  • python写入excel数据时保存之前内容_如何使用python在保留原excel格式的前提下插入/修改数据...
  • (三)从jvm层面了解线程的启动和停止
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Angular 响应式表单 基础例子
  • exif信息对照
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JavaScript创建对象的四种方式
  • JavaScript实现分页效果
  • js 实现textarea输入字数提示
  • Koa2 之文件上传下载
  • Laravel 实践之路: 数据库迁移与数据填充
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • React-Native - 收藏集 - 掘金
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • SQLServer之创建数据库快照
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue--为什么data属性必须是一个函数
  • 笨办法学C 练习34:动态数组
  • 从输入URL到页面加载发生了什么
  • 记一次删除Git记录中的大文件的过程
  • 巧用 TypeScript (一)
  • 如何选择开源的机器学习框架?
  • 设计模式 开闭原则
  • 运行时添加log4j2的appender
  • 7行Python代码的人脸识别
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #QT(智能家居界面-界面切换)
  • ${factoryList }后面有空格不影响
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • **PHP二维数组遍历时同时赋值
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .htaccess 强制https 单独排除某个目录
  • .Net CF下精确的计时器
  • .NET Reactor简单使用教程