Python常见面试知识总结(二):数据结构、类方法及异常处理

【十三】Python中assert的作用?

Python中assert(断言)用于判断一个表达式,在表达式条件为 f a l s e false false的时候触发异常。

断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况。

Rocky直接举一些例子:

>>> assert True 
>>> assert False
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>> assert 1 == 1
>>> assert 1 == 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>> assert 1 != 2

【十四】Python中互换变量有不用创建临时变量的方法吗?

在Python中,当我们想要互换两个变量的值或将列表中的两个值交换时,我们可以使用如下的格式进行,不需要创建临时变量:

x, y = y, x

这么做的原理是什么呢?

首先一般情况下Python是从左到右解析一个语句的,但在赋值操作的时候,因为是右值具有更高的计算优先级,所以需要从右向左解析。

对于上面的代码,它的执行顺序如下:

先计算右值 y , x y , x y,x(这里是简单的原值,但可能会有表达式或者函数调用的计算过程), 在内存中创建元组(tuple),存储 y , x y, x y,x分别对应的值;计算左边的标识符,元组被分别分配给左值,通过解包(unpacking),元组中第一个标示符对应的值 ( y ) (y) (y),分配给左边第一个标示符 ( x ) (x) (x),元组中第二个标示符对应的值 ( x ) (x) (x),分配给左边第二个标示符 ( y ) (y) (y),完成了 x x x y y y的值交换。

【十五】Python中的主要数据结构都有哪些?

  1. 列表(list)
  2. 元组(tuple)
  3. 字典(dict)
  4. 集合(set)

【十六】Python中的可变对象和不可变对象?

可变对象与不可变对象的区别在于对象本身是否可变。

可变对象:list(列表) dict(字典) set(集合)

不可变对象:tuple(元组) string(字符串) int(整型) float(浮点型) bool(布尔型)

【十七】Python中的None代表什么?

None是一个特殊的常量,表示空值,其和False,0以及空字符串不同,它是一个特殊Python对象, None的类型是NoneType。

None和任何其他的数据类型比较返回False。

>>> None == 0
False
>>> None == ' '
False
>>> None == None
True
>>> None == False
False

我们可以将None复制给任何变量,也可以给None赋值。

【十八】Python中 ∗ a r g s *args args ∗ ∗ k w a r g s **kwargs kwargs的区别?

∗ a r g s *args args ∗ ∗ k w a r g s **kwargs kwargs主要用于函数定义。我们可以将不定数量的参数传递给一个函数。

这里的不定的意思是:预先并不知道函数使用者会传递多少个参数, 所以在这个场景下使用这两个关键字。

∗ a r g s *args args

∗ a r g s *args args是用来发送一个非键值对的可变数量的参数列表给一个函数。

我们直接看一个例子:

def test_var_args(f_arg, *argv):
    print("first normal arg:", f_arg)
    for arg in argv:
        print("another arg through *argv:", arg)

test_var_args('hello', 'python', 'ddd', 'test')

-----------------结果如下-----------------------
first normal arg: hello
another arg through *argv: python
another arg through *argv: ddd
another arg through *argv: test

∗ ∗ k w a r g s **kwargs kwargs

∗ ∗ k w a r g s **kwargs kwargs允许我们将不定长度的键值对, 作为参数传递给一个函数。如果我们想要在一个函数里处理带名字的参数, 我们可以使用 ∗ ∗ k w a r g s **kwargs kwargs

我们同样举一个例子:

def greet_me(**kwargs):
    for key, value in kwargs.items():
        print("{0} == {1}".format(key, value))

greet_me(name="yasoob")

-----------结果如下-------------
name == yasoob

【十九】Python中Numpy的broadcasting机制?

Python的Numpy库是一个非常实用的数学计算库,其broadcasting机制给我们的矩阵运算带来了极大地方便。

我们先看下面的一个例子:

>>> import numpy as np
>>> a = np.array([1,2,3])
>>> a
array([1, 2, 3])
>>> b = np.array([6,6,6])
>>> b
array([6, 6, 6])
>>> c = a + b
>>> c
array([7, 8, 9])

