Python 基础问题

文章目录

      • python 中有哪些类型或数据结构
      • 什么是有序和无序
      • 什么是可变和不可变
      • 字典中,什么类型可以当做key去使用
      • 闭包是什么
      • 装饰器是什么

python 中有哪些类型或数据结构

在 Python 中,有多种类型和数据结构可用于存储和组织数据。以下是一些常见的类型和数据结构:

  1. 数值型(Numeric Types):用于表示数字的类型,包括整数(int)、浮点数(float)和复数(complex)等。
  2. 字符串(String):用于表示文本数据的类型,由一系列字符组成,使用单引号或双引号括起来。
  3. 列表(List):可变的有序序列,可以包含不同类型的元素。使用方括号括起,元素之间使用逗号分隔。
  4. 元组(Tuple):不可变的有序序列,与列表类似,但元素不可修改。使用圆括号括起,元素之间使用逗号分隔。
  5. 集合(Set):无序的数据集合,没有重复元素,支持基本的集合操作,如并集、交集、差集等。
  6. 字典(Dictionary):无序的键值对集合,每个元素由一个唯一键和对应的值组成,用大括号括起,键和值之间使用冒号分隔。
  7. 布尔型(Boolean):表示真或假的值,只有两个取值:TrueFalse
  8. 零值(None):表示空和缺失的特殊对象,常用于表示一个没有值的变量。

除了上述基本类型和数据结构,Python 还提供了许多其他类型和数据结构,如字节串(bytes)、字节数组(bytearray)、范围(range)、枚举(enum)等。此外,还可以使用模块和库来引入自定义的数据结构和类型,以满足特定的编程需求。

这些类型和数据结构在 Python 中非常常用,开发者可以根据具体的需求选择合适的类型来存储和操作数据。

什么是有序和无序

有序(Ordered)和无序(Unordered)是描述数据的排列方式或组织形式的概念。

有序指的是数据的元素按照一定的顺序进行排列,并且这个顺序是可以预测和可靠的。在有序数据中,元素之间存在一种明确的关系或结构。通过索引或位置,我们可以访问和获取特定位置的元素。常见的有序数据结构包括列表(List)、元组(Tuple)、字符串(String)等。

例如,一个列表 [1, 2, 3, 4] 是有序的,其中元素按照从左到右的顺序排列。我们可以使用索引来访问特定位置的元素,如 my_list[0] 表示获取列表中的第一个元素。

相反,无序指的是数据的元素没有明确的顺序或排列方式。元素在容器中不存在特定的位置或索引,因此不能准确地预测或确定元素的顺序。常见的无序数据结构包括集合(Set)、字典(Dictionary)等。

例如,一个集合 {1, 2, 3, 4} 是无序的,其中元素之间没有特定的顺序。我们不能使用索引来获取某个元素,只能通过成员关系判断一个元素是否存在于集合中。

需要注意的是,有序和无序仅描述了数据的排列方式,并不代表数据的值或内容的有序或无序。在有序数据结构中,元素的值仍然可以是无序的,而在无序数据结构中,元素的值也可以按一定的方式进行组织和排序。

什么是可变和不可变

可变(Mutable)和不可变(Immutable)是描述数据对象是否可以被修改的概念。

可变指的是数据对象的值可以被修改或改变。这意味着在对可变对象进行操作时,可以更改其内部的状态或内容,而对象的身份或标识不会改变。可变对象可以添加、删除或更新其元素。常见的可变对象包括列表(List)、字典(Dictionary)、集合(Set)等。

例如,对于一个列表 [1, 2, 3],我们可以执行操作来添加一个新元素,如 my_list.append(4),此时该列表就会改变并包含新的元素。

相反,不可变指的是数据对象的值不能被修改或改变。当尝试修改不可变对象时,实际上是创建了一个新的对象,而原始对象保持不变。不可变对象的值在创建后就无法更改。常见的不可变对象包括整数(int)、浮点数(float)、字符串(string)、元组(tuple)等。

