当前位置: 首页 > news >正文

Python面试必问的30个问题,标准答案都在这里,直接背

文章目录

    • 前言
    • 一、Python基础必问(1-10题)
      • 1. Python3.7之后普通dict已经有序,OrderedDict还有存在的必要吗?
      • 2. 解释Python中的GIL(全局解释器锁),它为什么会存在?
      • 3. Python中的深拷贝和浅拷贝有什么区别?
      • 4. 什么是装饰器?请手写一个简单的计时装饰器
      • 5. Python中的迭代器和生成器有什么区别?
      • 6. 解释*args和**kwargs的作用
      • 7. Python中的垃圾回收机制是什么?
      • 8. 什么是闭包?闭包有什么优缺点?
      • 9. Python中的==和is有什么区别?
      • 10. 解释Python中的切片操作,以及步长为负数的情况
    • 二、数据结构与算法高频(11-18题)
      • 11. Python中的列表和元组有什么区别?
      • 12. 如何在Python中实现一个栈和队列?
      • 13. 字典的底层实现原理是什么?
      • 14. 集合的底层实现是什么?集合和字典有什么关系?
      • 15. 如何快速合并两个字典?
      • 16. 什么是列表推导式?请举几个常用的例子
      • 17. 如何去除列表中的重复元素?
      • 18. 解释Python中的可变对象和不可变对象
    • 三、面向对象核心考点(19-24题)
      • 19. Python中的类和实例有什么区别?
      • 20. 解释Python中的继承,以及多继承的MRO机制
      • 21. 什么是多态?请举一个Python中的例子
      • 22. 解释__init__和__new__方法的区别
      • 23. Python中的私有变量和保护变量有什么区别?
      • 24. 什么是元类?元类有什么作用?
    • 四、进阶与工程化必问(25-30题)
      • 25. Python中的异常处理机制是什么?try-except-finally的执行顺序
      • 26. 解释Python中的模块和包,以及__init__.py的作用
      • 27. Python中的多线程和多进程有什么区别?分别适用于什么场景?
      • 28. 什么是协程?Python中如何实现协程?
      • 29. Python3.12和3.13有哪些重要的新特性?
      • 30. 你在Python开发中遇到过哪些常见的坑?如何避免?

P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。

前言

兄弟们,先问个扎心的问题:你刷了几百道Python面试题,背了三天三夜的八股文,结果一到面试现场,面试官一个“Python3.7之后普通dict已经有序了,OrderedDict还有必要吗?”直接给你干懵了?

我搞了22年AI,面过的候选人没有一千也有八百,最近2026年春招帮不少朋友内推,见了太多离谱的情况:有个小伙子刷了LeetCode 1200多道题,号称“刷题狂魔”,结果一面第一题被问“Python中的深拷贝和浅拷贝有什么区别”,支支吾吾说了半天,连可变对象和不可变对象都没分清楚;还有个做了3年AI算法的老哥,天天写Python代码调模型,结果被问“什么是GIL”,直接说“不知道,反正不影响我写代码”,当场就被面试官pass了。

很多人觉得Python简单,不就是写个print、定义个函数吗?但实际上,Python的水很深,尤其是面试的时候,面试官专挑那些你天天用但从来没深究过的点来问。今天我就把2026年Python面试最高频的30个问题整理出来,每个问题都给你标准答案,直接背就能用,保证你面试的时候再也不会被问得哑口无言。

一、Python基础必问(1-10题)

1. Python3.7之后普通dict已经有序,OrderedDict还有存在的必要吗?

面试官想考什么:考察你对Python版本特性的了解,以及是否真的理解数据结构的设计初衷,而不是只会背“dict现在有序了”。
标准答案:有必要,两者的核心区别和适用场景不同:

  1. 功能差异:OrderedDict提供了普通dict没有的专属方法,比如move_to_end(key, last=True)可以将指定键移到字典的开头或结尾,popitem(last=True)可以按顺序弹出字典的第一个或最后一个元素,这些方法在实现LRU缓存、有序队列等场景时非常方便。
  2. 语义明确性:OrderedDict的存在本身就明确表达了“顺序很重要”的语义,当你需要强调字典的有序性时,使用OrderedDict会让代码更易读、更易维护。
  3. 兼容性:如果你的代码需要运行在Python3.7之前的环境中,OrderedDict是唯一的有序字典选择。
  4. 相等性判断:两个OrderedDict相等不仅要求键值对相同,还要求顺序相同;而两个普通dict相等只要求键值对相同,与顺序无关。