上面的代码其实就是把数组 a a a和数组 b b b中同样位置的每对元素相加。这里 a a a b b b是相同长度的数组。

如果两个数组的长度不一致,这时候broadcasting就可以发挥作用了。

比如下面的代码:

>>> d = a + 5
>>> d
array([6, 7, 8])

broadcasting会把 5 5 5扩展成 [ 5 , 5 , 5 ] [5,5,5] [5,5,5],然后上面的代码就变成了对两个同样长度的数组相加。示意图如下(broadcasting不会分配额外的内存来存取被复制的数据,这里只是方面描述):

我们接下来看看多维数组的情况:

>>> e
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])
>>> e + a
array([[2., 3., 4.],
       [2., 3., 4.],
       [2., 3., 4.]])

在这里一维数组被扩展成了二维数组,和 e e e的尺寸相同。示意图如下所示:

我们再来看一个需要对两个数组都做broadcasting的例子:

>>> b = np.arange(3).reshape((3,1))
>>> b
array([[0],
       [1],
       [2]])
>>> b + a
array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5]])

在这里 a a a b b b都被扩展成相同的尺寸的二维数组。示意图如下所示:

总结broadcasting的一些规则:

  1. 如果两个数组维数不相等,维数较低的数组的shape进行填充,直到和高维数组的维数匹配。
  2. 如果两个数组维数相同,但某些维度的长度不同,那么长度为1的维度会被扩展,和另一数组的同维度的长度匹配。
  3. 如果两个数组维数相同,但有任一维度的长度不同且不为1,则报错。
>>> a = np.arange(3)
>>> a
array([0, 1, 2])
>>> b = np.ones((2,3))
>>> b
array([[1., 1., 1.],
       [1., 1., 1.]])
>>> a.shape
(3,)
>>> a + b
array([[1., 2., 3.],
       [1., 2., 3.]])

接下来我们看看报错的例子:

>>> a = np.arange(3)
>>> a
array([0, 1, 2])
>>> b = np.ones((3,2))
>>> b
array([[1., 1.],
       [1., 1.],
       [1., 1.]])
>>> a + b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (3,) (3,2)

【二十】Python中的实例方法、静态方法和类方法三者区别?

不用@classmethod和@staticmethod修饰的方法为实例方法。在类中定义的方法默认都是实例方法。实例方法最大的特点是它至少要包含一个self参数,用于绑定调用此方法的实例对象,实例方法通常可以用类对象直接调用。

采用@classmethod修饰的方法为类方法。类方法和实例方法相似,它至少也要包含一个参数,只不过类方法中通常将其命名为cls,Python会自动将类本身绑定给cls参数。我们在调用类方法时,无需显式为cls参数传参。

采用@staticmethod修饰的方法为静态方法。静态方法没有类似self、cls这样的特殊参数,因此Python的解释器不会对它包含的参数做任何类或对象的绑定。也正因为如此,类的静态方法中无法调用任何类属性和类方法。

【二十一】Python中常见的切片操作

[:n]代表列表中的第一项到第n项。我们看一个例子:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(example[:6])

---------结果---------
[1, 2, 3, 4, 5, 6]

[n:]代表列表中第n+1项到最后一项:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(example[6:])

---------结果---------
[7, 8, 9, 10]

[-1]代表取列表的最后一个元素:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(example[-1])

---------结果---------
10

[:-1]代表取除了最后一个元素的所有元素:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(example[:-1])

---------结果---------
[1, 2, 3, 4, 5, 6, 7, 8, 9]

[::-1]代表取整个列表的相反列表:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(example[::-1])

---------结果---------
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

[1:]代表从第二个元素意指读取到最后一个元素:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(example[1:])

---------结果---------
[2, 3, 4, 5, 6, 7, 8, 9, 10]

[4::-1]代表取下标为4(即第五个元素)的元素和之前的元素反转读取:

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(example[4::-1])

---------结果---------
[5, 4, 3, 2, 1]

【二十二】Python中如何进行异常处理?

一般情况下,在Python无法正常处理程序时就会发生一个异常。异常在Python中是一个对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

