iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python八股文
  • 521
分享到

Python八股文

python 2023-08-31 09:08:11 521人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

py的语言特性: 动态强类型 静/动态: 编绎/运行 时确定变量类型;弱/强类型: 会/不会发生隐式类型转换。在强类型中,不管在编译时还是运行时,一旦某个类型赋值给某个变量,它会持有这个类型,并且不能同其他类型在计算某个表达式时混合计算。

py的语言特性: 动态强类型

  • 静/动态: 编绎/运行 时确定变量类型;
  • 弱/强类型: 会/不会发生隐式类型转换。在强类型中,不管在编译时还是运行时,一旦某个类型赋值给某个变量,它会持有这个类型,并且不能同其他类型在计算某个表达式时混合计算。

py作为后端语言的优缺点

  • 语言简单灵活,开发效率高
  • 胶水语言,轮子多,拥有Django这种的成熟WEB框架
  • 执行效率低,性能不如其他语言
  • 动态语言,没有类型声明时就没有自动补全,而且很多问题要运行后才能发现

python常用的库

pandas 库提供了数据整理、整理和分析这些数据科学最基本的需求。该库是能够读取、操作、聚合和可视化数据并将所有内容转换为易于理解的格式的全部内容。

NumPy被广泛用作数组处理库。由于它可以管理多维数组对象,因此它被用作多维数据评估的容器。NumPy库由一系列的元素组成,每个元素都是相同的数据类型,一个正整数的元组理想地分隔了这些数据类型。维度称为轴,而轴的数量称为等级。NumPy 中的数组被归类为ndarray。

Scikit-Learn是Python 的本地机器学习库,它为数据科学家提供以下算法:支持向量机、随机森林、K-means 聚类、光谱聚类、均值偏移、交叉验证。这是我们可以使用此 Scikit-Learn 执行的操作分类、聚类、回归、降维、数据预处理。

Matplotlib可视化可以占据了数据的关键位置,它帮助我们创建2D 图形并将绘图用到应用程序中。

Seaborn另一个数据可视化库。Seaborn 与 Matplotlib 有何不同?尽管这两个软件包都作为数据可视化软件包,但实际区别在于您可以使用这两个库执行的可视化类型。对于初学者,使用 Matplotlib,我们只能创建基本图,包括条形、线条、区域、散点图等。但是,使用 Seaborn,可视化水平提高了一个档次,因为您可以用更少的资源创建各种复杂的可视化图形。

1、*args、**kwargs两个参数是什么意思

首先args,kwargs并不是必须这样设定的,只是一个约定俗成的名字,args(位置参数),kwargs(关键字参数)。
都用于函数的定义,用于将不定数量的参数传递给函数。
*args:用来发送非键值对可变数量参数,list,trump
**kwargs:用来发送键值对可变数量参数,dict

2、谈一谈python的装饰器(decorator)

装饰器是一个接收函数作为参数的闭包函数。它经常用于有切面需求的场景。比如:插入日志性能测试事务处理、缓存、权限校验等。
作用:
它能使函数的功能得到扩充,而同时不用修改函数本身的代码。
它能够增加函数执行前、执行后的行为,而不需对调用函数的代码做任何改变。

闭包函数:一个函数的返回值是另外一个函数,返回的函数调用父函数内部的变量,如果返回的函数在外部被执行,就产生了闭包。
闭包函数的作用:使函数外部能够调用函数内部放入属性和方法
闭包函数的优缺点:
    优点:使函数外部能够调用函数内部放入属性和方法
    缺点:闭包操作导致整个函数的内部环境被长久保存,占用大量内存

3、简要描述Python的垃圾回收机制(garbage collection)。

python垃圾回收机制以引用计数为主,标记-清除和分代回收为辅。
引用计数:Python在内存中存储每个对象的引用计数,对象被引用了计数加一,对象被释放了,计数减一,如果计数变成0,该对象就会消失,分配给该对象的内存就会释放出来。
标记-清除:是一种基于追踪回收(tracing GC)技术实现的垃圾回收算法。它分为两个阶段:第一阶段是标记阶段,GC会把所有的活动对象打上标记,第二阶段是把那些没有标记的对象非活动对象进行回收。对象之间通过引用(指针)连在一起,构成一个有向图,对象构成这个有向图的节点,而引用关系构成这个有向图的边。从根对象(root object)出发,沿着有向边遍历对象,可达的(reachable)对象标记为活动对象,不可达的对象就是要被清除的非活动对象。根对象就是全局变量、调用栈、寄存器。主要处理容器对象。
分代回收:Python将内存根据对象的存活时间划分为不同的集合,每个集合称为一个代,Python将内存分为了3“代”,分别为年轻代(第0代)、中年代(第1代)、老年代(第2代),他们对应的是3个链表,它们的垃圾收集频率与对象的存活时间的增大而减小。新创建的对象都会分配在年轻代,年轻代链表的总数达到上限时,Python垃圾收集机制就会被触发,把那些可以被回收的对象回收掉,而那些不会回收的对象就会被移到中年代去,依此类推,老年代中的对象是存活时间最久的对象,甚至是存活于整个系统的生命周期内。

4、Python多线程(multi-threading)。这是个好主意吗?

Python并不支持真正意义上的多线程,Python提供了多线程包。
Python中有一个叫Global Interpreter Lock(GIL)的东西,它能确保你的代码中永远只有一个线程在执行。经过GIL的处理,会增加执行的开销。这就意味着如果你先要提高代码执行效率,使用threading不是一个明智的选择,当然如果你的代码是io密集型,多线程可以明显提高效率,相反如果你的代码是CPU密集型的这种情况下多线程大部分是鸡肋。

5、os,sys有什么区别

os和sys的区别_qq_42626060的博客-CSDN博客_os和sys的区别

os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。

os 常用方法os.remove()删除文件os.rename()重命名文件os.walk()生成目录树下的所有文件名os.chdir()改变目录os.mkdir/makedirs 创建目录/多层目录os.rmdir/removedirs 删除目录/多层目录os.listdir()列出指定目录的文件os.getcwd()取得当前工作目录os.chmod()改变目录权限os.path.basename()去掉目录路径,返回文件名os.path.dirname()去掉文件名,返回目录路径os.path.join()将分离的各部分组合成一个路径名os.path.split()返回( dirname(),basename())元组os.path.splitext()(返回 filename,extension)元组os.path.getatime\ctime\mtime 分别返回最近访问、创建、修改时间os.path.getsize()返回文件大小os.path.exists()是否存在os.path.isabs()是否为绝对路径os.path.isdir()是否为目录os.path.isfile()是否为文件
sys 常用方法sys.argv 命令行参数 List,第一个元素是程序本身路径sys.modules.keys() 返回所有已经导入的模块列表sys.exc_info() 获 取 当 前 正 在 处 理 的 异 常 类 ,exc_type 、 exc_value 、exc_traceback 当前处理的异常详细信息sys.exit(n) 退出程序,正常退出时 exit(0)sys.hexversion 获取 Python 解释程序的版本值, 16 进制格式如: 0x020403F0sys.version 获取 Python 解释程序的版本信息sys.maxint 最大的 Int 值sys.maxunicode 最大的 Unicode 值sys.modules 返回系统导入的模块字段, key 是模块名, value 是模块sys.path 返回模块的搜索路径,初始化时使用 PYTHONPATH 环境变量的值sys.platfORM 返回操作系统平台名称sys.stdout 标准输出sys.stdin 标准输入sys.stderr 错误输出sys.exc_clear() 用来清除当前线程所出现的当前的或最近的错误信息sys.exec_prefix 返回平台独立的 python 文件安装的位置sys.byteorder 本 地 字 节 规 则 的 指 示 器 , big-endian 平 台 的 值 是'big',little-endian 平台的值是'little'sys.copyright 记录 python 版权相关的东西sys.api_version 解释器的 C 的 API 版本sys.version_info 返回当前所使用的Python版本号

