python的namespace的理解

tombombadil tombombadil     2022-12-16     387

关键词:

Python命名空间的本质
 
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]
 
https://blog.csdn.net/u012436149/article/details/72819539
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这种方式访问其它的模块的方法了。
 
 

namespace的理解

 LinuxNamespaces机制提供一种资源隔离方案。PID,IPC,Network等系统资源不再是全局性的,而是属于某个特定的Namespace。每个namespace下的资源对于其他namespace下的资源都是透明,不可见的。因此在操作系统层面上看,就会出现多个相... 查看详情

php5.3中namespace的说明,帮助初次接触namespace的phper快速理解

命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀,但是方法名变的很长了,... 查看详情

c++基础学习笔记命名空间namespace的理解和使用(代码片段)

...识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对 查看详情

将 Python argparse.Namespace() 视为字典的正确方法是啥?

】将Pythonargparse.Namespace()视为字典的正确方法是啥?【英文标题】:WhatistherightwaytotreatPythonargparse.Namespace()asadictionary?将Pythonargparse.Namespace()视为字典的正确方法是什么?【发布时间】:2013-05-2812:23:34【问题描述】:如果我想使用a... 查看详情

100行shell写个docker

...接触Docker的时候,我们必须要了解的几个概念就是Cgroup、Namespace、RootFs,如果本身对虚拟化的发展没有深入的了解,那么很难对这几个概念有深入的理解,本文的目的就是通过在操作系统中以交互式的方式去理解,Cgroup/Namespace/R... 查看详情

docker学习总结(64)——快速理解docker底层原理

...清,对我毫无影响。Docker能实现这些功能,依赖于chroot、namespace、cgroup等三种老技术。Linux的内核,提供了多达8种类型的Namespace。在这些独立的Namespace中,资源互不影响,隔离措施做的非常好。8种类型我们先来看一下,Linux都支... 查看详情

docker学习总结(64)——快速理解docker底层原理

...清,对我毫无影响。Docker能实现这些功能,依赖于chroot、namespace、cgroup等三种老技术。Linux的内核,提供了多达8种类型的Namespace。在这些独立的Namespace中,资源互不影响,隔离措施做的非常好。8种类型我们先来看一下,Linux都支... 查看详情

python常用函数大总结

...)表示合法的python表达式,返回这个表达式dir(obj)查看obj的namespace中可见的namehasattr(obj,name)查看一个obj的namespace中是否有namegetattr(obj,name)得到一个obj的namespace中的一个namesetattr(obj,name,value)为一个obj的namespace中的一个name指向vale这个o... 查看详情

如何查看 argparse.NameSpace Python 对象的属性?

】如何查看argparse.NameSpacePython对象的属性?【英文标题】:Howtoseetheattributesofargparse.NameSpacePythonobject?【发布时间】:2021-12-2702:43:41【问题描述】:对于涉及多个脚本(数据处理、模型调整、模型训练、测试等)的项目,我可以将... 查看详情

python的uuid命名空间对每个人都一样吗?

...名空间对每个人都一样吗?【英文标题】:Arepython\'suuidnamespacesthesameforeveryone?【发布时间】:2022-01-1411:03:23【问题描述】:在python的UUIDmodule中,有四个命名空间常量:NAMESPACE_DNS、NAMESPACE_URL、NAMESPACE_OID和NAMESPACE_X500。对于每个使... 查看详情

python的uuid

...算法,所以python的uuid模块中没有uuid2这个方法。uuid.uuid3(namespace,name)  通过计算一个命名空间和名字的md5散列值来给出一个uuid,所以可以保证命名空间中的不同名字具有不同的uuid,但是相同的名字就是相同的uuid了。【感谢评... 查看详情

实现协议的 Python 泛型类型

...间】:2022-01-2122:13:25【问题描述】:对象A、B...具有属性namespace,我有一个函数可以通过namespace属性的特定值集过滤此类对象列表:T=TypeVar(\'T\')deffilter(seq:list[T],namespace_values:set[str])-> 查看详情

我们为什么会删除不了集群的namespace?(代码片段)

...我们的预想。背景今天我们讨论的这个问题,跟K8s集群的Namespace有关。Namespace是K8s集群资源的“收纳”机制。我们可以把相关的资源“收纳”到同一个Namespace里,以避免不相关资源之间不必要的影响。Namespace本身也是一种资源。... 查看详情

我们为什么会删除不了集群的namespace?(代码片段)

...我们的预想。背景今天我们讨论的这个问题,跟K8s集群的Namespace有关。Namespace是K8s集群资源的“收纳”机制。我们可以把相关的资源“收纳”到同一个Namespace里,以避免不相关资源之间不必要的影响。Namespace本身也是一种资源。... 查看详情

docker容器相关技术

Docker依赖的Linux内核特性Namespaces命名空间Controlgroups(cgroups)控制组理解这两个特性,能够更好的帮助我们理解docker的资源分配和管理Namespaces命名空间  很多编程语言都包含有命名空间的概念,可以认为命名空间是一种封装的概... 查看详情

名称空间(namespaces)(转)

大致来说,命名空间只是将名称映射到对象的容器。正如你可能已经听到的,Python中的所有内容-字符串,列表,词典,函数,类等都是一个对象。这样的“名称与对象”的映射使我们能够通过分配给它的名称访问对象。例... 查看详情

解构委托事件--我对他们本质的理解

...,所以定义委托和定义类一样,可以在命名空间下定义;namespace_06委托的理解{publicdelegatevoidMyDeleget();//第一一个委托publicclassMyClass{};//第一个类}  2、委托可以看成是一个特殊的集合,所以委托也可以在类的内部定义: publi... 查看详情

django2.x路由兼容include模块书写规范(尴尬的namespace)

在使用以往框架的项目路由urls文件时   urlpatterns=[   url(r‘^user/‘,include(‘user.urls‘,namespace=‘user‘)),   url(r‘^‘,include(‘goods.urls‘,namespace=‘goods‘)),]错误信息:  查看详情