常见Python面试题——代码系列

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值