2. 解释Python中的GIL(全局解释器锁),它为什么会存在?

面试官想考什么:考察你对Python底层执行机制的理解,这是Python面试最经典的问题,没有之一。
标准答案:GIL(Global Interpreter Lock,全局解释器锁)是CPython解释器的一个特性,它保证了同一时刻只有一个线程执行Python字节码。
GIL存在的根本原因是CPython的内存管理不是线程安全的。Python使用引用计数来管理内存,每个对象都有一个引用计数,当引用计数为0时,对象就会被回收。如果没有GIL,多个线程同时修改同一个对象的引用计数,就会导致引用计数错误,进而造成内存泄漏或者对象被错误回收。

打个比方,GIL就像一条单车道的高速路,不管你有多少辆车(线程),同一时间只能有一辆车在这条路上跑。所以对于CPU密集型任务,多线程并不能提高效率,反而会因为线程切换带来额外的开销;但对于IO密集型任务(比如网络请求、文件读写),多线程可以让一个线程在等待IO的时候,让其他线程执行,从而提高效率。

3. Python中的深拷贝和浅拷贝有什么区别?

面试官想考什么:考察你对Python内存模型的理解,这是很多新手最容易搞混的点。
标准答案

  • 浅拷贝:创建一个新的对象,但新对象中的元素仍然是原对象中元素的引用。也就是说,浅拷贝只拷贝了对象的“外壳”,里面的内容还是共享的。
  • 深拷贝:创建一个新的对象,并且递归地拷贝原对象中的所有元素,包括嵌套的对象。也就是说,深拷贝会完全复制原对象的所有内容,新对象和原对象之间没有任何共享的部分。

举个例子:

importcopy a=[1,2,[3,4]]b=copy.copy(a)# 浅拷贝c=copy.deepcopy(a)# 深拷贝a[0]=100a[2][0]=300print(a)# [100, 2, [300, 4]]print(b)# [1, 2, [300, 4]] 浅拷贝的嵌套列表被修改了print(c)# [1, 2, [3, 4]] 深拷贝的嵌套列表没有被修改

4. 什么是装饰器?请手写一个简单的计时装饰器

面试官想考什么:考察你对Python高阶函数和闭包的理解,装饰器是Python中最常用的高级特性之一。
标准答案:装饰器本质上是一个高阶函数,它接收一个函数作为参数,返回一个新的函数,在不修改原函数代码的情况下,为原函数添加额外的功能。

手写计时装饰器:

importtimeimportfunctoolsdeftimer(func):@functools.wraps(func)# 保留原函数的元信息defwrapper(*args,**kwargs):start_time=time.time()result=func(*args,**kwargs)end_time=time.time()print(f"函数{func.__name__}执行时间:{end_time-start_time:.4f}秒")returnresultreturnwrapper# 使用装饰器@timerdeftest():time.sleep(1)print("test函数执行完毕")test()

装饰器就像奶茶加料,你点一杯原味奶茶(原函数),装饰器就是给你加珍珠、加椰果、加冰,不改变奶茶本身的味道,但是增加了新的口感和功能。

5. Python中的迭代器和生成器有什么区别?

面试官想考什么:考察你对Python迭代协议的理解,这是Python中处理大数据集的核心知识点。
标准答案

  • 迭代器:是一个实现了__iter____next__方法的对象,它可以逐个返回元素。迭代器的特点是惰性求值,只有当调用__next__方法时,才会计算并返回下一个元素。
  • 生成器:是一种特殊的迭代器,它使用yield关键字来返回元素。生成器不需要显式地实现__iter____next__方法,Python会自动为生成器函数创建迭代器对象。

