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

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 面试题来挑战你的知识

世界上最暴利的赚钱方式是什么?是钱生钱,你不能不懂得暴利思维正文开始之前,先来看个故事犹太人,是世界上最富有的民族,全世界最有钱的企业家中,犹太人占到一半。美国众多富豪家族中,犹太裔占了40。除了富甲天下之外,犹太人也被称为世界上最聪明最有光大银行2022年中报点评股东分析根据中报披露,光大银行的股东总数从3月底的22。24万户增加到半年报的22。47万户,增加了0。23万户。前十大股东中,沪股通第二季度增持约3900万股,其他股东的持股数不中国有多少家庭,能够一次性拿出20万现金?受到传统观念的影响,中国人一直都是很喜欢存钱的。自改革开放以来,随着经济水平的发展,人民的生活水平也在不断地提高。尤其是现在,中国已经全面建成小康社会了,接下来我们就是要,向着共同张朝阳17岁就读清华93年获麻省理工学院博士,如今凭物理课又火了在互联网界几乎没有人不知道张朝阳,提到张朝阳堪称我国互联网创业的开山派人物,1998年在那个中国互联网还处于萌芽发展时期,张朝阳就率先凭着自己敏锐的创业嗅觉创办了搜狐,在80后和9开盘A股三大指数集体低开沪指跌0。33,比亚迪跌超6跌破300元关口金融界8月31日消息今日A股三大指数集体低开,沪指跌0。33,报3216。53点,深成指跌0。51,报11909。31点,创业板指跌0。61,报2596。16点盘面上,卫星通信家用内外棉花价差继续扩大,国内棉花库存增量下企业应规避价格风险随着新棉收获期的临近,全球棉花产量前景开始转差,北半球和南半球的新棉供应都出现了不同程度的问题。在超强干旱还未结束之时,美国东部地区又遭遇强降雨,给正在吐絮的新棉带来新的威胁。外界美网爆大冷!中国金花2号种子02对手排名仅181位令人唏嘘2022年美网公开赛展开资格赛第二轮,女单方面,一场焦点大战,中国金花朱琳对阵维克里,最终,朱琳连输两盘02完败出局,爆出大冷门,真是令人唏嘘啊。朱琳是这次的资格赛2号种子,首轮她全世界最大的一个岛屿是中国第一大岛的60倍,人口稀少仅8万我们的地球,神秘而却又美丽,有壮丽的山河,也有美丽的湖泊,高山湖泊海洋陆地草原沙漠这些都组成了我们这个美丽的星球,可以说地球是大自然对人类最好的馈赠,也孕育人类的母亲,我们应该热爱中国历史名亭众多,你觉得哪一个值得一去?爱晚亭爱晚亭位于湖南省长沙市湘江西岸岳麓山清风峡中,始建于清乾隆五十七年(1792年),为清代岳麓书院山长罗典创建,原名红叶亭,后由湖广总督毕沅,据停车坐爱枫林晚,霜叶红于二月花的八年来首亏!中邮保险投资端失利巨亏近18亿元,引入友邦后合作转型效果如何?记者苗艺伟在寿险行业面临百万代理人脱落从而更加倚重银保渠道的时候,中邮保险却想要摆脱长期靠邮政银行卖理财的市场印象。今年1月,银保监会批准了关于中邮保险变更注册资本及股东变更,批准未来两年,有存款的人会担惊受怕?这5类人要注意未来两年,有存款的人会担惊受怕?这5类人要注意!从2020年开始,疫情反复,从2021年下半年开始,房价进入普跌阶段,2020年购房的人,几乎被套牢,据网友和专家分析,手握现金,银
34所分数线公布!最高涨40分,最多降44分1113日多所自划线院校公布复试分数线最高涨40分,最多降44分目前已公布复试分数线的自划线院校有北京大学清华大学浙江大学中山大学吉林大学华南理工大学同济大学等。20222023年评论区丨学业与创业,并非是道选择题本期话题大学四年赚百万,到底是不务正业还是人生赢家?近日,网友王先生晒出自己就读四川大学时赚一百多万的经历,他4年间靠卖零食开发买卖旧书平台提供学霸付费辅导服务商业辅导服务,并拿到河北强保障准施策双向发力促就业河北省春季首场大型招聘会现场。记者周亚彬摄就业是民生之本,一头连着发展大计,一头连着百姓福祉。今年政府工作报告提出,要实现城镇新增就业1200万人左右,城镇调查失业率5。5左右的目互联网医疗服务能否纳入医保?国家医保局回应针对将互联网远程会诊远程诊断费用纳入医保结算体系的建议,国家医保局日前明确,公立医疗机构提供的远程会诊服务价格政策,按照属地化原则,由公立医疗机构或其所在地区的省级医保部门制定。互新疆一动物园猩猩抽烟,工作人员曾帮它戒烟,但它自己会问游客要烟,还会藏打火机日前,新疆乌鲁木齐天山野生动物园内猩猩抽烟的视频引发网友关注。视频显示,一只大猩猩在熟练抽烟,不时吞吐烟雾,游客纷纷驻足拍摄。13日,该野生动物园工作人员说这只猩猩已经在该动物园生无密码绕过!黑客利用ChatGPT劫持Facebook账户DarkReading网站披露,3月3日3月9日,每天至少有2000人从GooglePlay应用商店下载快速访问ChatGPT的Chrome恶意扩展。据悉,一名威胁攻击者可能利用该美三家币圈友好型地区银行接连倒闭,危机会蔓延至币圈吗?美国地区银行危机也蔓延到了加密货币领域在SilvergateCapitalCorp关闭SilvergateBank以及硅谷银行事件导致第二大稳定币USDCoin(USDC)承压后,又一万亿银行出事多次熔断临停,储户排队取钱!6300亿资管巨头也被波及第一张多米诺骨牌倒下之后,硅谷银行破产带来的连锁效应仍在继续,截至最新收盘,美股和欧股主要交易市场几乎全线飘绿。美东时间3月10日,在硅谷银行连续两天股价跌超60后,美国联邦存款保超20家上市公司集体回应硅谷银行存款占比普遍不到5颇受初创企业青睐的美国硅谷银行轰然倒闭,多家上市公司纷纷回应。3月12日至3月13日,对于美国风投型银行硅谷银行(SiliconValleyBank)倒闭一事,截至发稿,至少有23多家美国银行濒临破产,美国梦要碎了!据外媒消息在硅谷银行周五倒闭之际,FirstRepublicBank面临新的压力,因为投资者试图找出哪些其他银行可能面临类似的风险。硅谷银行标志FirstRepublic股价在早盘甲流高发期,退烧药这样吃根本没用!给孩子退烧,这8点要牢记最近,甲流进入了高发期。相比往年,今年似乎格外严重。流感主要以发热头痛肌肉酸痛等症状为主,孩子的发病高于成人。新生儿还可能出现嗜睡拒奶呼吸暂停等症状。确诊为甲流的孩子,当症状不严重