捕捉异常可以使用try,except和finally语句。

try和except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

try:
    6688 / 0
except:
    '''异常的父类,可以捕获所有的异常'''
    print "0不能被除"
else:
    '''保护不抛出异常的代码'''
    print "没有异常"
finally:
    print "最后总是要执行我"

【二十三】Python中remove,del以及pop之间的区别?

remove,del以及pop都可以用于删除列表、字符串等里面的元素,但是具体用法并不相同。

  1. remove是剔除第一个匹配的值。
  2. del是通过索引来删除当中的元素。
  3. pop是通过索引来删除当中的元素,并且返回该元素;若括号内不添加索引值,则默认删除最后一个元素。
>>> a = [0, 1, 2, 1, 3] 
>>> a.remove(1) 
>>> a 
[0, 2, 1, 3] 

>>> a = [0, 1, 2, 1, 3] 
>>> del a[1] 
[0, 2, 1, 3] 

>>> a = [0, 1, 2, 1, 3] 
>>> a.pop(1) 
1 
>>> a 
[0, 2, 1, 3] 

文末推荐

在这里插入图片描述
内容介绍:
《机器学习平台架构实战》详细阐述了与机器学习平台架构相关的基本解决方案,主要包括机器学习和机器学习解决方案架构,机器学习的业务用例,机器学习算法,机器学习的数据管理,开源机器学习库,Kubernetes容器编排基础设施管理,开源机器学习平台,使用AWS机器学习服务构建数据科学环境,使用AWS机器学习服务构建企业机器学习架构,高级机器学习工程,机器学习治理、偏差、可解释性和隐私,使用人工智能服务和机器学习平台构建机器学习解决方案等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。
当当: https://product.dangdang.com/29625469.html
京东: https://item.jd.com/13855627.html

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/236691.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023最新版JavaSE教程——第10天:多线程

目录 一、相关概念1.1 程序、进程与线程1.2 查看进程和线程1.3 线程调度1.4 多线程程序的优点1.5 补充概念1.5.1 单核CPU和多核CPU1.5.2 并行与并发 二、创建和启动线程2.1 概述2.2 方式1&#xff1a;继承Thread类2.3 方式2&#xff1a;实现Runnable接口2.4 变形写法2.5 对比两…

OpenAI接口调用示例

最近为公司做了一个ChatGPT工具&#xff0c;这里展示一下OpenAI接口的调用 前提条件 访问OpenAI官网&#xff08;国内需要翻墙&#xff09;的账号&#xff0c;需要sk 地址&#xff1a;https://platform.openai.com 依赖 使用开源工具调用OpenAI接口&#xff0c;依赖如下&am…

使用yum/dnf管理软件包

本章主要介绍使用 yum 对软件包进行管理。 yum 的介绍搭建yum源创建私有仓库yum客户端的配置yum的基本使用使用第三方yum源 使用rpm安装包时经常会遇到一个问题就是包依赖&#xff0c;如下所示。 [rootrhel03 ~]# rpm -ivh /mnt/AppStream/Packages/httpd-2.4.37-41.modulee…

mysql原理--B+树索引

1.没有索引的查找 1.1.在一个页中的查找 (1). 以主键为搜索条件 可以在 页目录 中使用二分法快速定位到对应的槽&#xff0c;然后再遍历该槽对应分组中的记录即可快速找到指定的记录。 (2). 以其他列作为搜索条件 这种情况下只能从 最小记录 开始依次遍历单链表中的每条记录&am…

Python爬虫实战之爬取京东商品数据并实实现数据可视化

文章目录 一、开发工具二、环境搭建三、原理简介四、数据可视化关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 …

《人工智能导论》知识思维导图梳理【1~5章节】

文章目录 说明第一章 绪论人工只能概述 第二章 知识表示和知识图谱一阶谓词逻辑和知识表示法产生式表示和框架表示法 第三章 确定性推理方法推理的基本概念自然演绎推理归结演绎推理谓词公式化子句集鲁宾孙归结原理归结反演归结反演求解问题 第四章 不确定性推理方法似然推理可…

