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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【项目管理】如何用思维导图做计划?

思维导图是一种可视化的思维工具&#xff0c;它可以让我们的思考过程变得很直观。它可以帮助我们考虑到计划的各个方方面面&#xff0c;确定各要素之间的关系。 思维导图总结功能很强&#xff0c;完成计划后&#xff0c;可以用思维导图进行总结&#xff0c;为下一次做计划积累…

使用【ShardingSphere】分库分表

前言 ShardingSphere可以支撑分库分表&#xff0c;刚果商城采用了垂直分库&#xff08;根据不同业务拆分数据库&#xff09;&#xff0c;因此此文章只演示水平分表。 垂直分库 不同业务拆分为不同的数据库&#xff08;例如商城业务&#xff09; 水平分表 分表可以通过将大表拆…

移液器吸头材质选择——PFA吸头在半导体化工行业的应用

PFA吸头是一种高性能移液器配件&#xff0c;这种材料具有优异的耐化学品、耐热和电绝缘性能&#xff0c;使得PFA吸头在应用中表现出色。那么它有哪些特点呢&#xff1f; 首先&#xff0c;PFA吸头具有卓越的耐化学腐蚀性能。无论是酸性溶液、碱性溶液还是有机溶剂&#xff0c;P…

如何用CHAT帮你提高工作效率?

问CHAT&#xff1a;从规范项目管理流程交付&#xff0c;分别对项目信息安全管理&#xff0c;项目预算管理和项目采购管理三个方面提建议 CHAT回复&#xff1a; 项目信息安全管理: 1. 制定详细的信息安全政策&#xff0c;所有参与项目的员工必须遵守&#xff0c;对其中涉及敏感…

wpf TelerikUI使用DragDropManager

首先&#xff0c;我先创建事务对象ApplicationInfo&#xff0c;当暴露出一对属性当例子集合对于构成ListBoxes。这个类在例子中显示如下代码&#xff1a; public class ApplicationInfo { public Double Price { get; set; } public String IconPath { get; set; } public …

亚马逊S3V4验签与MINIO验签区别

1、先看下官方文档 AWS S3V4 DEMO 2、实际调用试试 1&#xff09;代码 // 计算auth// for a simple GET, we have no body so supply the precomputed empty hashMap<String, String> headers new HashMap<String, String>();headers.put("x-amz-content…

0013Java安卓程序设计-ssm酒品移动电商平台app

文章目录 **摘要**目录系统实现5.1 APP端5.2管理员功能模块开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅&#x1f427;裙&#xff1a;776871563 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析…

Firewalld 防火墙配置

文章目录 Firewalld 防火墙配置1. Firewalld 概述2. 区域名称及策略规则3. Firewalld 配置方法4. Firewalld 参数和命令5. Firewalld 两种模式6. Firewalld 使用 Firewalld 防火墙配置 1. Firewalld 概述 firewalld 是一个动态防火墙管理器&#xff0c;作为 Systemd 管理的防…

【docker】常用命令

启动docker服务 systemctl start docker 停止docker服务 systemctl stop docker 重启docker服务 systemctl restart docker 查看docker服务状态 systemctl status docker 设置开机启动docker服务 systemctl enable docker 设置关闭开机启动docker服务 systemctl disable …

数据在内存中的存储(浮点型篇)

1.例子&#xff1a;5.5&#xff1a;内存存储为101.1&#xff0c;十分位百分位依次为2的-1次方&#xff0c;2的-2次方&#xff0c;而使用科学计数法可以改写为1.011*2的2次方 2.国际标准公式&#xff1a;-1的D次方*M*2的E次方&#xff0c;x1负0正 3.M在存储时默认整数部分为1&…

springcloud微服务篇--1.认识微服务

一、服务架构演变。 单体架构&#xff1a; 将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署。 优点&#xff1a;架构简单 &#xff0c;部署成本低。 缺点&#xff1a;耦合度高 分布式架构 根据业务功能对系统进行拆分&#xff0c;每个业务模块作为独立项…

[idea]idea连接clickhouse23.6.2.18

一、安装驱动 直接在pom.xml加上那个lz4也是必要的不然会报错 <dependency><groupId>com.clickhouse</groupId><artifactId>clickhouse-jdbc</artifactId><version>0.4.2</version></dependency><dependency><group…

【51单片机系列】使用74HC595控制数码管显示

使用74HC595结合数码管显示字符。 proteus仿真设计如下&#xff0c;74HC595的输出端连接到动态数码管的位选和静态数码管的段选&#xff0c;动态数码管的段选连接到P0口。这两个数码管都是共阴极的。 静态数码管显示字符0-F&#xff0c;软件设计如下&#xff1a; /*实现功能&a…

【hcie-cloud】【8】华为云Stack_LLD设计【部署设计、资源设计、服务设计、学习推荐、缩略语】【下】

设计概览、整体架构设计、网络设计 看下面-这篇文章 【hcie-cloud】【7】华为云Stack_LLD设计【设计概览、整体架构设计、网络设计、部署设计、资源设计、服务设计】【上】 部署设计 云平台整体部署架构 图中在Region下每个灰底都代表一个数据中心&#xff0c;AZ1可以跨数据…

yarn系统架构与安装

1.1 YARN系统架构 YARN的基本思想是将资源管理和作业调度/监视功能划分为单独的守护进程。其思想是拥有一个全局ResourceManager (RM)&#xff0c;以及每个应用程序拥有一个ApplicationMaster (AM)。应用程序可以是单个作业&#xff0c;也可以是一组作业。 一个ResourceManage…

【信息安全】-ISO/IEC 27001-2022(翻译)

文章目录 范围规范性引用文件3 术语和定义4 组织环境&#xff08;P&#xff09;4.1 理解组织及其环境4.2 理解相关方的需求和期望组织应确定:a) 信息安全管理体系相关方;b) 这些相关方的相关要求;c) 哪些要求可以通过信息安全管理体系得到解决。注:相关方的要求可包括法律、法规…

kuboard如何部署nacos?

​ kuboard如何部署nacos&#xff1f; 这个快速开始手册是帮忙您快速在您的电脑上&#xff0c;下载、安装并使用 Nacos。 项目包含一个可构建的Nacos Docker Image&#xff0c;旨在利用StatefulSets在Kubernetes上部署Nacos。 在高级使用中,Nacos在K8S拥有自动扩容缩容和数据…

nginx 前端服务调用后端服务报426

nginx 前端服务调用后端服务报426 在配置文件中加上一句配置 2&#xff1a;外挂出来

屏幕分辨率修改工具SwitchResX mac功能特点

SwitchResX mac是可用于修改和管理显示器的分辨率和刷新率。 SwitchResX mac功能和特点 支持多种分辨率和刷新率&#xff1a;SwitchResX可以添加和管理多种分辨率和刷新率&#xff0c;包括自定义分辨率和刷新率。 自动切换分辨率&#xff1a;SwitchResX可以根据应用程序和窗口…