例如,对于一个字符串 "Hello",我们不能直接在原始字符串上进行修改,但可以通过创建新的字符串来进行操作,如 new_string = my_string + " World",此时会生成一个新的字符串对象。

不可变对象的优点包括更安全和可靠。由于不可变对象不可更改,因此在多个引用之间共享时,不会出现意外的副作用或不一致的结果。

需要注意的是,对一个变量重新赋值并不改变原始对象的可变性。例如,对一个可变对象重新赋值后,该变量引用了一个新的对象,但原始对象仍然存在于内存中,因此它的内部状态可以被修改。而对一个不可变对象重新赋值时,会创建一个新的对象,原始对象也不会改变。

a = [1, 2, 3, 4]
print(id(a))  # 1534040865600a.append(5)
print(id(a))  # 1534040865600c = a
print(id(c))  # 2394275183424b = a.copy()
print(id(b))  # 2989132595456print(a == b)  # Trueprint(a is b)  # False
当你修改列表的时候,他的id不会改变。这就是可变
a = "cxk"
print(id(a))  # 2874637880752
a += "d"
print(a, id(a))  # 2874637880560
当你修改元组就压根不能修改
字符串可以修改,但是改后id会变,这就是不可变

字典中,什么类型可以当做key去使用

在字典中,只有不可变的数据类型可以作为键(key)使用。这是因为字典的键需要具备哈希(hash)的特性,而哈希值是通过键的内容计算得到的。

以下是一些常见的可作为字典键的数据类型:

  1. 整数(int):整数是不可变的,可以作为字典的键。
  2. 浮点数(float):浮点数也是不可变的,可以作为字典的键。
  3. 字符串(str):字符串是不可变的,常用作字典的键。
  4. 元组(tuple):元组是不可变的,因此可以作为字典的键。但要注意,元组只有当其内部的元素也都是不可变类型时,才能作为字典的键。

以下是一些不能作为字典键的数据类型:

  1. 列表(list):列表是可变的,因此不能作为字典的键。
  2. 字典(dictionary):字典本身是可变的,所以不能作为字典的键。
  3. 集合(set):集合是可变的,不能作为字典的键。

需要注意的是,虽然字符串和整数是可哈希的,并且可以作为字典的键,但相同内容的字符串对象或整数对象,在内存中只有一个实例,并且具有相同的哈希值。这意味着当使用相同内容的字符串或整数作为键时,它们会被视为相同的键,并且只能在字典中出现一次。如果尝试使用列表、字典或集合作为键,则会引发 TypeError 异常。

闭包是什么

闭包(Closure)是指在一个函数内部定义的函数,并且该内部函数可以访问外部函数的变量、参数以及定义的其他函数。闭包可以捕获外部函数的状态,包括局部变量、参数等,并将其保存起来,使得外部函数的状态在内部函数被调用时仍然保持有效。

在Python中,当一个内部函数引用了外部函数的变量时,就会形成一个闭包。闭包函数可以像普通函数一样被调用,并且可以访问外部函数的变量,即使外部函数已经执行结束。

下面是一个简单的示例:

pythonCopy Codedef outer_function(x):def inner_function(y):return x + yreturn inner_functionclosure = outer_function(10)
print(closure(5))  # 输出 15

上述代码中,outer_function 是一个外部函数,它接受一个参数 x,并在内部定义了 inner_functioninner_function 可以访问外部函数的参数 x,并返回 x + y 的结果。

通过调用 outer_function(10),我们得到一个闭包 closure,它绑定了 x 的值为 10。然后,我们再次调用 closure(5),实际上是调用了内部函数 inner_function,并传入参数 y 值为 5。最终的结果是 10 + 5,即 15。

闭包在编程中有一些应用场景,其中一个常见的是延迟计算。通过使用闭包,我们可以将一些状态或变量的绑定延迟到函数被调用的时候,从而实现一些特定的功能,例如惰性求值、缓存等。

需要注意的是,在使用闭包时,要注意处理外部函数变量的生命周期,避免出现意外的问题,如变量泄漏等。

装饰器是什么

装饰器利用了闭包中内部函数可以访问外部函数参数的特征 和 函数可以当做参数传递的特征实现。

def logger(func):def wrapper(*args, **kwargs):print("Function {}() is called with arguments: {}, {}".format(func.__name__, args, kwargs))result = func(*args, **kwargs)print("Function {}() returns: {}".format(func.__name__, result))return resultreturn wrapper@logger
def add(a, b):return a + badd(2, 3)  # 输出: Function add() is called with arguments: (2, 3), {}#      Function add() returns: 5

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

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

相关文章

golang——工程组件logrus日志记录框架(结构化记录,支持文件切割,hook)

logrus 介绍一个golang 日志框架logrus 支持文本与JSON数据格式支持结构化记录支持hook 文档介绍 logrus文档 std 官方案例介绍了如何配置std打印 package mainimport ("os"log "github.com/sirupsen/logrus" )func init() {// Log as JSON instead…

Unoconv入门介绍和问题汇总

简介:Unoconv是一款基于LibreOffice/ Openoffice开发的命令行工具,可以将不同格式的文件(如DOC、PPT、PDF等)在不同的操作系统上通过Libreoffice/Openoffice转换为PDF、ODT、DOC、PNG、PPTX等格式,并支持在命令行中指定…

Elasticsearch学习笔记

1.核心概念 bucket: 一个数据分组(类似于sql group by以后的数据)metric:对bucket执行的某种聚合分析的操作,比如说求平均值,最大值,最小值。一些系列的统计方法(类似 select count(1) MAX MIN AVG) 请…

CUDA学习笔记5——CUDA程序错误检测

CUDA程序错误检测 所有CUDA的API函数都有一个类型为cudaError_t的返回值&#xff0c;代表了一种错误信息&#xff1b;只有返回cudaSuccess时&#xff0c;才是成功调用。 cudaGetLastError()用来检测核函数的执行是否出错cudaGetErrorString()输出错误信息 #include <stdi…

【lesson13】进程控制初识

文章目录 进程创建 进程创建 请你描述一下&#xff0c;fork创建子进程操作系统都做了什么&#xff1f; fork创建子进程&#xff0c;系统里多了一个进程&#xff0c;进程 内核数据结构 进程代码数据&#xff0c;内核数据结构由OS维护&#xff0c;进程代码数据一般由磁盘维护。…

位运算相关笔记

位运算 Part 1&#xff1a;基础 左移&#xff1a;左移一位&#xff0c;相当于某数乘以 2 2 2。左移 x x x位,相当于该数乘以 2 x 2^x 2x。 右移&#xff1a;右移一位&#xff0c;相当于某数除以 2 2 2。右移 x x x位&#xff0c;相当于该数除以 2 x 2^x 2x。 与运算&…

【Edabit 算法 ★☆☆☆☆☆】【分钟转秒数】Convert Minutes into Seconds

【Edabit 算法 ★☆☆☆☆☆】【分钟转秒数】Convert Minutes into Seconds math numbers Instructions Write a function that takes an integer minutes and converts it to seconds. Examples convert(5) // 300 convert(3) // 180 convert(2) // 120Notes Don’t forge…

markdown语法(更新中)

a ⃗ \vec{a} a 向量 a ‾ \overline{a} a 平均值 a ‾ \underline{a} a​下横线 a ^ \widehat{a} a (线性回归&#xff0c;直线方程) y尖 a ~ \widetilde{a} a 颚化符号 等价无穷小 a ˙ \dot{a} a˙ 一阶导数 a \ddot{a} a 二阶导数 $\vec{a}$ 向量 $\overline{a}$ …

【三维重建】DreamGaussian:高斯splatting的单视图3D内容生成(原理+代码)

文章目录 摘要一、前言二、相关工作2.1 3D表示2.2 Text-to-3D2.3 Image-to-3D 三、本文方法3.1生成式 高斯 splitting3.2 高效的 mesh 提取3.3 UV空间的纹理优化 四. 实验4.1实施细节4.2 定性比较4.3 定量比较4.4 消融实验 总结&#xff08;特点、局限性&#xff09; 五、安装与…

【框架源码篇 01】Spring源码-手写IOC

Spring源码手写篇-手写IoC 一、IoC分析 1.Spring的核心 在Spring中非常核心的内容是 IOC和 AOP. 2.IoC的几个疑问? 2.1 IoC是什么&#xff1f; IoC:Inversion of Control 控制反转&#xff0c;简单理解就是&#xff1a;依赖对象的获得被反转了。 2.2 IoC有什么好处? IoC带…

[ROS2系列] ORBBEC(奥比中光)AstraPro相机在ROS2进行rtabmap 3D建图

目录 背景&#xff1a; 一、驱动AstraPro摄像头 二、安装rtabmap error1&#xff1a;缺包 三、尝试 四、参数讲解 五、运行 error2: Did not receive data since 5 seconds! 六、效果​编辑 error4: 背景&#xff1a; 1、设备&#xff1a;pc&#xff1b;jeston agx …

语音芯片KT142C两种音频输出方式PWM和DAC的区别

目录 语音芯片KT142C两种音频输出方式PWM和DAC的区别 一般的语音芯片&#xff0c;输出方式&#xff0c;无外乎两种&#xff0c;即dac输出&#xff0c;或者PWM输出 其中dac的输出&#xff0c;一般应用场景都是外挂功放芯片&#xff0c;实现声音的放大&#xff0c;比如常用的音箱…

WMS透明仓库:实现仓储的全方位可视化与优化

一、WMS透明仓库的定义与特点 1. WMS透明仓库的定义&#xff1a;WMS透明仓库是一种基于信息技术的仓库管理系统&#xff0c;通过实时数据采集、分析和可视化&#xff0c;将仓库内外的物流流程、库存状态、人员活动等信息以透明的方式展示给相关利益方。 2. 实时数据采集&…

力扣每日一题50:Pow(x,n)

题目描述&#xff1a; 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000示例 2&#xff1a; 输入&#xff1a;x 2.10000, n 3 输出…

性能评测 | GreatDB VIP PLUGIN方案 VS MySQL InnoDB Cluster高可用方案

前言 最近&#xff0c;我们与许多数据库用户进行了沟通和调研&#xff0c;了解到&#xff0c;目前仍有相当一部分投产的MySQL高可用或故障转移方案&#xff0c;用到了读写分离功能或业务接入VIP&#xff08;Virtual IP Address&#xff09;的方式&#xff0c;来屏蔽后端数据库架…

2022年合肥市庐阳区信息学区赛(初中组)

2022年合肥市庐阳区信息学区赛(初中组)第1题 信封 题目描述 有两张贺卡,需要装入一个信封邮寄,当然贺卡都是正的放进信封中,也就是两张贺卡的边同信封的边一都是平行的,不允许斜着放入信封。请问信封的最小尺寸。 输入格式 共两行。每行两个整数,分别表示两张贺卡的两个…

华为OD 最小数字(100分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…

MySQL 性能分析

MySQL 性能分析 对 mysql 进行性能分析&#xff0c;主要就是提升查询的效率&#xff0c;其中索引占主导地位。对 mysql 进行性能分析主要有如下几种方式&#xff1a; 方式一&#xff1a;查看 sql 执行频次 show global status like ‘Com_______’; // global 表示全局 show s…

HCIA --- 网络基础

OSPF七层参考模型&#xff1a; 应用层 抽象语言输入和输出 抽象语言-->编码 表示层 编码-->二进制 会话层 应用程序内部到地址&#xff0c;区分程序内各个会话 上三层均为应用程序处理加工数据&#xff0c;上三被统称为应用流层 下四层负责数…

ROS2使用colcon build编译的工程运行出错,cmake编译的没有问题。

ROS2下的工程编译后&#xff0c; 用标准的ros2的运行节点命令无法正常运行&#xff0c;程序没有问题。 ros2 run package_name exc_file build下生成的可执行文件可以用 ./ exc_file 执行&#xff0c; install下的可执行文件用 ./ exc_file无法运行 解决方法&#xff1a; co…