(一)、如何反序的迭代一个序列?
# 如果是一个list,最来的解决方案是tempList = [1,2,3,4]
tempList.reverse()
for x in tempList:print x
# 如果不是一个list,最通用的解决方案
print '\n- - - - - - - - - - - -'
tempTuple = (1,2,3,4)
for i in range(len(tempTuple)-1,-1,-1):print tempTuple[i]
(二)、 如何用Python来进行查询和替换一个文本字符串?
# Python 中的 replace() 可以进行字符串替换
tempStr = "Hello java, Hello Python , Use JavaScript"
print tempStr.replace("Hello","Use")# Python 中的 sub() 可以用来查找并替换字符串, sub() 是使用正则来匹配
import re
rex = r'(Hello|Use)'
print re.sub(rex, 'Bye', tempStr)
(三)、使用Python实现单例模式。
- 所谓单例就是一个类从始至终只能产生一个实例。
- 方法一:使用new方法
- 在new方法中把类实例绑定到类变量_instance上,如果cls._instance为None表示该类还没有实例化过,实例化该类并返回。如果cls_instance不为None表示该类已实例化,直接返回cls_instance
- 方法二:使用装饰器(decorator)
- 方法三:使用metaclass(元类)
- 方法四:共享属性
- 所谓单例就是所有的引用(实例,对象)拥有相同的属性和方法,同一个类的实例天生都会有相同的方法,那我们只需要保证同一个类所产生的实例都具有相同的属性。所有实例共享属性最简单直接的方法就是共享dict属性指向。
- 方法五:Python模板
方法一 使用new方法
class SingleTon(object):def __new__(cls, *args, **kwargs):if not hasattr(cls,'_instance'):cls._instance = object.__new__(cls,*args,**kwargs)return cls._instanceclass TestClass(SingleTon):a = 1test1 = TestClass()
test2 = TestClass()print test1.a, test2.a
print id(test1),id(test2)
方法二:使用装饰器(decorator)
def SingleTon(cls, *args, **kwargs):instances = {}def _singleton():if cls not in instances:instances[cls] = cls(*args, **kwargs)return instances[cls]return _singleton@SingleTon
class TestClass(object):a = 1test1 = TestClass()
test2 = TestClass()print test1.a ,test2.a
test1.a = 2
print test1.a ,test2.a
print id(test1),id(test2)
class SingleTon(type):def __init__(cls,name,bases,dict):super(SingleTon,cls).__init__(name,bases,dict)cls._instance = Nonedef __call__(cls, *args, **kwargs):if cls._instance is None:cls._instance = super(SingleTon,cls).__call__(*args, **kwargs)return cls._instanceclass TestClass(object):__metaclass__ = SingleTontest1 = TestClass()
test2 = TestClass()test1.a = 1
print test1.a ,test2.a
test1.a = 2
print test1.a ,test2.a
print id(test1),id(test2)
方法四:共享属性
class SingleTon(object):_state = {}def __new__(cls, *args, **kwargs):obj = object.__new__(cls, *args, **kwargs)obj.__dict__ = cls._statereturn objclass TestClass(SingleTon):a = 1print test1.a ,test2.a
test1.a = 2
print test1.a ,test2.a
print id(test1),id(test2)
方法五:Python模板
#
class My_SingleTon(object):def foo(self):pass
my_sign = My_SingleTon()my_sign.foo()