python面试题整理--基础篇

题目和答案来源于互联网

1.python的特点和优点是什么?

python是一种变成的入门语言,具备一下优点:

解释性、动态特性、面向对象、语法简洁、开源、丰富的社区资源

延伸问题:

解释性如何理解:解释器不产生目标机器代码,而是产生中间代码,硬件看不懂中间代码。解释型代码是将源代码逐一解释成可执行的机器指令,因为效率低下;

Python 是怎么实现动态类型的呢?

    答案就藏在具体存储的对象上。变量 a 仅仅只是一个符号(实际上是一个字符串对象),类型信息是存储在对象上的。在 Python 中,对象机制的核心是类型信息和引用计数(引用计数属于垃圾回收的部分)

2.pyc的作用?

    一个 pyc 文件包含了三部分信息:Python 的 magic number、pyc 文件创建的时间信息,以及 PyCodeObject 对象。

magic number 是 Python 定义的一个整数值。一般来说,不同版本的 Python 实现都会定义不同的 magic number,这个值是用来保证 Python 兼容性的。比如要限制由低版本编译的 pyc 文件不能让高版本的 Python 程序来执行,只需要检查 magic number 不同就可以了。由于不同版本的 Python 定义的字节码指令可能会不同,如果不做检查,执行的时候就可能出错

3.深拷贝和浅拷贝对的区别是什么?

深拷贝是将对象本身复制给另外一个对象。这就意味这如果对对象的副本进行更改是不会影响愿对象,在Python中。我们使用deepcopy()函数进行神拷贝。

浅拷贝是将对象引用复制给另外一个对象,因此,如果我们在副本中进行修改,则会影响原对象。使用copy函数进行浅拷贝。

4.列表和元祖有什么不同?

区别:列表是可变的,元祖是不可变的

5.解释python中的三元表达式

[on true] if [expression]else [on false]

如果 [expression] 为真, 则 [on true] 部分被执行。如果表示为假则 [on false] 部分被执行

6.python中如何实现多线程?

线程某种意义上来说是轻量级的进程,多线程允许一次只想多个进程,python是一个多线程语言。

GIL(全局解释器锁)确保一次执行单个线程,一个线程保存GIL并在将其传递给下一个线程之前执行一些操作,这就产生了并行执行的错觉,但实际上,只是线程轮流在cpu上执行,当然,所有传递都会增加执行的开销。

7.解释继承

一个类继承自另一个类,也可以说是一个子类/派生类,继承自父类/基类/超类。同时获取所有的类成员、属性和方法。

继承使我们可以重用代码,并且还可以更方便的创建和维护代码,python支持以下类型的继承:

1.单继承-一个子类继承自单个基类

2.多重继承-一个子类继承自多个基类

3.多级继承:一个子类继承自一个基类,而基类继承自另一个基类

4.分层继承:多个子类继承自同一个基类

5.混合继承-两种或两种以上继承类型的组合

8.什么使Flask

falsk是一种使用python编写的轻量级web应用框架,使用bsd授权,其wsgi工具箱采用Werkzeug,模版引擎则使用jinja2,除了Werkzeug和jinja2以外几乎不依赖任何外部库。因此Flask被称为轻量级框架。

Flask的会话使用签名cookie来允许用户查看和修改会话内容,他会记录从一个请求到另一个请求的信息。但如果要修改会话的话。则必须有密钥Flask.secret_key。

9.如何在python中管理内存

python用一个私有堆内存空间来放置所有对象和数据结构,我们无法访问它,由解释器来管理她。不过使用一些核心api,我们可以访问一些python内存管理工具来控制内存分配。

10.解释python中的help()函数和dir()函数

help()函数返回帮助文档和参数说明

dir()函数返回对象中的所有成员(任何类型)

11.当退出python时是否释放所有的内存分配?

答案时否定的,那些具有对象循环引用或者全局命名空间引用的变量,在python退出时往往不会被释放,另外也不会释放C库保留的那部分内容

12.什么事python字典

拥有键值对,并且键是唯一的,字典是可变的。

13.解释 *args 和 **kwargs?

如果我们不知道将多少个参数传递给函数,比如当我们想传递一个列表或一个元组值时,就可以使用*args。

当我们不知道将会传入多少关键字参数时,使用**kwargs 会收集关键字参数。

14.什么是负索引?

与正索引不同,负索引是从右边开始检索的,同样也可以用于列表的切片。

15如何随机打乱列表中的元素,要求不引用额外的内存空间?

使用random包中的shuffler()函数来实现。

16.解释python中的join()和split()函数

join()函数可以将指定的字符添加到字符串中。

split()函数可以使用指定的字符分割字符串

17.python是否区分大小写?

区分

18.python中标识符的命名规则?

Python 中的标识符可以是任意长度,但必须遵循以下命名规则:

1. 只能以下划线或者 A-Z/a-z 中的字母开头。

2. 其余部分只能使用 A-Z/a-z/0-9。

3. Python 标识符区分大小写。

4. 关键字不能作为标识符。

19.如何删除字符串中的前置空格

lstrip()

20.字符串大小写转换

lower()函数:转换成小写

upper()函数:转换成大写

要检查字符串是否为全大写或全小写,使用 isupper() 和 islower() 函数

istitle() 可以检查字符串是否是标题格式。

21.python中的pass语句有什么作用?

空余句

22.python中的闭包

如果在一个内部函数里。对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就是一个闭包。

23.解释 Python 中的//,%和**运算符

//运算符执行地板除法,返回结果的整数部分 (向下取整)。

24.如何获取字典中的所有键?

使用 keys() 来获取字典中的所有键

25.问什么标识符不建议使用下划线开头?

因为在 Python 中以下划线开头的变量为私有变量,如果你不想让变量私有,就不要使用下划线开头。

你可能感兴趣的:(python面试题整理--基础篇)