范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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

  在本文中,我将我的一些笔记变成了 20 个面试问题,涵盖了数据结构、核心编程概念和 Python 最佳实践。
  希望你能完成其中的一些并重温你的 Python 技能。
  事不宜迟,让我们直接进入。 1. 列表和元组有什么区别?你应该什么时候使用哪一个?
  列表是可变数据结构,而元组是不可变数据结构。
  Python 中的可变对象具有更改其值的能力。
  列表是动态的:你可以向其中添加项目或覆盖和删除现有项目。
  元组是固定大小的:它们没有方法 append  或 extend  方法。你也不能从中删除项目。
  元组和列表都支持索引并允许使用 in  运算符检查其中的现有元素。
  → 在某些情况下,我认为元组可能有用。 如果你声明一个你知道永远不会更改的项目集合,或者你将只循环而不更改其值,请使用元组。 如果你寻找性能,元组比列表更快,因为它们是只读结构。如果你不需要写操作,请考虑使用元组。 如果你想防止意外写入不需要更改的数据,元组可以使你的代码更安全。
  这是一个代码示例,显示了元组与列表的不同之处。 >>> numbers = [1, 2, 3, 4, 5] >>> numbers[1] = 100 >>> print(numbers) [1, 100, 3, 4, 5]  >>> names = ("john", "joe", "alice") >>> names[0] = "bob") --------------------------------------------------------------------------- TypeError                                 Traceback (most recent call last)  in  ----> 1 names[0] = "bob"  TypeError: "tuple" object does not support item assignment2 — 多处理和多线程有什么区别?你应该什么时候使用哪个?
  多处理和多线程是旨在加快代码速度的编程范例。
  当你使用多处理时,你可以在进程上并行计算。进程是独立的,不相互通信:它们不共享相同的内存区域,并且相互之间有严格的隔离。在应用方面,多处理适用于 CPU 密集型工作负载。但是,它确实具有与进程数量成正比的大量内存占用。
  另一方面,在多线程应用程序中,线程存在于单个进程中。因此,它们共享相同的内存区域:它们可以修改相同的变量并且可以相互干扰。虽然进程是严格并行执行的,但在 Python 中的给定时间点只执行一个线程,这是由于全局解释器锁 (  GIL )。多线程适用于受 IO 限制的应用程序,例如网页抓取或从数据库中获取数据。
  → 如果你想了解有关多线程和多处理的更多信息,我建议你阅读我之前关于多进程跟线程的文章关于多线程你知道多少呢?,该文章全面介绍了这两个概念。 3 — 模块、包和库之间有什么区别?
  模块只是一个 Python 文件,旨在导入脚本或其他模块。它包含函数、类和全局变量。
  包是模块的集合,它们在文件夹中组合在一起以提供一致的功能。包可以像模块一样被导入。它们通常有一个 __init__.py  文件告诉 Python 解释器按原样处理它们。
  库是包的集合。 4 — python 中的多线程有什么问题?
  全局解释器锁(或 GIL)可防止 Python 解释器同时执行多个线程。简而言之,GIL 强制在 Python 中的任何时间点只执行一个线程。
  这代表了依赖多线程代码的 CPU 密集型应用程序的一个很大的性能瓶颈。 5 — 什么是装饰器?你能描述一下装饰器值得使用的情况吗?
  装饰器是一个接收函数作为输入并返回函数作为输出的函数。装饰器的目标是在不改变其核心机制的情况下扩展输入函数的行为。
  使用装饰器还可以防止你重复自己。它迫使你编写一次通用代码,然后将其用于需要它的每个功能。
  装饰器大放异彩的典型用例是 日志记录 。
  例如,想象一下,你希望将传递给程序中调用的每个函数的所有参数值记录到终端。你可以遍历每个函数定义并将其写下来,或者你可以只编写一个装饰器来执行此日志记录任务并将其应用于所有需要它的函数。
  将装饰器应用于函数只需在该函数的定义上方添加一行即可。 #没有装饰器 def my_awesome_function():           # 做一些很棒的事情   # 带有装饰器   @my_awesome_decorator  def my_awesome_function():          # 做更棒的事情
  下面是一个代码示例,它创建了一个名为的装饰器,该装饰器 log  记录了传递给函数的参数的值。 import logging   logging.basicConfig(     format="%(asctime)s [%(levelname)s] %(name)s - %(message)s",     level=logging.INFO,     datefmt="%Y-%m-%d %H:%M:%S",     stream=sys.stdout, ) logger = logging.getLogger("notebook")  def log(func):     def wrapper(*args, **kwargs):         output = func(*args, **kwargs)         msg = f"{func.__name__} was run with the following args: {args} and the following kwargs {kwargs}"         logger.info(msg)         return output     return wrapper   @log def print_args(*args, **kwargs):     print(args)     print(kwargs)   >>> print_args(10, a=2, b="test") (10,) {"a": 2, "b": "test"} 2022-03-06 18:07:05,248 - notebook - INFO - print_args was run with the following args: (10,) and the following kwargs {"a": 2, "b": "test"}  >>> print_args(10, 100, a=2, b="test") (10, 100) {"a": 2, "b": "test"} 2022-03-06 18:07:05,562 - notebook - INFO - print_args was run with the following args: (10, 100) and the following kwargs {"a": 2, "b": "test"}
  装饰器还可以用于其他目的,例如计时功能、验证输入数据、执行访问控制和身份验证、缓存等。 6 — 如何正确地将数据写入文件?否则会出什么问题?
  使用上下文管理器是关键。
  当你使用 open  没有上下文管理器的语句并且在关闭文件之前发生一些异常时(关闭文件是你在以这种方式打开文件时必须记住的事情)可能会发生内存问题并且文件可能会在此过程中损坏。
  当你 with  用来打开一个文件并且发生异常时,Python 保证该文件是关闭的。 d = {"foo": 1}  # bad practice   f = open("./data.csv", "wb") f.write("some data")  v = d["bar"] # KeyError # f.close() never executes which leads to memory issues  f.close()  # good practice  with open("./data.csv", "wb") as f:     f.write("some data")     v = d["bar"] # python still executes f.close() even if the KeyError exception occurs7 — 函数参数是按引用传递还是按值传递?
  在 Python 中,所有函数参数都是通过引用传递的:这意味着如果将参数传递给函数,则函数将获得对同一对象的引用。
  如果对象是可变的并且函数改变了它,则参数将在函数的外部范围内发生变异。让我们看一个例子: >>> def append_number(numbers):         numbers.append(5)  >>> numbers = [1, 2, 3, 4] >>> print(f"before: {numbers}" [1, 2, 3, 4]  >>> append_number(numbers) >>> numbers [1, 2, 3, 4, 5]8 — 如何覆盖对象的打印方式?
  使用 the __str__  和 __repr__  dunder 方法。
  这是一个示例,它演示了 Person 类中的实例在打印到控制台时如何被很好地格式化。 class Person:     def __init__(self, first_name, last_name, age):         self.first_name = first_name         self.last_name = last_name         self.age = age      def __str__(self):         return f"{self.first_name} {self.last_name} ({self.age})" 				     def __repr__(self):         return f"{self.first_name} {self.last_name} ({self.age})" 	 >>> person = Person("John", "Doe", 30) # thanks to __str__ John Doe (30)  >>> person # thanks to __repr__ John Doe (30)9 — 编写一个计算整数 n 阶乘的函数
  递归是关键 def factorial(n):     if n == 0:         return 1     else:         return n * factorial(n-1)10 — is 和 == 运算符有什么区别?
  ==  是一个测试相等性的运算符,而 is  是一个测试身份的运算符。
  两个对象可以具有相同的值,但不一定相同(即具有相同的内存地址)。
  请记住,这 a is b  是 id(a) == id(b)  . 11 — 什么时候不应该使用 assert 语句?
  assert  语句对于内部测试和完整性检查很有用。
  但是,它不应该用于执行数据验证或错误处理,因为出于性能原因,它通常在生产代码中被禁用。
  想象一下,如果你使用断言检查管理员权限:这可能会在生产中引入很大的安全漏洞。
  assert  你可以抛出自定义错误,而不是使用该语句。 # Dangerous code!  def delete_product(user, product_id):     assert user.is_admin()     user.delete_product(product_id)  # Handle this properly by raising an error  def delete_product(user, product_id):     if not user.is_admin():         raise AuthError("User must have admin privileges")     else:         user.delete_product(product_id)12 — 什么是 Python 生成器?
  Python 生成器是一个生成一系列项目的函数。
  生成器看起来像典型的函数,但它们的行为是不同的。对于初学者,不使用return语句,而是使用 yield  语句。
  然后,调用生成器函数不会运行该函数:它只会创建一个生成器对象。生成器的代码仅在 next  函数应用于生成器对象或生成器被迭代时执行(在这种情况下, next  函数被隐式调用)
  在生成器对象上调用函数的次数 next  等于 yield  在生成器函数中调用语句的次数。
  你可以使用 for 循环或生成器表达式定义生成器。 >>> def repeat(n, message):         for _ in range(n):             yield message	  repeat_hello_five_times = repeat(5, hello)  >>> for message in repeat_hello_five_times:         print(message)  "hello" "hello" "hello" "hello" "hello"    >>> repeat_hello_five_time = ("hello" for _ in range(5)) >>> repeat_hello_five_times  at 0x7fb64f2362d0>  >>> for message in repeat_hello_five_times:         print(message)  "hello" "hello" "hello" "hello" "hello" 13 — 类方法和静态方法有什么区别?什么时候应该使用哪个?
  静态方法是一种对调用它的类或实例有任何了解的方法。这是一种逻辑上属于该类但没有隐式参数的方法。
  可以在类或其任何实例上调用静态方法。
  类方法是传递给调用它的类的方法,就像 self  传递给类中的其他实例方法一样。 类方法的强制参数不是类实例:它实际上是类本身。
  类方法的一个典型用例是提供另一种构造实例的方法:执行此操作的类方法称为 类的工厂 。
  这是一个使用类方法的 Employee 类,该类方法创建实例的方式与类的主构造函数略有不同。 class Employee(object):     def __init__(self, first_name, last_name):         self.first_name = first_name         self.last_name = last_nale      @classmethod     def from_string(cls, name_str):         first_name, last_name = map(str, name_str.split(" "))         employee = cls(first_name, last_name)         return employee  ahmed = 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 10 bob 16 alice 20
  该 enumerate  函数允许循环遍历一个可迭代对象并同时访问正在运行的索引和项目。 >>> names = ["john", "bob", "alice"] >>> for index, name in enumerate(names):         print(index, name) 0 john 1 bob 2 alice15 — 你会如何在给定的函数中使用 *args 和 **kwargs?
  *args 和 **kwargs 通过接受可变数量的参数使 Python 函数更加灵活。 *args 在列表中传递可变数量的非关键字参数 **kwargs 在字典中传递可变数量的关键字参数
  这是一个函数示例,该函数采用可变数量的关键字参数,这些参数收集在名为的字典中 data  (请注意,它不需要命名 kwargs  )
  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  语句终止包含它的循环。程序立即移动到循环外部范围内的代码段。
  另一方面,该 continue  语句跳过当前迭代的其余代码并移至下一个迭代。
  18 - 如何防止函数被调用不必要的时间?
  使用缓存。
  如果与给定输入关联的输出在一段时间内没有变化,则使用缓存对函数有意义。
  一个典型的场景是查询一个 web 服务器:如果你第一次查询一个 URL,并且你知道响应不会改变,你可以缓存结果。 from cachetools import cached, TTLCache  cache = TTLCache(maxsize=100, ttl=86400)  @cached(cache) def extract_article_content(url):     response = requests.get(url)     content = response.content     return content19 — 给出一些 PEP8 指南每个缩进级别使用 4 个空格。 进口应按以下顺序分组: 标准库导入。 相关第三方进口。 本地应用程序/库特定的导入。 函数名和变量名应为小写并用下划线分隔 类名使用 CapWords 约定。 20 — 如何使用具有 2GB RAM 的计算机在 Python 中读取 8GB 文件?
  此解决方案适用于任何大型(甚至更大)文件。
  当你打开文件时,你需要做的就是将文件对象用作迭代器:在循环此文件对象时,你将一次获取一行,并且前面的行将从内存中清除(即它们是垃圾收集)。
  这样,文件将永远不会完全加载到内存中。 with open("./large_dataset.txt") as input_file:     for line in input_file:         process_line(line)感谢阅读
  这是我在面试中经常看到的一些问题的概述。我希望你从文章中学到了一些东西。20 个 Python 面试题来挑战你的知识

6000万欧元!阿森纳向顿涅茨克矿工提出官方报价据报道,阿森纳已经向顿涅茨克矿工提出了6000万欧元的官方报价,试图签下他们的边锋穆德雷克。这位乌克兰国脚最近几个月引起了轰动,他本赛季出场15次,打进8球,助攻7次。他在欧冠中给西汉姆联vs莱切斯特城托特纳姆的总资产接近六亿八千万欧,排在联赛第六位,比阿斯顿维拉的四亿七千万欧要低得多。托特纳姆热刺目前在联赛中排名第四,以8胜2平4负,领先阿森纳8分。热刺最近4轮连输三场,32伯意大利拟再花91亿欧元缓解能源危机新华社北京11月12日电意大利政府10日批准支出总额91亿欧元的一揽子计划,以缓解能源价格飙升给民众和企业带来的负担。据意大利经济与财政部在当天内阁会议后发表的声明,91亿欧元中超总身价达12。6亿欧元英格兰队公布世界杯名单京报体育记者陈嘉堃伦敦时间11月10日,英格兰队公布了征战卡塔尔世界杯的26人名单,贝林厄姆是唯一效力国外俱乐部的球员,刚刚伤愈复出的菲利普斯入选,曼联边锋桑乔落选。根据德国知名足自律,从今往后,我要低配生活头条创作挑战赛自律从今往后,我都要低配生活,高配灵魂。30岁以前,我一直都是一个享乐主义者,喜欢买各种各样的东西。那时我以为,好的生活就是拥有很多的东西。于是,物质欲望就像一个无底中国运动鞋服品牌深度报告安踏VS李宁2021年以来,中国运动鞋服市场竞争格局发生了较大变化。根据Euromonitor数据,耐克中国的市场占有率由2020年的25。6下降至2021年的25。2阿迪达斯中国由17。4下天猫双十一助力国货品牌百年老字号,国人购买力依然让人欣喜硬核!永远不能低估我们动一动手指,就能随时创造N个亿的奇迹。双十一再次证明中国消费市场的潜力!尽管受外围经济影响,一些企业撤出中国到外发展,但还是能保持经济向好,中国市场到底香不香国际名模詹娜身穿十万高端轻奢款貂皮大衣亮相,贵妇气质是一绝大家好我是书香,今天是2022年11月12日国际名模众所周知肯豆詹娜是卡戴珊家族的金四妹,只要一说起卡戴珊家族,大家都会感慨卡戴珊家族的女人们为了财富交钱和地位身份,最爱和NBA篮如何成为一个狠人如何成为一个狠人1告诉你一个残酷的事实人际交往中,如果你表现得紧张,胆怯,卑微,谄媚,那你将会遭受到这世间最深的恶意。所以你面对他人时要有着强硬的态度强悍的实力!2说话声音要洪亮,生孩子后,女性才真正成为女人生孩子会给女性带来哪些改变很多女性都不愿意生孩子。为什么?因为,生孩子身材可能走样因为,生孩子可能导致生命危险因为,生孩子可能导致盆底肌松弛,影响性生活和可能造成漏尿因为,生了小孩为什么女厕所总是排长队,她们上厕所时在干嘛?不只是生理原因人有三急,在旅游景区车站商场学校等人流大的公共场所,女厕所和男厕所总是有着两种截然不同的景象男厕所冷冷清清,男士们上厕所总是可以随进随出,画面相当和谐女厕所却经常人满为患,排着长长
上海迪士尼乐园今日开园时间改至10点,特选商品抽签将暂停9月15日上午8时,上海迪士尼度假区发布消息称,随着台风梅花在上海强度的减弱并根据目前的天气预报,将于今日(9月15日)恢复运营。记者观察到,今日乐园开园时间为早上1000,比平日无缘13连胜,三镇仍是赢家少赛一场领先4分,加冕只剩时间问题中超第18轮的较量中,武汉三镇在客场凭借单外援11战平了卫冕冠军山东泰山,此役过后,三镇少赛一场的情况下继续领先泰山4分,而且次循环还要回到主场面对山东泰山,创造凯泽斯劳滕神话基本吃鸡新版本最牛优化,个别嚣张气焰被打压!上线时间提前看务实不浮夸!我是你们的情报小能手,微笑十倍镜。随着体验服的关服,吃鸡手游和平精英即将迎来全新的天空之旅版本,除去测试的新玩法以外,新版本中还隐藏着多个优化!众所周知,和平精英除去在一诚长老白天吃饭,晚上睡倒这么平凡的道理,你偏偏远处求天上地下的蜷飞蠕动,花鸟鱼虫都有它们自己的成长生存活动的规律。就像竹子树木,他们总是想天上长春天到了就要采茶叶,以春天的芽头为最好,过了春天到夏天就不太好了。这就是自然规律。没有了朋友圈文案句子成年人的愿望能睡个好觉,身体别出毛病别想太多,好好生活,也许日子过着过着就会有答案,努力走着走着就会有温柔的着落。把生活的素质提高,今天活得比昨天快乐,明天又要比今天快乐,就此而已,这就是人生的意义,活下去的真谛。蔡中药抗癌的目的很简单改善症状改变癌体质防止复发转移很多癌症患者对于为何吃中药有很多的疑问你光说吃中药,那么中医药到底是如何抗癌的?优势在哪里?今天就从六个角度和大家详细聊聊。优势1从治人的病到治病的人过去医学的治疗就是看人的病,一我真的有吃中药茶改善了睡眠的经历我也是睡眠不好,睡不着喝点酒就会睡一下。其实,你要接受现在的症状,不要着急。如果有时间希望你培养个爱好,不要太费脑力的那种,花盆种蔬菜,这样会更好。这个我不是吹嘘中医中药啊,但是,勒布朗詹姆斯与妻子萨凡娜庆祝周年纪念,发文称赞妻子漂亮勒布朗詹姆斯在NBA已经19个赛季了,202223赛季将是他职业生涯的第20个赛季,这些年他一直保持着频繁的锻炼,让自己一直处于顶尖的水准。这些都是因为勒布朗詹姆斯还想与他的儿子布队报拉卡泽特几个月来一直受声带息肉影响,即将接受手术直播吧9月16日讯根据法国媒体队报的报道,里昂前锋拉卡泽特将会在接下来的国际比赛日中接受声带手术,恢复期只需要几天。队报透露,从今年夏天开始,拉卡泽特就受到了声带息肉的困扰,出现失肾气不足更容易上火吗?需补泻温清的哪一种?老中医有话说晚上睡觉多梦盗汗,早上醒来干咳无痰,吃过午饭手脚心热,到了下午昏昏欲睡。如果一个人身上同时出现这些上火的症状,八成是肾火,而且是肾虚上火,尤其可能是肾阴虚上火。不光阳盛上火,阴虚也小兄弟像棉花糖一样软软的,中医然后一方恢复年少不知事首先就会伤及肾精,肾经亏虚了肾气就会虚弱,肾气不足自然精关不守,而肾精虚弱最典型的特点就是早衰,提前进入到了老年人的状态,五脏六腑都会衰微,所以我们不仅仅要补看得见丢失的