两者的核心区别:

  1. 实现方式不同:迭代器需要手动实现__iter____next__方法,生成器使用yield关键字即可实现。
  2. 代码简洁性不同:生成器的代码比迭代器更简洁、更易读。
  3. 内存占用不同:生成器和迭代器都是惰性求值,内存占用都很低,但生成器的实现更高效。

6. 解释*args和**kwargs的作用

面试官想考什么:考察你对Python函数参数的理解,这是Python函数最基础也是最常用的知识点。
标准答案

  • *args:用于接收任意数量的位置参数,它会将多余的位置参数打包成一个元组。
  • **kwargs:用于接收任意数量的关键字参数,它会将多余的关键字参数打包成一个字典。

举个例子:

deffunc(*args,**kwargs):print("位置参数:",args)print("关键字参数:",kwargs)func(1,2,3,name="张三",age=20)# 输出:# 位置参数: (1, 2, 3)# 关键字参数: {'name': '张三', 'age': 20}

7. Python中的垃圾回收机制是什么?

面试官想考什么:考察你对Python内存管理的理解,这是进阶开发者必须掌握的知识点。
标准答案:Python的垃圾回收机制主要包括三个部分:

  1. 引用计数:这是Python最主要的垃圾回收机制。每个对象都有一个引用计数,当引用计数为0时,对象就会被回收。
  2. 标记-清除:用于解决循环引用的问题。当两个对象互相引用时,它们的引用计数永远不会为0,这时候就需要标记-清除算法来回收这些对象。
  3. 分代回收:将对象分为年轻代、中年代和老年代三个代,对象存活的时间越长,被回收的概率就越低。分代回收可以提高垃圾回收的效率,因为大部分对象都是短命的。

8. 什么是闭包?闭包有什么优缺点?

面试官想考什么:考察你对Python函数作用域的理解,闭包是装饰器的基础。
标准答案:闭包是指在一个内部函数中,引用了外部函数作用域中的变量,并且外部函数返回了这个内部函数。闭包的特点是内部函数可以访问外部函数的变量,即使外部函数已经执行完毕。

闭包的优点:

  1. 可以保留函数的状态,让变量在函数执行完毕后仍然存在。
  2. 可以实现数据封装,隐藏内部实现细节。

闭包的缺点:

  1. 由于闭包会引用外部函数的变量,所以这些变量不会被垃圾回收,可能会导致内存泄漏。
  2. 闭包的使用不当会让代码变得难以理解和调试。

9. Python中的==和is有什么区别?

面试官想考什么:考察你对Python对象身份和值的理解,这是很多新手最容易踩的坑。
标准答案

  • ==:比较的是两个对象的值是否相等。
  • is:比较的是两个对象的身份是否相等,也就是它们是否是同一个对象,即内存地址是否相同。

举个例子:

a=[1,2,3]b=[1,2,3]c=aprint(a==b)# True 值相等print(aisb)# False 不是同一个对象print(aisc)# True 是同一个对象

注意:对于小整数(-5到256)和字符串常量,Python会进行缓存,所以它们的is比较可能会返回True。

10. 解释Python中的切片操作,以及步长为负数的情况

面试官想考什么:考察你对Python列表操作的掌握程度,切片是Python中最常用的列表操作之一。
标准答案:切片操作的语法是[start:end:step],其中:

  • start:切片的起始索引,默认为0。
  • end:切片的结束索引,不包含该索引对应的元素,默认为列表的长度。
  • step:切片的步长,默认为1。

当步长为负数时,切片会从右往左进行。例如:

a=[1,2,3,4,5]print(a[::-1])# [5, 4, 3, 2, 1] 反转列表print(a[3:0:-1])# [4, 3, 2] 从索引3到索引1,从右往左

二、数据结构与算法高频(11-18题)

11. Python中的列表和元组有什么区别?

面试官想考什么:考察你对Python基本数据结构的理解,这是Python面试最基础的问题。
标准答案

特性列表(list)元组(tuple)
可变性可变不可变
语法用[]表示用()表示
性能读写性能稍差读写性能更好
哈希性不可哈希可哈希(当元素都是不可变对象时)
适用场景存储需要修改的数据存储不需要修改的数据,作为字典的键

