1、如何反向迭代一个序列?
#如果是一个list,最快的方法使用reverse
tempList = [1,2,3,4,5,6]
tempList.reverse()
for x in tempList:
print x
#如果不是list,需要手动重新排列
tempList = (1,2,3,4,5)
for i in range(len(tempList)-1, -1, -1):
print tempList[i]
2、如何查询和替换一个文本中的字符串?
#最简单的方法使用replace()
tmpstr = "hello you hello python are you ok"
print tmpstr.replace("you", "python")
#还可以使用正则,有个sub()
import re
rex = r'(hello|Use)'
print re.sub(rex, "Bye", tmpstr)
3、使用Python实现单列模式
方法一:可以使用__new__方法,在__new__方法中把类实例绑定到类变量_instance上,如果cls._instance为None表示该类没有实例化过,实例化该类并返回,如果cls._instance不为None表示该类已实例化,直接返回cls._instance.
class SingleTon(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = object.__new__(cls, *args, **kwargs)
return cls._instance
class TestClass(SingleTon):
a = 1
test1 = TestClass()
test2 = TestClass()
print test1.a, test2.a
test1.a = 2
print test1.a, test2.a
print id(test1), id(test2)
方法二:使用装饰器,建立过实例的就放到instances里面,下次简历的时候先检查里面有没有。
def SingleTon(cls, *args, **kwargs):
instances = {}
print instances
def _singleton():
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
print instances
return instances[cls]
return _singleton
#SingleTon
class LastClass(object):
a = 1
test1 = LastClass()
print test1.a
test2 = LastClass()
print test2.a
方法三:使用__metaclass__(元素)关于元类看看这个吧:http://blog.jobbole.com/21351/
class SingleTon(type):
def __init__(cls, name, bases, dict):
super(SingleTon, cls).__init__(name, bases, dict)
cls._instance is None
def __call__(cls, *args, **kwargs):
if cls.__instance is None:
cls._instance = super(SingTon, cls).__call__(*args, **kwargs)
return cls._instance
class TestClass(object):
__metaclass__ = SingleTon
test1 = TestClass()
test2 = TestClass()
test1.a = 2
print test1.a, test2.a
print id(test1), id(test2)
方法四:共享属性,所谓单列就是所有的引用(实例,对象)拥有相同的属性和方法,同一个类的实例天生都会有相同的方法,那我们只需要保证同一个类产生的实例具有相同的属性。所有的实例共享最简单直接的方法就是共享__dict__属性指向。
class SingleTon(object):
_state = {}
def __new__(cls, *args, **kwargs):
obj = object.__new__(cls, *args, **kwargs)
obj.__dict__ = cls._state
return obj
class TestClass(SingleTon):
a = 1
test1 = TestClass()
test2 = TestClass()
print test1.a, test2.a
test1.a = 2
print test1.a, test2.a
print id(test1), id(test2)
class My_Singleton(object):
def foo(self):
pass
#方法五:使用同一个模板
my_singleton = My_Sington()
from mysingleton import my_singleton
my_singleton.foo()