Python和Singleton (单件)模式
我知道的一种在
python
中
Singleton mode
的实现如下:
class Foo: pass
def
instance():
global inst
try:
inst
except:
inst =
Foo
()
return inst
该实现的优点就是简单和直观,但缺点也同样明显:
需要客户代码显式知道一个叫
instance()
的方法来创建该类的对象;
在并发环境下这种实现并不可靠;
第
2
点是相当严重的一个缺陷,如果你用了上面的代码,那只能祈祷不要有
1
个以上的实例出现(虽然几率较低,但还是有可能),否则就会出现稀奇古怪的问题。
一个稍微好些实现如下:
class
Singleton(object):
objs
= {}
def __new__(cls, *args, **kv):
if cls in cls.objs:
return cls.objs[cls]
cls.objs[cls] = object.__new__(cls)
这个实现解决了第一个缺点,那些只需要一个实例的类想实现
Singleton mode
,只要从
Singleton
类继承即可,无论在代码的哪里实例化该类,都只存在该类的一个实例。
为了解决第
2
个缺点,一个进化的版本出现了,如下:
class
Singleton(object):
objs
= {}
objs_locker =
threading.Lock()
def __new__(cls, *args, **kv):
if cls in cls.objs:
return cls.objs[cls]
cls.objs_locker.acquire()
try:
if cls in cls.objs: ## double check
locking
return cls.objs[cls]
&nb
相关文档:
一、如何能在命令行模式下运行Python命令?
为了在命令行模式下运行Python命令,需要将python.exe所在的目录附加到PATH这个环境变量中。
二、如何使Python解释器能直接import默认安装路径以外的第三方模块?
为了能import默认安装路径以外的第三方的模块(如自己写的模块),需要新建PYTHONPATH环境变量,环境变量的值设 ......
不多说了,直接看代码吧!
import os
path = 'e:/Download/'
kzm = []
kzmTemp = set()
kzmTemp2 = []
dict = {}
for root,dirs,files in os.walk(path):
for file in files:
ext = os.path.splitext(file)[1][1:]
  ......
字典(Dictionary)是一种映射结构的数据类型,由无序的“键-值对”组成。字典的键必须是不可改变的类型,如:字符串,数字,tuple;值可
以为任何python数据类型。
1、新建字典
>>> dict1={}
#建立一个空字典
>>> type(dict1)
<ty ......
前几天看到了一行求1000的阶乘的Python代码:
print
reduce
(
lambda
x
,
y
:
x
*
y
,
range
(
1
,
1001
))
一下子被python代码的精简
与紧凑所折服,故对代码进行了简单的分析。
reduce与range都是Python的内置函数。
range(1,10 ......