20 个 Python 面试题来挑战你的知识( 三 )


类方法是传递给调用它的类的方法,就像self传递给类中的其他实例方法一样 。类方法的强制参数不是类实例:它实际上是类本身 。
类方法的一个典型用例是提供另一种构造实例的方法:执行此操作的类方法称为类的工厂 。
这是一个使用类方法的 Employee 类,该类方法创建实例的方式与类的主构造函数略有不同 。
class Employee(object):def __init__(self, first_name, last_name):self.first_name = first_nameself.last_name = last_nale@classmethoddef from_string(cls, name_str):first_name, last_name = map(str, name_str.split(' '))employee = cls(first_name, last_name)return employeeahmed = Employee.from_string('Ahmed Besbes')14 — 举一个例子说明你如何使用 zip 和枚举
该zip函数将多个迭代作为输入并将它们聚合到一个元组中 。例如,如果你想同时遍历两个列表,这可能很有用 。
>>> names = ["john", "bob", "alice"]>>> ages = [10, 16, 20]>>> for name, age in zip(names, ages):print(name, age)john 10bob 16alice 20
该enumerate函数允许循环遍历一个可迭代对象并同时访问正在运行的索引和项目 。
>>> names = ["john", "bob", "alice"]>>> for index, name in enumerate(names):print(index, name)0 john1 bob2 alice15 — 你会如何在给定的函数中使用 *args 和 **kwargs?
*args 和 **kwargs 通过接受可变数量的参数使 Python 函数更加灵活 。
 

  • *args 在列表中传递可变数量的非关键字参数
  • **kwargs 在字典中传递可变数量的关键字参数
 
这是一个函数示例,该函数采用可变数量的关键字参数,这些参数收集在名为的字典中data(请注意,它不需要命名kwargs)
20 个 Python 面试题来挑战你的知识

文章插图
 
16 — 给出一个使用 map 的函数式编程示例>>> numbers = [1, 2, 3, 4, 5]>>> numbers_times_2 = list(map(lambda n: n * 2, numbers))>>> numbers_times_2[2, 4, 6, 8, 10]17 — continue 和 break 语句有什么区别
该break语句终止包含它的循环 。程序立即移动到循环外部范围内的代码段 。
20 个 Python 面试题来挑战你的知识

文章插图
 
另一方面,该continue语句跳过当前迭代的其余代码并移至下一个迭代 。
20 个 Python 面试题来挑战你的知识

文章插图
 
18 - 如何防止函数被调用不必要的时间?
使用缓存 。
如果与给定输入关联的输出在一段时间内没有变化,则使用缓存对函数有意义 。
一个典型的场景是查询一个 web 服务器:如果你第一次查询一个 URL,并且你知道响应不会改变,你可以缓存结果 。
from cachetools import cached, TTLCachecache = TTLCache(maxsize=100, ttl=86400)@cached(cache)def extract_article_content(url):response = requests.get(url)content = response.contentreturn content19 — 给出一些 PEP8 指南
  • 每个缩进级别使用 4 个空格 。
  • 进口应按以下顺序分组:
  1. 标准库导入 。
  2. 相关第三方进口 。
  3. 本地应用程序/库特定的导入 。
  • 函数名和变量名应为小写并用下划线分隔
  • 类名使用 Capwords 约定 。
20 — 如何使用具有 2GB RAM 的计算机在 Python 中读取 8GB 文件? 
此解决方案适用于任何大型(甚至更大)文件 。
当你打开文件时,你需要做的就是将文件对象用作迭代器:在循环此文件对象时,你将一次获取一行,并且前面的行将从内存中清除(即它们是垃圾收集) 。
这样,文件将永远不会完全加载到内存中 。
with open("./large_dataset.txt") as input_file:for line in input_file:process_line(line)感谢阅读
这是我在面试中经常看到的一些问题的概述 。我希望你从文章中学到了一些东西 。20 个 Python 面试题来挑战你的知识




推荐阅读