Python中的一些面试题(3)

发布时间:2019-09-14 09:48:49编辑:auto阅读(1705)

    怎么样在元组和列表间转换?

    list(tuple)
    tuple(list)

    如何对一个序列进行反转?

    #方法一:
    #如果是一个列表
    listdata = [1,3,4,5]
    listdata.reverse()
    #但是这方法有一个缺点就是直接修改了原来的list
    #可以先copy一个再反转
    copylist = listdata[:]
    copylist.reverse
    
    #方法二
    #如果不是列表的话
    sequence = "zhang"
    tmplist=list()
    for i in range(len(sequence)-1, -1, -1):
        tmplist.append(sequence[i])
    print ''.join(tmplist)
    
    #方法三
    listdata=[1,3,4]
    #python2.3以后才支持这种切片
    print listdata[::-1]
    
    #方法四
    class Rev(object):
        def __init__(self,seq):
            self.listdata = seq
        def __len__(self):
            return len(self.listdata)
        def __getitem__(self,i):
            return self.listdata[-(i+1)]
    
    for i in Rev([6,2,3,4,5]):
        print i



    怎么根据一个另外一个列表的值来对这个列表进行排序?

    list1 = [6,4,5,2]
    list2 = ['e','b','c','a']
    #zip函数接受一切可迭代的参数,并将其打包成元组
    pairs = zip(list1,list2)
    #注意:sort默认是对第一个值进行排序
    #这里是安装list1的值来对list2进行排序
    pairs.sort()
    result = [ x[1] for x in pairs ]



    什么是委托?

    是一种面向对象的设计模式,假如我想改变某个对象的一写方法的行为的话,可以创建一个类来实现对这个方法的委托,改变这个方法的一些行为。
    
    例子:改变文件对象的写入方法的行为
    class UpperOut:
            def __init__(self, outfile):
                    self.__outfile = outfile
            def write(self, s):
                    self.__outfile.write(s.upper())
            def __getattr__(self, name):
                    return getattr(self.__outfile, name)
    
    f = open('1.txt','a+')
    test = UpperOut(f)
    test.write('s')
    test.close()
    #通过类UpperOut重写了write实现了对文件对象的写方法的改变,
    #通过__getattr__来实现了对文件对象的其他属性的委托
    
    
    如何去调用超类(父类或者叫做基类)的方法?
    如果是经典类的话就直接使用父类名字.方法名(self,[par,...])
    如果是新式类的话就使用super(类名,self).父类方法
    经典类和新式类的区别就在于是否是继承与object元类的



    如何在python类中创建静态变量和静态方法?

    #方式一:
    class C(object):
            count = 0
            def __init__(self):
                    C.count = C.count + 1
            def getcount():
                    return C.count
            getcount = staticmethod(getcount)
    
    
    #其中count是静态变量,getcount是静态方法
    
    #方式二:
    class C(object):
            count = 0
            def __init__(self):
                    C.count = C.count + 1
            def getcount(cls):
                    return cls.count
            getcount = classmethod(getcount)




    怎么样删除一个文件?

     os.remove(filename) 
     os.unlink(filename)



    python怎么通过脚步来发送邮件?

    #下面的代表只能在linux下运行,借助linux上自带的mail server来发信
    import sys, smtplib
    fromaddr = raw_input("From: ")
    toaddrs = raw_input("To: ").split(',')
    print "Enter message, end with ^D:"
    msg = ''
    while 1:
            line = sys.stdin.readline()
            if not line:
                    break
            msg = msg + line
    # The actual mail send
    server = smtplib.SMTP('localhost')
    server.sendmail(fromaddr, toaddrs, msg)
    server.quit()



    python中生成随机数的函数?

    import random
    random.random()
    random.randint()


关键字