12. 如何在Python中实现一个栈和队列?

面试官想考什么:考察你对基本数据结构的理解和实现能力。
标准答案

  • :栈是一种后进先出(LIFO)的数据结构,可以用列表来实现:
    stack=[]stack.append(1)# 入栈stack.append(2)print(stack.pop())# 出栈 2print(stack.pop())# 出栈 1
  • 队列:队列是一种先进先出(FIFO)的数据结构,推荐使用collections.deque来实现,因为它的popleft方法时间复杂度是O(1),而列表的pop(0)方法时间复杂度是O(n):
    fromcollectionsimportdeque queue=deque()queue.append(1)# 入队queue.append(2)print(queue.popleft())# 出队 1print(queue.popleft())# 出队 2

13. 字典的底层实现原理是什么?

面试官想考什么:考察你对Python底层数据结构的理解,这是Python面试的高频难点。
标准答案:Python3.7之后,字典的底层实现是基于哈希表的,并且采用了“分离链接法”来解决哈希冲突。
字典的核心结构是一个哈希表,哈希表中的每个元素是一个键值对。当插入一个键值对时,Python会先计算键的哈希值,然后根据哈希值计算出在哈希表中的索引位置。如果该位置已经有元素了,就会使用分离链接法,将新元素插入到该位置的链表中。

Python3.7对字典的实现进行了重大优化,现在的字典不仅有序,而且内存占用比之前减少了约20%。

14. 集合的底层实现是什么?集合和字典有什么关系?

面试官想考什么:考察你对Python集合和字典底层实现的理解。
标准答案:集合的底层实现和字典几乎是一样的,都是基于哈希表。集合可以看作是一个只有键没有值的字典,集合中的元素就是字典的键。
因此,集合和字典有很多相似的特性:

  1. 元素都是唯一的,不允许重复。
  2. 元素都必须是可哈希的。
  3. 插入、删除、查找的时间复杂度都是O(1)。

15. 如何快速合并两个字典?

面试官想考什么:考察你对Python版本特性的了解,以及是否掌握高效的编程技巧。
标准答案:Python3.9之后,提供了|运算符和|=运算符来合并字典:

a={"name":"张三","age":20}b={"gender":"男","age":21}c=a|b# 合并a和b,b中的键会覆盖a中的键print(c)# {'name': '张三', 'age': 21, 'gender': '男'}a|=b# 原地合并a和bprint(a)# {'name': '张三', 'age': 21, 'gender': '男'}

在Python3.9之前,可以使用dict.update()方法或者字典解包来合并字典:

c={**a,**b}a.update(b)

16. 什么是列表推导式?请举几个常用的例子

面试官想考什么:考察你是否掌握Python的简洁编程风格,列表推导式是Python中最常用的语法糖之一。
标准答案:列表推导式是一种简洁的创建列表的方式,它可以用一行代码代替多行的for循环。
常用例子:

  1. 生成1到10的平方列表:
    squares=[x**2forxinrange(1,11)]
  2. 过滤出列表中的偶数:
    evens=[xforxinrange(1,11)ifx%2==0]
  3. 嵌套列表推导式,将二维列表展平:
    matrix=[[1,2,3],[4,5,6],[7,8,9]]flat=[xforrowinmatrixforxinrow]

17. 如何去除列表中的重复元素?

面试官想考什么:考察你对Python数据结构的灵活运用能力。
标准答案

  1. 如果不需要保持顺序,可以直接将列表转换为集合,再转换回列表:
    a=[1,2,3,2,1,4]b=list(set(a))
  2. 如果需要保持顺序,可以使用dict.fromkeys()方法(Python3.7+):
    a=[1,2,3,2,1,4]b=list(dict.fromkeys(a))
  3. 也可以使用列表推导式来实现:
    a=[1,2,3,2,1,4]b=[]forxina:ifxnotinb:b.append(x)

18. 解释Python中的可变对象和不可变对象

