python中的名称空间是名称(标识符)到对象的映射。
具体来说,python为模块、函数、类、对象保存一个字典(__dict__),里面就是重名称到对象的映射。
-------------------------------------------------------------------------------------------
import urllib
import re
x=1 # 变量
def abc(): # 函数
pass
def qq(self): # 方法
pass
class typ(object): # 类
"""docstring for typ"""
def __init__(self, arg):
super(typ, self).__init__()
self.arg = arg
def classqq(self): # 不存在于全局变量中
pass
 
print(globals().keys()) # 打印字典中的key值
print()
print(globals()) # 打印全局变量,打印出来是以字典的形式展示
-----------------------------------------------------------------------------------------------
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__file__', '__cached__', 'urllib', 're', 'x', 'abc', 'qq', 'typ'])
 
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000001DEC048>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:\\Learn\\practice\\case1.py', '__cached__': None, 'urllib': <module 'urllib' from 'D:\\Programs\\Python\\Python36\\lib\\urllib\\__init__.py'>, 're': <module 're' from 'D:\\Programs\\Python\\Python36\\lib\\re.py'>, 'x': 1, 'abc': <function abc at 0x00000000001F2E18>, 'qq': <function qq at 0x00000000021FAAE8>, 'typ': <class '__main__.typ'>}
-------------------------------------------------------------------------------------------
 
 
x=1 # 变量
def abc(): # 函数
pass
def qq(self): # 方法
pass
class Typ(object): # 类
"""docstring for typ"""
k=1 # 私有变量没有被init初始化
def __init__(self):
super(Typ, self).__init__()
self.y = 2
self.z = 3
def func(self): # 函数方法不存在于全局命名空间中
print("abcd") # 函数方法会默认return None
func.fx = 2
 
test1 = Typ()
print(Typ.__dict__)
print(test1.__dict__)
print(test1.func.__dict__)
print(globals().keys())
----------------------------------------------------------------------------------------------
{'__module__': '__main__', '__doc__': 'docstring for typ', 'k': 1, '__init__': <function Typ.__init__ at 0x00000000029007B8>, 'func': <function Typ.func at 0x0000000002900840>, '__dict__': <attribute '__dict__' of 'Typ' objects>, '__weakref__': <attribute '__weakref__' of 'Typ' objects>}
{'y': 2, 'z': 3}
{'fx': 2}
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__file__', '__cached__', 'urllib', 're', 'x', 'abc', 'qq', 'Typ', 'test1'])
[Finished in 0.1s]
 
locals
内置函数locals(), 返回当前函数(方法)的局部命名空间
def function(a=1):
b=2
print(locals())
return a+b
print(function())
-----------------------------
{'b': 2, 'a': 1}
3
globals
内置函数globals(),返回当前module的命名空间
def function(a=1):
b=2
print(locals())
return a+b
print(function())
print(globals().keys())
--------------------------------------
{'b': 2, 'a': 1}
3
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__file__', '__cached__', 'urllib', 're', 'function'])
[Finished in 0.1s]
 
locals()和globals()有一个区别是,locals只读,globals可以写
 
from module import 和 import module
  • 使用import module时,module本身被引入,但是保存它原有的命名空间,所以我们需要使用module.name这种方式访问它的 函数和变量。
  • from module import这种方式,是将其它模块的函数或者变量引到当前的命名空间中,所以就不需要使用module.name这种方式访问其它的模块的方法了。
 
 

