面试篇一

0 评论
/ /
1082 阅读
/
3652 字
12 2019-02

1、重新实现str.strip()

# -*-coding:utf8-*-

def rightStrip(tempStr, splitStr):
    """

    :param tempStr:
    :param splitStr:
    :return:
    """
    endindex = tempStr.rfind(splitStr)
    while endindex != -1 and endindex == len(tempStr) - 1:
        tempStr = tempStr[:endindex]
        endindex = tempStr.rfind(splitStr)
    return tempStr


def leftStrip(tempStr, splitStr):
    startindex = tempStr.find(splitStr)
    while startindex == 0:
        tempStr = tempStr[startindex + 1:]
        startindex = tempStr.find(splitStr)
    return tempStr


str = " H "
print(str)
print(leftStrip(str, ' '))
print(rightStrip(str, ' '))

print("1234567890".rfind("6"))

2、python super类的使用

# 阅读下面的代码,它的输出结果是什么?
class A(object):
    def __init__(self):
        print("enter A")
        super(A, self).__init__()  # new
        print("leave A")


class B(object):
    def __init__(self):
        print("enter B")
        super(B, self).__init__()  # new
        print("leave B")


class C(A):
    def __init__(self):
        print("enter C")
        super(C, self).__init__()
        print("leave C")


class D(A):
    def __init__(self):
        print("enter D")
        super(D, self).__init__()
        print("leave D")


class E(B, C):
    def __init__(self):
        print("enter E")
        super(E, self).__init__()  # change
        print("leave E")


class F(E, D):
    def __init__(self):
        print("enter F")
        super(F, self).__init__()  # change
        print("leave F")

f = F()


enter F
enter E
enter B
enter C
enter D
enter A
leave A
leave D
leave C
leave B
leave E
leave F

小结

  1. super并不是一个函数,是一个类名,形如super(B, self)事实上调用了super类的初始化函数,
       产生了一个super对象;
  2. super类的初始化函数并没有做什么特殊的操作,只是简单记录了类类型和具体实例;
  3. super(B, self).func的调用并不是用于调用当前类的父类的func函数;
  4. Python的多继承类是通过mro的方式来保证各个父类的函数被逐一调用,而且保证每个父类函数
       只调用一次(如果每个类都使用super);
  5. 混用super类和非绑定的函数是一个危险行为,这可能导致应该调用的父类函数没有调用或者一
       个父类函数被调用多次。

3、合并两个列表排除重复元素

    alist = ['a', 'b', 'c', 'd', 'e', 'f']
    blist = ['x', 'y', 'z', 'e', 'f']


    def merge_list(*args):
        s = set()
        for i in args:
            s = s.union(i)
        # print(s)
        return list(s)


    print merge_list(alist, blist)

4、打乱一个排好序的列表

 from random import shuffle

# python2写法
alist = range(10)
# python3 写法
alist = [i for i in range(10)]
print(alist)
shuffle(alist)
print(alist)