4

python笔记之命名空间总结

 2 years ago
source link: http://wwj718.github.io/post/%E6%8A%80%E6%9C%AF/learning-python-3/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

python笔记之命名空间总结

2014-01-08

这两天阅读github上一些项目源码时,发现运算符重载部分不够熟悉,于是又翻了一遍《learning python》。
这是第三遍阅读,第一次是初学python时,第二次是为了给学习django清除障碍。这本书真是难得的佳作,极其清晰明了的教学风格,读来就像小说般流畅,每次重读总有收获。
既然开始写博客了,就好好做好读书笔记吧,方便自己日后的查阅,也方便他人。

在python中,变量名的赋值场所极其重要,这完全决定了变量名所在的作用域或对象。
直接上代码吧,这个例子很好地对python的命名空间概念做了总结:

	#manynames.py
	#解释命名空间对象
	X = 11    			#global , X or manynames.X
	
	def f():				
		print X			

	def g():
		X = 22			# 函数本地作用域 
		print x

	class C:
		X = 33			# 类属性,C.X
		def m(self):
			X = 44		# 函数本地作用域
			self.X = 55	# 实例属性(instance.X)

从上到下,这里对X的赋值语句会产生:模块属性(11),本地变量(22),类属性(33),方法中的本地变量(44)以及实例属性(55)
这个例子把命名空间的几种情况集合起来了。
我们运行一下,就一目了然了:

# manynames.py ,接上面

if __name__=='__main__':
	print X		#11
	f()		#11
	g()		#22
	print X		#11
	
	obj = C()	
	print obj.X	#33

	obj.m()		
	print obj.X	#55
	print C.X	#33

	#print C.m.X[26]	#失败:只在函数内可见,只有当函数调用时,X才会存在与内存中
	#print f.X 	#失败:只在函数内可见

我们再来做个模块间读取变量的实验:

import manynames

X = 66
print X			#66
print manynames.X		#11

print manynames.f()	#11

manynames.f()打印的是manynames中的X而不是本文件中的X。
这里说明作用域总是由源代码中的赋值语句的位置决定的。

还有再说一点,就去吃饭啦~实际项目在,每个变量不应该用通样的变量名!!


Recommend

  • 35
    • www.cocoachina.com 5 years ago
    • Cache

    Swift中的命名空间

    命名空间namespace在C++、C#里面是一个常见概念,Swift中也引入了这样一个机制,下面来探索一下这个命名空间的来龙去脉。 一、为什么需要命名空间 简而言之一句话:为了避免命名的冲突 在开发中,尤其是在多模...

  • 31

    问题很关键 为了帮助大家思考数据需要能回答什么问题?在第一个例子里数据不能回答“在所有实例里每秒处理多少请求?”,但命名空间树可以。客户端库提供命名空间可以回答: 所有客户端生成的所有请求是多少? 另外一个...

  • 24
    • 微信 mp.weixin.qq.com 4 years ago
    • Cache

    HBase 命名空间 Namespace

    1. 简介 命名空间是表的逻辑分组,类似于关系数据库系统中的数据库。 这种抽象为多租户相关功能奠定了基础: 配额管理( HBASE-8410 ):

  • 27
    • guisu.blog.csdn.net 3 years ago
    • Cache

    k8s实践(5)k8s的命名空间Namespace

    1、什么是Namespace? 你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。 他们可以为您和您的团队提供组织,安全甚至性能方面的帮助! “default” Namespace...

  • 8
    • aimuke.github.io 3 years ago
    • Cache

    删除k8s中的命名空间

    删除k8s中的命名空间 kubernetes无法删除 namespace 提示 Terminating <a id="articleContentId"></a>...

  • 16

    Netflix 对于容器隔离性有着强烈需求,本文即介绍了他们技术团队在借助 Linux 用户命名空间以实现安全隔离性方面的探索。 之前在 Netflix 技术博客里也介绍过,

  • 2
    • chanjarster.github.io 2 years ago
    • Cache

    Linux命名空间一些笔记

    Linux命名空间一些笔记 容器使用了 Linux Namespace 技术,通过Namespace技术可以做到网络、PID、用户等等信息的隔离,因此就产生了容器。...

  • 0
    • zhajiman.github.io 2 years ago
    • Cache

    Python 系列:命名空间和作用域

    Python 系列:命名空间和作用域  2021-10-23  4063 words  p...

  • 6

    1. 面向对象的概念   1)类是一类抽象的事物,对象是一个具体的事物;用类创建对象的过程,称为实例化。   2)类就是一个模子,只知道在这个模子里有什么属性、什么方法,但是不知道这些属性、方法具体是什么...

  • 10

    C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字) ...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK