Python第一阶段基础题
1.Python语言的特性?
Python是一门解释型语言, 简单清晰,开源免费,跨平台,有大量第三方库辅助开发,支持面向对象与自动垃圾回收,方便与其他编程语言相互调用。
Python在数据采集、人工智能、WEB后台开发、自动化运维、测试等方向应用广泛。
2.python原生(基本)数据类型有哪些?
整型 int
浮点数 float
字符串 str
布尔 bool
列表 list:有序,可遍历,[ ]
元组 tuple:有序,可遍历,不可更新,( )
集合 set :无序,不重复元素,不可遍历,可更新,{ }
字典 dict:特殊的集合,以键值对形式,{'key':'value}
3.哪些是是可变类型哪些是不可变类型
不可变类型:整型,浮点型,字符串,布尔值,元组
可变类型:列表,集合,字典
4.不可变类型和可变类型的差别
可变类型引用的是同一个值,可以对内容进行修改
不可变类型类型,在赋值或者值传递时候会复制新一个对象,与原始对象内存不一致
5.说说常用的数据结构有哪些?各自的特点
线性结构:
列表,元组,按照索引进行访问,访问速度快,插入和删除不易
栈:后进先出
队列:先进先出
非线性结构:
集合:元素不重复,多用于去除重复
字典:键值对格式存储,查询效率高,增加内存空间
6.什么是面向对象?谈谈详细认知
面向对象编程(OOB)是利用'类'和'实例'来实现对世界的描述,一切皆对象,通过实例与实例的交互来编程
优点:
1.使程序更容易拓展和修改,使得开发效率更高
2.基于面向对现象编程可以使得他人更容易理解代码逻辑
三大特性:封装,继承,多态
封装:将数据与数据的操作封装到一个类
继承:子类继承父类获得父类的功能实现
多态:通过重载(父类)和重写(同一个类内)实现方法的多样性
一个类通常由,实例方法,实例属性,类方法,类属性,静态方法构成
访问权限:
公开:类内及类外
_保护:类内及子类,(实际上仅起到声明作用,无语法上限制
_ _私有:仅限类内可以访问
7.什么是鸭子类型?
鸭子类型:不关注类型,只关注是否有对应的行为方法。叫起来像鸭子,走起来像鸭子就认为是一只鸭子。
在编程领域,这意味着我们不关心对象的具体类型是什么,而是更关注对象是否具有我们需要的方法或属性。换句话说,只要一个对象能够响应特定的消息或调用特定的方法,那么这个对象就可以被接受,无论它的具体类型是什么。
8.说一说你常用的魔法方法?
_ _new_ _:创建实例并返回,在init之前
_ _init_ _:初始化实例属性
_ _str_ _:字符串显示
_ _repr_ _:官方显示,原有的样式
_ _edl_ _:对象不被调用自动销毁
运算符重载 可以用于实例的比较
'__eq__', ==
'__ge__', >=
'__gt__', >
'__le__', <=
'__lt__', <
'__ne__', !=
信息获取:
'__class__', 获取类型
'__dir__', 获取自省信息
'__doc__', 获取类及类中方法的注释
'__sizeof__', 获取对象字节长度
9.谈一谈你对python动态性的理解?是否知道猴子补丁?
动态性指的是在运行过程中给类或对象绑定添加属性
实例属性,类属性,静态方法直接添加
实例方法,类方法需要通过types.MethodType 添加
"猴子补丁"是一种动态修改或扩展代码运行时行为的技术。它允许开发者在程序运行过程中更改类或模块的功能,而不需要修改原始源代码。这种做法通常用于测试、调试或是对第三方库进行定制化修改等场景。
10.谈一谈python的异常处理方式?
Python 使用 try
、except
、else
和 finally
关键字来定义异常处理块。
try:尝试执行可能引发异常的代码。
except:捕获并处理特定类型的异常。
else:如果 try
块中没有发生异常,则执行 else
块中的代码。
finally:无论是否发生异常,都会执行 finally
块中的代码,通常用于清理操作(如关闭文件)。
Raise : 手动抛出异常
11简单说一下如何实现序列化?有什么不同?
一种用pickle进行二进制序列化, 一种用json进行文本特定格式序列化
pickle依赖python环境 只能在Python语言使用
json不依赖python环境 跨平台,跨语言
12谈谈深浅拷贝
不可变类型拷贝都是创建一个新的地址
可变类型:
等号赋值:直接使用原始地址,修改一个另外一个直接变化
使用列表,字典自带的copy方法:浅拷贝,可变类型拷贝地址,不可变拷贝值
使用copy模块的deepcopy方法:深拷贝,任何类型都是拷贝所有值
13谈谈对闭包的理解?
闭包语法:
函数套函数,
外部函数将内部函数返回,
内部函数引用外部函数的局部变量(nonlocal)
效果:可以实现外部函数局部变量的私有化和持久化
缺点:返回的内部函数保存着外部函数局部变量,没有释放资源,容易导致内存泄漏
14谈谈对装饰器的理解?
装饰器是 Python 中一种非常强大的功能,它允许程序员在不修改原始函数代码的情况下,动态地添加功能或修改现有函数的行为。装饰器本质上是一个接受函数作为参数的函数,并返回一个新的函数。这种设计模式使得代码更加模块化、可重用且易于维护。
装饰器通常利用闭包来实现其功能,因为它们可以访问定义时所在作用域内的变量。
15可迭代、迭代器、生成器的区别?
可迭代是指对象可以被循环迭代(可以使用for与while),内部实现了__iter__ 返回迭代器
迭代器在可迭代的基础上追加了next功能, 内部实现了__next__
生成器:为了节省内存使用时逐个访问生成每一个元素,本质是算法
16正则表达式
是一种强大的文本匹配工具,用于在字符串中查找特定模式。它们广泛应用于各种编程语言和文本编辑器中,用于搜索、替换、验证等操作。Python 中的 re
模块提供了对正则表达式的全面支持。
17Python的内存管理(垃圾回收)
从三个方面来说,
一是对象的引用计数机制,二时垃圾循环回收,三内存池机制
对象的引用计数机制
Python内部使用引用计数,来保持追踪内存中的对象使用次数。
引用计数增加的情况:
一个对象分配一个新名称
将其放入一个容器中(如列表、元组或字典)
在函数中使用(函数未结束)
引用计数减少的情况:
使用del语句对对象别名显示的销毁
变量被重新赋值
函数执行结束
循环回收
当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。
当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,、由于每个对象都包含一个对 其他对象的应用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄露)。为解决这 一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。
内存池机制 Python提供了对内存的垃圾收集机制,但是它将暂时不用的内存放到内存池而不是返回给操作系统。
18ascii、unicode、utf-8、gbk 区别
ASCII只包含一些基本的英文单词和一些特殊字符
Unicode是一个字符集,包含1全球范围内的字符
utf-8是一种Unicode编码方式,可变长度,兼容ASCII,广泛应用与互联网
gbk是一种双字节编码方式支持中文和其他东亚语言字符
19*arg和**kwarg作用
*args代表位置参数,它会接收任意多个参数并把这些参数作为元组传递给函数。
**kwargs代表的关键字参数,允许你使用没有事先定义的参数名。
位置参数一定要放在关键字参数的前面。
20is和==的区别
==是python标准操作符中的比较操作符,
用来比较判断两个对象( 值与类型)是否相等
is也被叫做同一性运算符,判断id是否相同。
21元类(MetaClass)
元类(metaclass)是用来创建类的类,通过定义元类,我们可以定制类的创建过程
类用来创建实例,元类用来创建类
type(类名, 父类元组,属性字典)
通过实现type的子类,并将子类赋予类的metaclass 参数来指定使用哪个原来创建类
33对比进程与线程
线程与进程:都是用于提升程序效率的技术
线程:共享的是进程的数据,多个线程之间默认就可以共享数据
一个IO密集型(读写,网络请求)优先使用多线程
对于Python来说,多线程并不是完全并行(全局的GIL锁)
进程:直接使用操作系统资源( 一般都是等于CPU核心数)
一个运算密集型(充分利用每一个CPU)优先使用多进程
进程之间共享数据可以使用进程模块的Queue
池子:优化技术,预先创建一定数量的线程或者进程放入池子,使用时从池子中取
使用完以后从新放入池子,避免反复的创建与销毁
23网络编程常见通信协议
- HTTP:超文本传输协议, 是用于在 Web 浏览器和 Web 服务器之间传输数据的协议,它基于 TCP 协议
- HTTPS:安全超文本传输协议,HTTPS 在 HTTP 的基础上加入了 SSL/TLS 加密,用于保护数据在客户端和服务器之间的传输安全
- TCP:传输控制协议,是一种面向连接的、可靠的协议,它在通信双方之间建立可靠的连接,并提供数据传输的保证
- UDP:用户数据报协议,是一种无连接的、不可靠的协议,它不保证数据传输的可靠性和顺序性,但具有低延迟的特点
- FTP:文件传输协议,用于在客户端和服务器之间传输文件,支持文件的上传和下载操作
- SMTP:简单邮件传输协议,用于发送电子邮件
- POP3,IMAP:用于接收电子邮件
作者:fw9521