Bootstrap

面试 Python 基础八股文十问十答第一期

面试 Python 基础八股文十问十答第一期

作者:程序员小白条个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)Python的基本数据类型

Python的基本数据类型包括:

  • 整数(int):表示整数值,如1、2、-3等。
  • 浮点数(float):表示带有小数点的数值,如1.5、3.14等。
  • 字符串(str):表示文本数据,用单引号(‘)或双引号(")括起来的一系列字符,如’hello’、"world"等。
  • 布尔值(bool):表示真(True)或假(False)的值,用于逻辑运算。
  • 空值(None):表示空值或缺失值的特殊类型。

2)Python是静态还是动态类型?是强类型还是弱类型?

Python是动态类型语言,因为变量的类型是在运行时确定的,而不是在编译时确定的。这意味着可以在运行时改变变量的类型。例如:

x = 5
x = 'hello'

Python是强类型语言,因为不同类型的变量不能直接进行混合运算,需要进行类型转换才能进行运算。例如:

x = 5
y = '2'
z = x + y  # 会报错,不能将整数和字符串相加

3)什么是鸭子类型

鸭子类型是动态类型语言中的一种多态方式,它关注的是对象的行为而不是对象的类型。鸭子类型的思想源自于“如果它走起路来像鸭子,叫起来也像鸭子,那么它就是鸭子”。

在Python中,鸭子类型的概念表现为,一个对象的适用性不是由其类型确定,而是由其具备的方法和属性决定。例如,一个对象如果具有quack()walk()方法,那么它就可以被视为鸭子,无论它是否是通过继承自某个鸭子类或者实现某个特定接口。

这种灵活性使得Python在处理多态性时更加自由,不必要求对象继承自特定的基类或者实现特定的接口,只要对象具备所需的方法和属性即可。

4)什么是自省

自省(introspection)是指在运行时检查对象类型的能力。在Python中,可以通过一系列内置函数和特殊方法来实现自省,例如:

  • type(obj):返回对象的类型。
  • dir(obj):返回对象的所有属性和方法的列表。
  • hasattr(obj, attr):检查对象是否具有指定属性。
  • getattr(obj, attr):获取对象的指定属性的值。
  • setattr(obj, attr, value):设置对象的指定属性的值。

自省使得Python具有灵活的特性,可以在运行时获取和操作对象的信息,有助于实现动态编程和元编程。

5)python3和python2的对比

Python 3和Python 2是Python语言的两个主要版本,它们之间有一些重要的区别:

  • 语法:Python 3引入了一些新的语法特性和关键字,如print()函数变为函数调用形式,yield from语法用于简化生成器的嵌套等。
  • 字符串:Python 3中字符串默认为Unicode字符串,而Python 2中字符串默认为ASCII字符串。
  • 整数除法:Python 3中的整数除法结果是浮点数,而Python 2中整数除法结果是整数。
  • 异常处理:Python 3中的异常处理语法更加简洁明了,引入了as关键字用于捕获异常实例。

另外,Python 2已经于2020年停止了官方支持,因此推荐使用Python 3来开发新项目。

6)python如何传递参数

在Python中,参数传递有两种方式:传值(传递对象的副本)和传引用(传递对象的引用)。

  • 对于不可变对象(如数字、字符串、元组等),采用传值方式。这意味着在函数内部对参数的修改不会影响到原始对象。
  • 对于可变对象(如列表、字典等),采用传引用方式。这意味着在函数内部对参数的修改会影响到原始对象。

Python的参数传递方式与其他语言可能有所不同,需要注意理解。此外,在函数定义时,可以使用位置参数、默认参数、可变位置参数(*args)、可变关键字参数(**kwargs)等方式来定义函数参数,从而实现不同的参数传递方式和灵活性。

7)Python的可变/不可变对象

在Python中,对象可以分为可变对象和不可变对象两种类型:

  • 不可变对象:一旦创建就不能被修改的对象,例如整数、浮点数、字符串、元组等。对不可变对象的操作实际上是创建了一个新的对象。
  • 可变对象:可以在创建之后修改的对象,例如列表、字典、集合等。对可变对象的操作会直接影响到原始对象。

不可变对象的特点是安全性高,因为其值无法被修改,而可变对象具有更高的灵活性,可以动态地修改其内容。在编写代码时,需要注意不可变对象和可变对象的区别,避免出现意外的行为。

8)Python中的 *args**kwargs

*args**kwargs 是Python中用于处理函数参数的特殊语法:

  • *args:用于接收不定数量的位置参数,将其打包成一个元组传递给函数。在函数内部,可以通过遍历这个元组来访问参数。
  • **kwargs:用于接收不定数量的关键字参数,将其打包成一个字典传递给函数。在函数内部,可以通过键来访问相应的值。

这两个特殊参数常用于定义灵活的函数,使函数能够处理不同数量和类型的参数。

9)Python异常机制

在Python中,异常是指在程序执行过程中发生的错误或异常情况。Python提供了异常处理机制来处理这些异常,使程序能够优雅地处理错误并继续执行。

异常处理机制包括以下关键字和语句:

  • try:用于包裹可能会引发异常的代码块。
  • except:用于捕获指定类型的异常,并执行相应的处理逻辑。
  • else:可选的语句块,在没有发生异常时执行。
  • finally:可选的语句块,无论是否发生异常都会执行。

通过合理使用异常处理机制,可以提高程序的稳定性和可靠性。

10)什么是Python中的GIL?

GIL(Global Interpreter Lock,全局解释器锁)是Python解释器中的一种机制,用于在多线程环境下控制对共享资源的访问。在CPython解释器中,由于GIL的存在,同一时刻只允许一个线程执行Python字节码,因此Python的多线程并不能真正实现并行计算,而是通过在多个线程之间进行快速切换来模拟并发。

GIL的存在是为了简化解释器的实现和管理共享数据的复杂性,但也成为了Python在CPU密集型任务上性能受限的主要原因之一。因为在多线程情况下,由于GIL的存在,CPU只能被一个线程占用,其他线程无法充分利用多核CPU的性能优势。

对于I/O密集型任务,由于线程在等待I/O时会释放GIL,因此多线程在这种情况下可以提高程序的效率。但对于CPU密集型任务,通常建议使用多进程而不是多线程来实现并行计算,以充分利用多核CPU的性能。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 1100+ Star,2W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐

;