python的namespace的理解的更多相关文章

  1. Python中文字符的理解:str()、repr()、print

    Python中文字符的理解:str().repr().print 字数1384 阅读4 评论0 喜欢0 都说Python人不把文字编码这块从头到尾.从古至今全研究通透的话是完全玩不转的.我终于深刻的理 ...

  2. python 导入模块 import 理解

    --python 导入模块 import 理解 -----------------------------------2014/03/18 python 导入一个模块的过程要求有一个叫做“路径搜索”的 ...

  3. 【python进阶】深入理解系统进程2

    前言 在上一篇[python进阶]深入理解系统进程1中,我们讲述了多任务的一些概念,多进程的创建,fork等一些问题,这一节我们继续接着讲述系统进程的一些方法及注意点 multiprocessing ...

  4. 转发对python装饰器的理解

    [Python] 对 Python 装饰器的理解的一些心得分享出来给大家参考   原文  http://blog.csdn.net/sxw3718401/article/details/3951958 ...

  5. Python(os和sys)理解

    Python(os和sys)理解 os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口; sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时 ...

  6. Python的with用法理解

    Python的with理解 标签(空格分隔): Python with做为一种上下文管理器,在Python中的作用可以简单的理解为是用来代替try...except...finally的处理流程. w ...

  7. Python无类再理解--metaclass,type

    上次理解过一次,时间久了,就忘了.. 再学习一次.. http://blog.jobbole.com/21351/ ======================= 但是,Python中的类还远不止如此 ...

  8. python 引用和对象理解

    今天浏览博客的时候看到这么一句话: python中变量名和对象是分离的:最开始的时候是看到这句话的时候没有反应过来.决定具体搞清楚一下python中变量与对象之间的细节.(其实我感觉应该说 引用和对象 ...

  9. [python]在场景中理解装饰器

    原来我也自己通过查资料,来学习python的装饰器,但是效果不好.因为没有接触过需要用到装饰器的场景,所以 一起的资料都只停留在纸面上,但是今天偶然看到了vimer的这篇文章:http://www.v ...

随机推荐

  1. Selenium_环境安装(1)

    Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. Selenium基本上支持主流的浏览器,包括IE,Mozilla Firef ...

  2. vue - public 引入 <script>报错 Uncaught SyntaxError: Unexpected token '<'

    1.现象 原本我是直接在母版引入 <script type="application/javascript" src="static/config.js" ...

  3. 解决spring boot 无法访问静态文件夹的附件或图片

    1.需要在配置文件重新执行静态文件夹位置即可 # 指定静态文件位置 resources: static-locations: classpath:/static/,classpath:/static/ ...

  4. spring cloud bus 消息总线 动态刷新配置文件 【actuator 与 RabbitMQ配合完成】

    1.前言 单机刷新配置文件,使用actuator就足够了 ,但是 分布式微服务 不可能是单机 ,将会有很多很多的工程 ,无法手动一个一个的发送刷新请求, 因此引入了消息中间件 ,常用的 消息中间件 是 ...

  5. Maven插件开发教程

    Maven是一个一个优秀的项目管理开源框架,其插件机制为其功能扩展提供了非常大的便捷性.大多数情况下,我们不需要自己开发Maven插件,因为Maven本身提供了很多便捷的官方插件.但是对于某些特殊场景 ...

  6. Python爬虫脚本 ,Uni-APP复选框做出双向绑定 ,Net5工作流建模 。的一点经验

    从业C#开发多年,现在也经常用到Python 做网络爬虫 ,用Uni-app做手机前端.攒了一点经验.供其他多语言开发程序员借鉴吧. Python做爬虫和其他的方式做爬虫最大的区别应该在于. Pyth ...

  7. 【Java】枚举类

    文章目录 枚举类的使用 如何定义枚举类 方式一:jdk5.0之前,自定义枚举类 方式二:jdk5.0,可以使用enum关键字定义枚举类 Enum类的主要方法 toString() values() v ...

  8. leetcode 28. 实现 strStr()

    问题描述 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不 ...

  9. 顺序表-Go语言实现

    简单理解就是数组: 优缺点及使用场景 优点: 随机访问,在O(1)时间内找到第i个元素: 数据表中的数据是连续存放的,因此只要知道数据表中第一个元素的地址,那么后面的数据元素的地址就可以马上算出来. ...

  10. 【解决了一个小问题】golang的go.mod中出现版本错误

    代码中的这一句使用prometheus2.28.0版本的代码: import "github.com/prometheus/prometheus/prompb" 我把require ...