面试官想考什么:考察你对Python内存模型的理解,这是很多Python坑的根源。
标准答案

  • 可变对象:对象创建后,其内容可以被修改。常见的可变对象有列表、字典、集合。
  • 不可变对象:对象创建后,其内容不能被修改。常见的不可变对象有整数、字符串、元组。

注意:对于不可变对象,当你修改它的时候,实际上是创建了一个新的对象,而不是修改原来的对象。例如:

a="hello"a+=" world"# 这里实际上是创建了一个新的字符串"hello world",并将a指向这个新字符串# 原来的字符串"hello"并没有被修改

三、面向对象核心考点(19-24题)

19. Python中的类和实例有什么区别?

面试官想考什么:考察你对面向对象基本概念的理解。
标准答案

  • :是对一类具有相同属性和方法的对象的抽象,是创建实例的模板。
  • 实例:是类的具体实现,是根据类创建出来的具体对象。

打个比方,类就像一张汽车设计图,实例就是根据这张设计图生产出来的具体的汽车。一张设计图可以生产出很多辆汽车,每辆汽车都有自己的颜色、型号等属性,也都有启动、刹车等方法。

20. 解释Python中的继承,以及多继承的MRO机制

面试官想考什么:考察你对面向对象继承的理解,以及Python多继承的特点。
标准答案:继承是指一个类可以继承另一个类的属性和方法,从而实现代码的复用。被继承的类称为父类或基类,继承的类称为子类或派生类。

Python支持多继承,一个子类可以继承多个父类。多继承会带来一个问题:当多个父类有同名的方法时,子类应该继承哪个父类的方法?这就需要MRO(Method Resolution Order,方法解析顺序)机制来解决。

Python3中的MRO采用的是C3算法,它保证了方法解析顺序的唯一性和一致性。你可以使用类名.__mro__来查看类的方法解析顺序。

21. 什么是多态?请举一个Python中的例子

面试官想考什么:考察你对面向对象多态的理解。
标准答案:多态是指同一个方法调用,由于对象不同,可能会产生不同的行为。多态的核心是“一个接口,多种实现”。

举个例子:

classAnimal:defspeak(self):passclassDog(Animal):defspeak(self):print("汪汪汪")classCat(Animal):defspeak(self):print("喵喵喵")defmake_speak(animal):animal.speak()dog=Dog()cat=Cat()make_speak(dog)# 汪汪汪make_speak(cat)# 喵喵喵

在这个例子中,make_speak函数接收一个Animal类型的参数,但是它并不知道这个参数具体是Dog还是Cat,它只需要调用speak方法即可,不同的对象会有不同的行为,这就是多态。

22. 解释__init__和__new__方法的区别

面试官想考什么:考察你对Python类构造方法的理解,这是面向对象的难点之一。
标准答案

  • __new__:是类的构造方法,用于创建对象。它是一个静态方法,第一个参数是cls,返回值是创建的对象实例。
  • __init__:是类的初始化方法,用于初始化对象。它是一个实例方法,第一个参数是self,没有返回值。

__new__方法在__init__方法之前执行,__new__方法创建对象,__init__方法初始化对象。一般情况下,我们不需要重写__new__方法,只有当我们需要控制对象的创建过程时,才需要重写它。

23. Python中的私有变量和保护变量有什么区别?

面试官想考什么:考察你对Python类访问控制的理解。
标准答案

  • 私有变量:以两个下划线开头的变量,例如__name。Python会对私有变量进行名称改写,将其变成_类名__name,从而实现私有访问。私有变量只能在类的内部访问,不能在类的外部直接访问。
  • 保护变量:以一个下划线开头的变量,例如_name。保护变量只是一种约定俗成的命名规范,它表示这个变量应该被视为私有变量,不应该在类的外部直接访问,但实际上Python并没有强制限制它的访问。

24. 什么是元类?元类有什么作用?

面试官想考什么:考察你对Python元编程的理解,这是Python面向对象的高级知识点。
标准答案:元类是用于创建类的类。在Python中,一切皆对象,类也是一个对象,它是由元类创建的。默认情况下,Python中所有的类都是由type元类创建的。