博世汽车产业转型,裁1500人 | 百能云芯

博世&#xff08;Bosch&#xff09;&#xff0c;作为全球领先的汽车零部件制造商&#xff0c;近日宣布了一项战略性的组织调整计划&#xff0c;以更好地适应不断演变的汽车行业需求和技术革新。根据《路透社》的报道&#xff0c;博世计划在2025年底之前&#xff0c;在其位于德国…

读书笔记 | 自我管理的关键是提高执行力

哈喽啊&#xff0c;你好&#xff0c;我是雷工&#xff01; 有句话说&#xff0c;能管好自己才是真的本事。 自我管理&#xff0c;管好自己很重要。 我们之所以懂得这么多的道理&#xff0c;却依然过不好这一生&#xff1f; 很大部分原因是因为管不住自己&#xff0c;做不到。 …

智能优化算法应用:基于头脑风暴算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于头脑风暴算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于头脑风暴算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.头脑风暴算法4.实验参数设定5.算法结果6.…

NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserv

问题 在IDEA运行HBASE脚本时出现如下报错&#xff1a; org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family table does not exist in region hbase:meta,,1.1588230740 i…

【人工智能 | 知识表示方法】状态空间法 语义网络,良好的知识表示是解题的关键!(笔记总结系列)

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

伪原创是什么意思?深度解析什么是伪原创

在信息爆炸的今天&#xff0c;人们对于内容的需求也愈发庞大。在这个背景下&#xff0c;一种名为“伪原创”的概念逐渐引起了人们的关注。究竟什么是伪原创&#xff1f;这是一个值得深入挖掘的话题。 一、什么是伪原创 在文字创作领域&#xff0c;原创是指作者独创的、未曾存…

gitee对接使用

1.创建一个文件夹 2.进入Gitee接受对方项目编辑 3.打开终端初始化一开始创建的文件夹 git init 3.1打开终端 3.2输入git.init 4.克隆对方的项目 4.1进入Gitee复制对方项目的路径 4.2在编辑器终端内克隆对方项目 git clone 网址 如此你的编辑器就会出现对方的项目 …

RocketMQ-RocketMQ高性能核心原理节点(流程图)

NamesrvServer启动流程图&#xff1a; namesrvServer启动简图&#xff1a; Broker服务启动过程流程图 Broker服务启动过程流程简图

at least 1 bean which qualifies as autowire candidate

No qualifying bean of type com. spdbcccdl.mapper.dl.DatabaseDaoavailable: expected at least 1 bean which qualifies as autowire candidate.

Swift “黑魔法”之动态获取类实例隐藏属性的值

概览 在 Swift 代码的调试中,我们时常惊叹调试器的无所不能:对于大部分“黑盒”类实例的内容,调试器也都能探查的一清二楚。 想要自己在运行时也能轻松找到 Thread 实例“私有”属性的值吗(比如 seqNum)? 在本篇博文中您将学到如下内容: 概览1. 借我,借我,一双慧眼吧…

if - else 实现点击展开 / 折叠

在前端开发过程中&#xff0c;我们经常需要使用到点击展开/折叠的按钮。 此案例是一个数组嵌套数组的效果展示&#xff0c;使用的是v-if else 来实现的展开效果。 一、实现方法 if...else&#xff1a;当指定条件为真&#xff0c;if 语句会执行一段语句。如果条件为假&#x…

【BI】FineBI功能学习路径-20231211

FineBI功能学习路径 https://help.fanruan.com/finebi/doc-view-1757.html 编辑数据概述 1.1 调整数据结构 1.2 简化数据 2.1上下合并 2.2其他表添加列 2.3左右合并 新增分析指标 函数参考 https://help.fanruan.com/finereport/doc-view-1897.html 数值函数 日期函数 文…

ESP8266模块(CH340)零基础实战

USB数据线连接ESP8266模块到电脑 先按住FLASH键,再按一下RST键,然后松开 此时电脑可识别出CH340 COM接口 CH340芯片厂商网址: wch.cn 传输比特率9600 win11自带驱动 下载Arduino IDE