Python面试知识点

Python面试知识点,第1张

原文GitHub地址:https://github.com/kenwoodjw/python_interview_question,这篇是相关知识点的整理

有一个文件file.txt,我们定义了一个读取其的函数

def get_lines():
    with open('file.txt','rb') as f:
        return f.readlines()

if __name__ == '__main__':
    for e in get_lines():
        process(e) # 处理每一行数据

现在问题是这个文件大小为10G,但是我们的内存最大是4G,请问如何修改上面的gei_lines,使得上述程序可以满足约束运行。

def get_lines():
    l = []
    with open('file.txt','rb') as f:
      #限制每次读取的行数,减少时间开销
      data = f.readlines(60000)
    l.append(data)
    yield l

输入一个文件夹路径,返回这个文件夹中所包含的文件路径

def print_directory_contents(s_path):
    for s_child in os.listdir(s_path):
        s_child_path = os.path.join(s_path, s_child)
        # 如果是目录
        if os.path.isdir(s_child_path):
            # 递归的输出其包含的文件路径
            print_directory_contents(s_child_path)
        else:
            # 输出文件路径
            print(s_child_path)

输入一个日期,判断其是这一年中的第几天

def dayOfYear():
    year = int(input())
    month = int(input())
    day = int(input())
    date1 = datetime.date(year, month, day)
    date2 = datetime.date(year, 1, 1)
    return (date1 - date2).days + 1

将字典按照value进行排序

sorted(d.items(),key=lambda x:x[1])

利用生成式将字符串“k:1|k1:2|k2:3|k3:4”转换为字典

string = 'k:1|k1:2|k2:3|k3:4'
d = {k: int(v) for t in string.split('|') for k, v in (t.split(':'), )}
print(d)

用超出成员个数的index来获取某个列表的成员会导致IndexError。然而,用超过了成员个数的切片不会产生IndexError,而是仅仅返回一个空列表。

Python中内置的数据结构有哪些

:整型 int、 长整型 long(Python 3 没有)、浮点型 float、 复数 complex、字符串 str、 列表 list、 元组 tuple、字典 dict 、 集合 set

实现单例模式

# 实现单例模式
# 方法1
def singleton(cls):
    instances = {}
    def wrapper(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return wrapper
@singleton
class Foo(object):
    pass
foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2)  # True


# 方法2
class Singleton(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
        return cls._instance
class Foo(Singleton):
    pass
foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2)  # True


# 方法3
class Singleton(type):
    def __call__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super(Singleton, cls).__call__(*args, **kwargs)
        return cls._instance
# Python2
class Foo(object):
    __metaclass__ = Singleton
# Python3
class Foo(metaclass=Singleton):
    pass
foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2)  # True

获取所有指定类型的文件

# 获取所有指定类型的文件
# 方法1
def get_files(dir, suffix):
    res = []
    for root, dirs, files in os.walk(dir):
        for filename in files:
            name, suf = os.path.splitext(filename)
            if suf == suffix:
                res.append(os.path.join(root, filename))
    print(res)


# 方法2
def pick(obj, type):
    if obj.endswith(type):
        print(obj)
def scan_path(ph, type):
    file_list = os.listdir(ph)
    for obj in file_list:
        if os.path.isfile(obj):
            pick(obj, type)
        elif os.path.isdir(obj):
            scan_path(obj)

删除列表中大于5的数字

列表的切片会重新生成一个列表

a = [i for i in range(10)]
b = filter(lambda x: x > 5, a)
print(list(b))

用列表所有奇数构造新列表

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
res = [i for i in a if i % 2 == 1]
print(res)

用一行代码写1+2+3+10248

# 用一行代码写成1+2+3+10248
from functools import reduce

num = sum([1, 2, 3, 10248])
# 或者
num = reduce(lambda x, y: x + y, [1, 2, 3, 10248])

判断这一天是这一年中的第几天

targetDay = datetime.date(y, m, d)
dayCount = targetDay - datetime.date(targetDay.year - 1, 12, 31)
print("%s是 %s年的第%s天。" % (targetDay, y, dayCount.days))

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/915919.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存