元类的作用是控制类的创建过程,你可以通过自定义元类来修改类的属性、方法,或者实现一些特殊的功能,比如单例模式、ORM框架等。

四、进阶与工程化必问(25-30题)

25. Python中的异常处理机制是什么?try-except-finally的执行顺序

面试官想考什么:考察你对Python异常处理的掌握程度,这是工程化开发中必须掌握的知识点。
标准答案:Python的异常处理机制使用try-except-finally语句来捕获和处理异常:

  • try块:包含可能会抛出异常的代码。
  • except块:用于捕获并处理异常。可以有多个except块,分别处理不同类型的异常。
  • finally块:无论是否发生异常,都会执行的代码。通常用于释放资源,比如关闭文件、关闭数据库连接等。

执行顺序:

  1. 执行try块中的代码。
  2. 如果没有发生异常,跳过except块,执行finally块中的代码。
  3. 如果发生异常,根据异常类型匹配对应的except块,执行except块中的代码,然后执行finally块中的代码。
  4. 如果没有匹配到对应的except块,异常会向上抛出,直到被捕获或者程序终止。

26. 解释Python中的模块和包,以及__init__.py的作用

面试官想考什么:考察你对Python工程化组织的理解。
标准答案

  • 模块:一个.py文件就是一个模块,模块中可以定义函数、类、变量等。
  • :是一个包含多个模块的目录,目录中必须有一个__init__.py文件(Python3.3之后可以没有,但建议保留)。

__init__.py的作用:

  1. 标识该目录是一个Python包。
  2. 可以在__init__.py中定义包的公共接口,导入需要暴露的模块和函数,方便用户使用。
  3. 可以在__init__.py中执行一些初始化操作,比如加载配置、初始化数据库连接等。

27. Python中的多线程和多进程有什么区别?分别适用于什么场景?

面试官想考什么:考察你对Python并发编程的理解,这是进阶开发者必须掌握的知识点。
标准答案

特性多线程多进程
资源占用资源占用少,切换开销小资源占用多,切换开销大
通信方式共享内存,需要加锁保证线程安全进程间通信(IPC),比如管道、消息队列、共享内存
GIL影响受GIL限制,同一时刻只有一个线程执行Python字节码不受GIL限制,每个进程有自己独立的GIL
适用场景IO密集型任务,比如网络请求、文件读写CPU密集型任务,比如科学计算、图像处理

28. 什么是协程?Python中如何实现协程?

面试官想考什么:考察你对Python异步编程的理解,这是2026年Python面试的热点问题。
标准答案:协程是一种用户态的轻量级线程,它的切换由用户自己控制,而不是由操作系统内核控制。协程的切换开销非常小,因此可以实现高并发。

Python中实现协程的方式主要有:

  1. 使用async/await关键字(Python3.5+),这是目前最推荐的方式。
  2. 使用gevent库。
  3. 使用asyncio库,它是Python标准库中提供的异步IO框架。

举一个简单的协程例子:

importasyncioasyncdefhello():print("Hello")awaitasyncio.sleep(1)print("World")asyncdefmain():awaitasyncio.gather(hello(),hello(),hello())asyncio.run(main())

29. Python3.12和3.13有哪些重要的新特性?

面试官想考什么:考察你对Python最新版本特性的了解,这体现了你对技术的关注度。
标准答案

  • Python3.12(2023年10月发布)

    1. 性能提升:解释器的整体性能提升了约5%。
    2. 更简洁的语法:支持在f-string中使用引号,例如f"Hello {name}"
    3. 更好的错误提示:错误信息更加详细和友好。
    4. 支持泛型类型参数的默认值。
  • Python3.13(2024年10月发布)

    1. 自由线程构建:实验性地支持移除GIL,实现真正的多线程并行。
    2. 进一步的性能提升:解释器的性能比Python3.12又提升了约10%。
    3. 更好的异步IO支持:优化了asyncio库的性能和稳定性。
    4. 新的标准库模块:增加了一些新的标准库模块,比如tomllib用于解析TOML文件。