因此,sys 模块提供了一系列的函数和变量,用于操控python 的运行时环境, 而 os 提供了访问操作系统底层的接口。

6、什么是lambda表达式?它有什么好处?

简单来说,lambda表达式通常是当你需要使用一个函数,但是又不想费脑袋去命名一个函数的时候使用,也就是通常所说的匿名函数

lambda表达式一般形式是:关键词lambda后面紧接一个或多个参数,紧接一个冒号“:”,紧接一个表达式。lambda表达式是一个表达式不是一个语句。

7、pass语句有什么作用

pass语句不会执行任何操作,一般作为占位符或者创建占位程序。

8、Python里面如何拷贝一个对象?

直接赋值:Python中对象之间的赋值是按引用传递的,不会开辟新的内存空间。如果要拷贝对象需要使用标准模板中的copy。

copy.copy:浅拷贝,只拷贝父对象,不拷贝父对象的子对象,它的子对象还是原对象中的子对象。
copy.deepcopy:深拷贝,拷贝父对象和子对象。深拷贝会递归地拷贝原对象中的每一个子对象,因此拷贝后的对象和原对象互不相关。

python中的is和==区别_Tonywu2018的博客-CSDN博客

9、__new__和__init__的区别。

__init__为初始化方法,__new__方法是真正的构造函数。
__new__是实例创建之前被调用,它的任务是创建并返回该实例,是静态方法
__init__是实例创建之后被调用的,然后设置对象属性的一些初始值。

总结:__new__方法在__init__方法之前被调用,并且__new__方法的返回值将传递给__init__方法作为第一个参数,最后__init__给这个实例设置一些参数。

10、Python中单下划线和双下划线分别是什么。

__name__:一种约定,Python内部的名字,用来与用户自定义的名字区分开,防止冲突
_name:一种约定,用来指定变量私有
__name:解释器用_classname__name来代替这个名字用以区别和其他类相同的命名

11、什么是生成器?

生成器是一种可迭代对象,可以挂起并保持当前的状态。

生成器遇到yield处会停止执行,调用next()或send()才会继续执行。。

定义一个生成器有两种方式,一种是生成器推导式,一种是在普通函数中添加yield语句并实例化。

12、什么是元类? 使用场景

元类是创建类的类,type还有继承自type的类都是元类。作用: 在类定义时(new, init)和类实例化时(call) 可以添加自定义的功能。

使用场景: ORM框架中创建一个类就代表数据库中的一个表,但是定义这个类时为了统一需要把里面的类属性全部改为小写,这个时候就要用元类重写new方法,把attrs字典里的key转为小写。

13、collections模块

collections模块提供了一些好用的容器数据类型,其中常用的有: namedtuple,deque,Counter,OrderedDict,defaultdict

14、为什么dict查找的时间复杂度是O(1)?

dict底层是哈希表,哈希表类似于C语言的数组,可以实现按索引随机访问

但dict的key不一定是整数,需要先通过哈希函数,再经过取余操作转换为索引

15、list tuple的底层结构

list和tuple底层都是顺序表结构。list底层是可变数组,数组里存放的是元素对象的指针。

列表用中括号表示,是可变序列,它的元素可以随时进行增删改;元组用括号表示,是不可变序列,元组比列表访问和处理速度快。

set的底层结构

哈希表,key就是元素,value都是空

16、class方法 和 static方法的区别

class方法的第一个参数是cls,可以访问类属性、类方法;

static方法和普通函数一样,只不过是放在类里,要通过类或实例来调用,但是它不能访问类和实例的属性和方法。

17、说一说Python自省

Python自省机制_ganma1的博客-CSDN博客_python自省

