Python初中级面试题

本文总结了Python面试中常见的初级到中级问题,涵盖了深拷贝与浅拷贝的区别、列表和元组的特性、Python2与Python3的差异、三元运算、多线程、继承、内存管理、help()和dir()函数的作用、猴子补丁概念、args和kwargs的使用、负索引、字符串的join()和split()函数、移除前导空格的方法、pass语句、闭包、数据类型、切片、不可变集合frozenset、lambda表达式、递归、生成器与迭代器的区别、yield的使用、参数传递机制、创建包、装饰器、冒泡排序、快速排序、折半查找以及数据结构的基础知识。这些知识点有助于Python开发者更好地准备面试。
摘要由CSDN通过智能技术生成

这里的题有些是简单的话述,所以有可能需要你自己整理,自己整理出来的会加深你的记忆,有些我会附上文章,有些就简单而过,直接上干货了,希望对您有帮助。

1.深拷贝和浅拷贝之间的区别是什么?

深拷贝可理解为递归性质的拷贝,其开辟新的内存空间地址,在修改新的拷贝内容不会影响到旧的内容,其完全拷贝原内容的所以。

import copy
b=copy.deepcopy(a)

而浅拷贝则是将一个对象的引用拷贝到另一个对象上,所以如果我们在拷贝中改动,会影响到原对象。我们使用函数copy()执行浅拷贝

b=copy.copy(a)

2.列表和元组之间的区别是?

二者的主要区别是列表是可变的,而元组是不可变的

不同点一:不可变 VS 可变

两种类型除了字面上的区别(括号与方括号)之外,最重要的一点是tuple是不可变类型,大小固定,而 list 是可变类型、数据可以动态变化,这种差异使得两者提供的方法、应用场景、性能上都有很大的区别。

不同点二:同构 VS 异构

tuple 用于存储异构(heterogeneous)数据,当做没有字段名的记录来用,比如用 tuple 来记录一个人的身高、体重、年龄。

person = (“zhangsan”, 20, 180, 80) 比如记录坐标上的某个点

point = (x, y) 而列表一般用于存储同构数据(homogenous),同构数据就是具有相同意义的数据,比如下面的都是字符串类型

[“zhangsan”, “Lisi”, “wangwu”] 再比如 list 存放的多条用户记录

[(“zhangsan”, 20, 180, 80), (“wangwu”, 20, 180, 80)] 数据库操作中查询出来的记录就是由元组构成的列表结构。

因为 tuple 作为没有名字的记录来使用在某些场景有一定的局限性,所以又有了一个 namedtuple 类型的存在,namedtuple 可以指定字段名,用来当做一种轻量级的类来使用。

tuple在性能上也要快于list,就迭代来说,同样大小的数据,tuple占用内存更少

异构:多个不同类型的事物或物体来参与完成密谋一件事,具有数据完整性,安全性。
同构:多个相同类型的事物或物体来参与完成某一件事

简单插入异步与同步

异步:已经做好(完)一件事,去做下一件事,中间不需要等待反馈
同步:已经做好(完)一件事,要等待反馈之后继续走一下步

构:可由同种或不同种的事物构成
步:步调,保持一样或不同的步调

3.Python2和Python3的区别
觉得这个有些鸡肋,版本迭代肯定会带来区别,但必须要知道,问不问就看面试官的了

print语句被python3废弃,只能使用print函数

Python3中字符串是Unicode (utf-8)编码,支持中文做标识符。

python2中是ASCII编码,需要更改字符集才能正常支持中文,所以在.py文件中会看到

#-- coding: UTF-8 --
# -*- encoding: utf-8 -*-

异常处理 Python2中try:…except Exception, e:…,
在Python3中改为了try:…except Exception as e:…

Python3中不再使用xrange方法,只有range方法。
(这里可以说说他俩的区别。一个是range()函数。另一个就是xrange的生成器)

range在Python2中返回列表,而在Python3中返回range可迭代对象。

在Python2中有两个不等运算符!=和<>,在Python3中去掉了<>,只有!=符号表示不等

在Python2中双反引号可以替代repr函数,在Python3中去掉了双反引号的表是方法,只能用repr方法。

StringIO模块现在被合并到新的io模组内。new, md5, gopherlib等模块被删除。

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。

取消了exec语句,只剩下exec()函数。

在Python2中long是比int取值范围更大的整数,Python3中取消了long类型,int的取值范围扩大到之前的long类型范围。

列表推导 不再支持[n for n in a,b]语法,改为[n for n in (a,b)]或[n for n in [a,b]]

python 2 中通过input输入的类型是int,只有通过raw_input()输入的类型才是str。

python 3中通过input输入的类型都是str,去掉了row_input()方法。

4.解释一下Python中的三元运算

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

如果表达式为True,就执行[on true]中的语句。否则,就执行[on false]中的语句

a,b=2,3
min=a if a<b else b
min

判定条件/为真的结果/为假的结果
为真时的结果/判定条件/为假时的结果
先输出结果,在判定条件

5.在Python中如何实现多线程?
一个线程就是一个轻量级进程,多线程能让我们一次执行多个线程。我们都知道,Python是多线程语言,其内置有多线程工具包。

Python中的GIL(全局解释器锁)确保一次执行单个线程。一个线程保存GIL并在将其传递给下个线程之前执行一些操作,这会让我们产生并行运行的错觉。但实际上,只是线程在CPU上轮流运行。当然,所有的传递会增加程序执行的内存压力。

解决多线程之间数据的完整性和状态同步的锁机制
含有GIL的解释器有 CPython、Pypy、Psyco
没有GIL的解释器有JPython、IronPython

单线程锁,确保不会恶意争抢资源,造成死锁
Look,一个一个线程执行

线程,进程的关系
俩个功能在同一个进程中执行任务

子线程,主线程,由于没有守护线程,所以,当主线程结束后,子线程也会跟着结束
join() 等待子线程执行结束,再执行主线程。

6.解释一下Python中的继承
当一个类继承自另一个类,它就被称为一个子类/派生类,继承自父类/基类/超类。它会继承/获取所有类成员(属性和方法)。

继承能让我们重新使用代码,也能更容易的创建和维护应用。Python支持如下种类的继承:

单继承:一个类继承自单个基类
多继承:一个类继承自多个基类
多级继承:一个类继承自单个基类,后者则继承自另一个基类
分层继承:多个类继承自单个基类
混合继承:两种或多种类型继承的混合

继承,是Python类的重要特性之一,现在Python类的特征应该是四大特性:封装、继

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值