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. 分享一款开源堡垒机-jumpserver

    本文主文章地址为:https://blog.csdn.net/KH_FC JumpServer是由FIT2CLOUD(飞致远)公司旗下一款开源的堡垒机,这款也是全球首款开源的堡垒机,使用 GNU GP ...

  2. Nginx_全局命令设置

    刚安装好的Nginx, 命令需要去sbin目录执行,比较麻烦,设置下全局命令,就无需进入nginx的sbin目录执行nginx命令了 1.创建文件 vim /etc/init.d/nginx 把下面代 ...

  3. python的赋值、浅拷贝和深拷贝

    """ 一.赋值在python中就是简单的对象引用 """ list_a = ["aaa", "bbb&quo ...

  4. centos7.5上安装go1.13.4

    一.安装 1.下载go1.13.4.linux-amd64.tar.gz 先进入官网https://golang.google.cn/ 再 https://golang.google.cn/doc/i ...

  5. Java 总结 数据底层原理 【包括 ArrayList、LinkedList、hash table、HashMap、Hashtable、ConcurrentHashMap、hash code、HashSet、LinkedHashMap、LinkedHashSet】

    1.ArrayList (1)底层是由动态数组实现的[使用了List接口]. (2)动态数组是长度不固定,随着数据的增多而变长. (3)如果不指定,默认长度为10,当添加的元素超过当前数组的长度时,会 ...

  6. 第10组 Beta冲刺 (2/5)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/14015412.html ·作业博客:https://edu.cnblogs.co ...

  7. 曾经大量使用的Model1开发模式,虽不常用,但可以帮我们理解JSP

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513394762370777604/ 1.<JSP页面实际上就是Servlet> 2.<JSP页 ...

  8. live-server使用指南

    一.安装 npm -g install live-server 二.配置 --port=NUMBER` - 选择要使用的端口,默认值:PORT env var或8080--host=ADDRESS` ...

  9. k8s中初始化容器(init container)的作用及其使用方法

    概述 在容器的部署过程中,有的时候需要在容器运行之前进行一些预配置的工作,比如下载配置,判断某些服务是否启动,修改配置等一些准备的工作,想要实现这些功能,在k8s中可以使用初始化容器,在应用容器运行之 ...

  10. 【小问题】为啥乱搞就不行,golang没安装在系统目录下,导致go get出现"package bytes: directory "/home/ahfu/go/src/bytes" is not using a known version control system"

    想在自己的账号下安装golang开发环境,于是这样配置: wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz cd /home/ahfu ...