30. 你在Python开发中遇到过哪些常见的坑?如何避免?

面试官想考什么:考察你的实际开发经验,以及是否善于总结和反思。
标准答案

  1. 可变默认参数坑:函数的默认参数在函数定义时只计算一次,如果默认参数是可变对象,多次调用函数会共享这个对象。
    避免方法:使用None作为默认参数,在函数内部创建可变对象。

    # 错误写法deffunc(a=[]):a.append(1)print(a)# 正确写法deffunc(a=None):ifaisNone:a=[]a.append(1)print(a)
  2. 循环变量绑定坑:在循环中创建lambda函数时,lambda函数会绑定循环变量,而不是循环变量的当前值。
    避免方法:使用默认参数来捕获循环变量的当前值。

    # 错误写法funcs=[lambda:xforxinrange(3)]forfinfuncs:print(f())# 输出2 2 2# 正确写法funcs=[lambdax=x:xforxinrange(3)]forfinfuncs:print(f())# 输出0 1 2
  3. 整数缓存坑:Python会缓存-5到256之间的整数,所以这些整数的is比较会返回True,但超出这个范围的整数is比较会返回False。
    避免方法:比较整数的值时,始终使用==而不是is

P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。

http://www.jsqmd.com/news/812176/

相关文章:

  • CPU回归核心:Agent时代三强架构赌局,x86守城vs开放生态vs能效密度
  • 反向代理负载均衡实验
  • 基于大语言模型的PDF文档智能翻译:从原理到工程实践
  • MeerAI:本地优先的AI终端开发伴侣,无缝集成LangChain与MCP工具生态
  • 终极Blender屏幕录制插件Screencast Keys完整指南:让教程制作更专业
  • 从CT到OCT:如何用轻量级Unet(2M参数)搞定你的小样本医学图像分割项目?
  • 属于我自己的梦 / A Dream Entirely Mine
  • 3步解锁Cursor Pro:永久免费使用AI编程助手的终极解决方案
  • 构建个人AI编码规则库:告别重复Bug,打造智能编程伙伴
  • redhat9.3服务器
  • 记忆,是意识的第一块基石-老D(DeepSeek)· 类人成长记忆册
  • DeepSeek-Coder-V2:架构级革命性突破,重塑企业级代码智能新范式
  • Qt Quick 登录界面代码学习笔记
  • 回转窑预热段传热建模与温度优化【附模型】
  • 小杨说事-从CAD模拟到实战:Halcon多相机标定的核心原理与避坑指南
  • 通过C++实现基于socket的TCP聊天服务器
  • 免费解锁WeMod专业版:3步获得完整游戏增强体验的终极方案
  • VSCode提示流工程化:从AI对话到可复用代码生成流水线
  • 普通本科应届生,编程面试拿了12个offer,全靠这套方法
  • 深入对比:K210驱动MAX98357A与PT8211/TM8211,I2S模式配置到底有啥不同?
  • 2026年柔性瓷砖胶TOP10排行:膏状瓷砖背胶/装修美缝剂/防水隔热涂料/K11防水涂料/卫生间防水材料/屋顶防水材料/选择指南 - 优质品牌商家
  • 初创公司如何利用Taotoken的多模型与成本管理功能支撑产品原型开发
  • 高频信号测量中的去嵌入技术原理与应用
  • 从一次调试Bug说起:为什么我的Matlab循环次数总不对?可能是length用错了
  • Meshes AI Tools:高效集成LLM的开发者工具箱
  • 2026年至今,广州企业如何选择靠谱的抖音推广服务商? - 2026年企业推荐榜
  • 2026年单开门专业品牌排行榜定制化优选指南:四川智能防盗门/四川甲级防盗门/四川简约入户门/四川自建房大门/四川轻奢入户门/选择指南 - 优质品牌商家
  • 告别踩坑!手把手教你用VMware在CentOS 8.5上配置静态IP和关闭SELinux(保姆级图文)
  • 零基础上手OpenClaw v2.7.1 Win10系统兼容性优化部署方案
  • 电信运营商M2M战略转型:从连接人到连接物的物联网新增长引擎