自省是指通过一定的机制查询到对象的内部结构,在python中一切皆对象,我们能通过自省机制得到对象的类型内部的属性。
常用函数:

  • dir()函数,返回 一个列表,包含对象所有属性和方法。
  • id()函数,用于返回一个对象的内存地址。
  • type()函数,用于放回一个对象的类型。
  • hasattr()函数,用于测试对象是否具有某个属性。
  • getattr()函数,用于获取对象某个属性。
  • isinstance() 函数测试对象,以确定它是否是某个特定类型或定制类的实例

python中的is和==区别

python中的is和==区别_Tonywu2018的博客-CSDN博客

python是一种面向对象的语言,python中对象包含三种基本要素:id(返回的是对象的地址)、type(返回的是对象的数据类型)及value(对象的值)。

is比较的是两个对象的地址值,也就是说两个对象是否为同一个实例对象;而==比较的是对象的值是否相等,其调用了对象的__eq__()方法。


参考文章:

【python八股】_阿牛哥666的博客-CSDN博客_python八股

python中的is和==区别_Tonywu2018的博客-CSDN博客

来源地址:https://blog.csdn.net/weixin_43570470/article/details/127726404

--结束END--

本文标题: Python八股文

本文链接: https://www.lsjlt.com/news/385046.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python八股文
    py的语言特性: 动态强类型 静/动态: 编绎/运行 时确定变量类型;弱/强类型: 会/不会发生隐式类型转换。在强类型中,不管在编译时还是运行时,一旦某个类型赋值给某个变量,它会持有这个类型,并且不能同其他类型在计算某个表达式时混合计算。 ...
    99+
    2023-08-31
    python
  • 面试八股文-python
    面试八股文-python 解释型语言与编译性语言面向对象和面向过程Python优点Python缺点装饰器python 装饰器@staticmethod和@classmethod区别和使用写一个...
    99+
    2023-09-02
    python 面试 开发语言
  • 我们一起聊聊 Python 八股文
    ​同志们好,今天带着大家一起来复习python中的基础问题,我们都知道python属于解释性语言,效率也就相对其它语言来说较低一些,这个较低只是运行稍微低些,但是呢,在很多场景买这些都是微不足道的凭借着语法的易于理解和学习,可以在短时间内完...
    99+
    2023-05-14
    网络 Python 文件
  • Java 八股文-基础篇
    Java 基础 一、Java 概述 1.什么是 Java? Java 是一门面向对象的编程语言,不仅吸收了 C++语言的各种优点,还摒弃了 C++里难以理解的多继承、指针等概念,因此 Java 语言具...
    99+
    2023-09-18
    java jvm 开发语言 八股文
  • Java面试必备八股文
    文章目录 一、Java基础篇1.1)Java有哪几种数据类型1.2)JVM、JRE和JDK的关系1.3)Switch支持的数据类型?1.4)为什么float=3.4报错1.5)final 有什么用?1.6)String有哪些特性1....
    99+
    2023-08-16
    java 面试 jvm
  • 嵌入式八股文汇总
    1、C/C++ 1.1 关键字 (参考”嵌入式及Linux那些事“以及众多帖子汇总而成) volatile ​ 当声明指向设备寄存器的指针时一定要用volatile,它会告诉编译器不要对存储在这个地 ...
    99+
    2023-10-12
    c++ c语言 单片机 stm32
  • 2023年 Java 面试八股文(20w字)
    目录 第一章-Java基础篇 1、你是怎样理解OOP面向对象    难度系数:⭐ 2、重载与重写区别    难度系数:⭐ 3、接口与抽象类的区别    难度系数:⭐ 4、深拷贝与浅拷贝的理解    难度系数:⭐ 5、sleep和wait区别...
    99+
    2023-08-30
    java 面试 python
  • 剑指大厂,手撕 Java 八股文
    tip: 此贴为目录贴,定期更新 toNew: 时间是最好的答案,它能解决所有问题。坚持!!! ✌本文章旨在总结 Java 的知识生态以及帮助需要学习者和求职者,本人从事应用安全和大数据领域,有8年开发经验,5年面试官经验,Java技术...
    99+
    2023-08-16
    java 面试 学习 八股文 剑指大厂
  • 2023年 Java 面试八股文(25w字)
    目录 一.Java 基础面试题1.Java概述Java语言有哪些特点?Java和C++有什么关系,它们有什么区别?JVM、JRE和JDK的关系是什么?**什么是字节码**采用字节码的好处是什么Oracle JDK 和 OpenJDK...
    99+
    2023-08-28
    面试
  • MySQL面试八股文(2022最新整理)
    事务的四大特性? 事务特性ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。一致性是指一个事...
    99+
    2023-08-31
    数据库 sql java
  • Java最全八股文(2023最新整理)
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎s...
    99+
    2023-08-16
    java jvm
  • 黑马B站八股文学习笔记
    视频地址:https://www.yuque.com/linxun-bpyj0/linxun/vy91es9lyg7kbfnr 大纲 基础篇 基础篇要点:算法、数据结构、基础设计模式 1. 二分查找...
    99+
    2023-09-05
    学习 笔记 java
  • c语言八股文指的是什么
    C语言八股文是指在学习C语言编程过程中,常见的一种模式化、机械化的学习方式。通常包括对基本语法规则的死记硬背、简单的代码编写和机械性...
    99+
    2024-04-02
  • 【Python八股文系列】:100个Python的面试/笔试高频考点
    Python的100个面试/笔试高频考点 本文主要整理了关于Python的面试/笔试的一些考点,可用于查漏补缺。 涉及到的一些Python进阶知识,可以查看专栏学习:《Python进阶》 ...
    99+
    2023-08-31
    python 面试 开发语言
  • 三天吃透MySQL八股文(2023最新整理)
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式...
    99+
    2023-09-08
    mysql java 数据库
  • 2024最强秋招八股文(精简、纯手打)
    7/28日已更新,错误已修改~~~有错误的地方,欢迎大家留言! 目录  一、Java基础篇 1.接口和抽象类的区别 2.重载和重写的区别 3.==和equals的区别 4.异常处理机制 5.HashMap原理 6.想要线程安全的HashMa...
    99+
    2023-08-31
    java 面试 jvm mysql spring 1024程序员节
  • python 知识点/面试题目总结(八股文)算法工程师必备
    python 知识点/面试题目总结(八股文)算法工程师必备 1. python的内存管理以及垃圾回收机制2. python中的pass有什么作用3. python的strip4. python...
    99+
    2023-09-09
    面试 python 算法
  • 全网最全JAVA面试八股文,终于整理完了
    前言 又到一年金三银四面试跳槽季,你准备好了吗? 今天为大家整理了目前互联网出现率最高的大厂面试题,所谓八股文也就是指文章的八个部分,文体有固定格式:由破题、承题、起讲、入题、起股、中股、后股、束股八部分组成,题目一律出自四书五经中的原文。...
    99+
    2023-09-01
    java 面试 jvm Java开发 职场和发展
  • (完整版)2022大厂Java八股文面试题库|附答案
    Java基础 说下面向对象四大特性Java语言有些特点什么是Java程序的主类?应用程序和小程序的主类有何不同?访问修饰符public,private,protected,以及不写(默认)时的区别?float f=3.4;是否正确?Java...
    99+
    2023-08-31
    java 面试 开发语言 后端 程序人生
  • Python八荣八耻
    Python-CN邮件组里看到的,原作者bigSword,转载一下:   在啄木鸟WiKi上面看到Python八荣八耻,感觉挺有意思的。也许是Zoom.Q写的,未经允许,转载如下: 以动手实践为荣 , 以只看不练为耻; 以打印日志为荣 ,...
    99+
    2023-01-31
    Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作