百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

第八章 数据类型 数据类型含义

bigegpt 2024-09-25 14:32 3 浏览

在内存中存储的数据可以有多种类型。Python 定义了一些标准类型,用于存储各种类型的数据。

数据类型分为:

  1. 可变
  2. 不可变两种。不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。

Python中的每种数据类型都有构造函数,构造函数名称就是类型名称,如:int()、float()等。构造函数也可用于类似于C++的强制类型转换。

一、numeric

[不可变]

数字数据类型用于存储数值。

A、int(有符号整型)

B、long(长整型[也可以代表八进制和十六进制]),Python使用 L/l 来显示长整型。

C、float(浮点型),Python将带小数点的数字都称为浮点数。

D、complex(复数),复数由实部和虚部构成,可以用 a + bj,或者 complex(a,b) 表示, 实部和虚部都是浮点型。

默认值:int() - 0,float() - 0.0,long() - 0,complex() - 0j

二、布尔

在Python中的布尔类型为 <type 'bool'>,取值为 True 、False。

默认值 bool() - False。

认为空对象(整数0,浮点数0.0,空字符'')是False,所有非空对象是真。

三、str "xxx"或者'xxx'

[不可变][索引]

字符串是由数字、字母、下划线组成一系列字符。Python不支持单字符类型,只有字符串类型,单字符也在Python也是作为一个字符串使用。ord/chr在ASCII与字符之间进行转换。

默认值:str() - ''

python的字串列表有2种取值顺序:

A、从左到右索引默认0开始的,最大范围是字符串长度少1

B、从右到左索引默认-1开始的,最大范围是字符串开头

在Python中定义unicode字符串,需要在字符串之前增加u/U。使用type分别查看以下变量的类型

str1 = u"nihao" # <type, 'unicode'>

str2 = "nihao" #<type, 'str'>

计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。

ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节,举例如下。

字母 A 用ASCII编码是十进制的65,二进制的01000001;

字母 A 用Unicode编码,只需要在前面补0就可以,因此, A 的Unicode编码是00000000 01000001。

汉字已经超出了ASCII编码的范围。

python中字符串是不可修改对象。每次+=会创建一个新的字符串,性能较差,推荐使用 jion

print 使用对象的 __str__方法

  • 初始化

方式一:str() 构造函数,可以将非字符串值表示为字符串。

方式二:使用 '' 或者 ""

  • 其他对象转换为str

str():函数,将其他对象转换为可阅读的str形式,主要调用对象的__str__方法,使用其返回值。

  • 转义字符 - 见附录五

如果需要打印转子字符,则可以通过两种方式实现:\\n 或者 R'\n'、r'\n'

  • 格式字符串

Python提供了更精细的字符串显示控制方法,通过选项功能实现。有以下两种方式:

1、在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。

print "fromat string" % (data1, data2, data3, ...) # dataN 与format string 中的%$ 相匹配。%是分隔符

每个format string的格式如下:%[name][flags][width][.precision]code

print "My name is %s and weight is %d kg!" % ('Zara', 21)

2、str.format() - Python2.6开始加入

增强了字符串格式化的功能,基本语法是通过 {} 和 : 来代替以前的 %。format 函数可以接受不限个参数,位置可以不按顺序。

A、不设置指定位置,按默认顺序 "{} {}".format("1", "2") # 1 2

B、设置指定位置 "{1} {0} {1}".format("1", "3") # 3 1 3

C、设置参数

key=root

a、具体参数

"{name} = {value}".fromat(name="key", value="root")

b、字典设置参数

info={"name":"key", "value":"root"}

"{name} = {value}".format(**info)

c、列表设置参数

info=["key", "root"]

"{0[0]} = {0[1]}"format(info) # 0是必须的

d、对象

class info(object):

def __init__():

self.name="key"

self.value="root"

"{0.name} = {0.value}".format(info())

说明:粗体0表示的是format后跟的参数位置

  • 字符串拼接

1、+,可以使用Python的操作符重载功能,str内部实现了 __add__,直接将两个str拼接起来。

2、jion,连接字符串数组。"split".jion(seq) # 将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串

":".jion("12345") # "1:2:3:4:5"

  • 三引号

三引号的语法是一对连续的单引号或者双引号, 允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。如果字符串跨越多行,行与行之间的回车也会被保留。

三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。

多用于处理HTML或者SQL语句中。

errHTML = """

<HTML><HEAD><TITLE>

Friends CGI Demo</TITLE></HEAD>

<BODY><H3>ERROR</H3>

<B>%s</B><P>

<FORM><INPUT TYPE=button VALUE=Back

ONCLICK="window.history.back()"></FORM>

</BODY></HTML>

"""

两个作用:

1、用作文档注释

2、初始化字符串变量,保留特殊字符

四、list []

[可变] [复合数据类型][有序][索引]

列表由一系列按特定顺序排列的元素组成的有序集合,其中元素与元素之间没有任何关系。

使用 [] 标识列表,元素与元素之间使用,分割。可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表。列表中的每个元素都分配一个数字表示元素的索引,元素的索引规则类似于str。

使用 [:]操作可以复制列表,列表中已经存在的元素指向同一对象,新加的元素不影响原有列表。

list1 = [1, 2, 3]

list2 = list1[:] # id(list1[0]) == idlist2([0])

# list2.append(4) 不影响 list1

  • 初始化

1、空列表 []

2、[str, int, list, long, ……]

3、list() 构造函数,list(range(begin, end)) 创建参数列表范围内的整数列表。

4、列表解析,使用紧凑的方式创建列表。

[expression for-clause [condition]] # [elem for elem in range(1,10) if elem % 2 == 0]

expression:对每个元素执行的操作,结果当作列表的元素。# elem

for-clause:for操作的一个列表 # for elem in range(1, 10)

condition:可选的附加条件,符合条件的元素会执行expression操作。 # if elem % 2 == 0

  • 增加

list.insert(index, elem),任意位置插入元素

list.append(emel),列表末尾添加元素

  • 访问元素

采用下标法,类似于 str ,可以使用正向从0开始,也可以采用反向从-1开始。

  • 删除元素

del list[index] 删除单个元素

list.pop(index) 删除并返回指定位置的元素

list.remove(elem) 删除首次出现的元素

五、tuple ()

[不可变][索引]

使用 () 标识元组,可以把元组理解成不可变的list。

  • 初始化

1、空元组 ()

2、(data, ),单元素元组,需要在元素后面添加逗号。这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号。所以,如果元组只有1个元素,就必须加一个逗号,防止被当作括号运算。此时表示圆括号正在成为元组创建的一部分。

3、(data, data1, data2, …) 或者 data, data1, data2, … 都可以创建元组

4、tuple(list) 通过列表构建元组

  • 删除元组

因为元组是不可变的,所以del不能删除其中的一个元素,但是可以使用del删除整个元组,类似于删除变量关联的操作一样。

六、dict {}

[可变][无序]

使用 {} 标识字典,由索引(key)和它对应的值value组成。字典的每个键值对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。

Python为了实现快速搜索,键没有按顺序排列,自动修改排列顺序。

  • 键:键必须不可变,任意Python不可变数据类型均可当作dict的键,不允许同一个键出现两次
  • 值:值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的。
  • 初始化

1、空字典:{}、dict()

2、初始化字典:{key:value, key:value, ……}

3、dict() 构造函数,借助zip运算符:dict(zip(list_k, list_v))

  • 新增、修改、访问元素

通过dict[key]的形式进行标题提到的操作。

  • 删除

dict.clear() 删除字典中的所有元素

del dict[key] 删除指定的key以及key对应的值

  • 方法

items()、keys()、values():返回列表形式

6copy()浅拷贝字典,如果值是可变的则会影响所有引用

七、set

[可变][唯一][无序]

为集合类型,是含有不重复元素的数据集。支持数据集合中的概念。set没有快捷创建的方式,其输出格式为 set([data, …])的形式。

  • 初始化

集合只能通过构造函数创建没有快捷方式。

1、空集合 set()

2、set(str/list) 通过str或者list创建集合。

  • 操作

1、元素操作(方法):add、remove、clear2、支持数学集合的操作,改操作通过集合的方法实现。

相关操作

1、分片

在分片规则里list、tuple、str(字符串)都可以称为序列,都可以按规则进行切片操作。

[begin:end:step]

[begin, end) 选取范围,左闭右开。begin默认值为0,end默认值为末尾

step 表示增长步长,默认为1。负数步长意味着向后进行,此时begin,end都是用默认值。

2、for

遍历元素,可以使用的数据结构有:str、list、tuple、dict、set

for elem in xxxx:

block

3、判空

A、可以直接将对象当作 if/while 等条件语句的 expression,来判断是否为空。支持的数据结构有:str、list、tuple、dict、set

if dict: # 如果不为空

pass

B、可以使用 len(o) 函数来判断集合的长度。

if len(dict): #如果不为空

pass

4、排序

list[dict] 可以指定多个排序条件

  1. list.sort(key=lambda dict:(dict["key"], dict["key2"], …))
  2. list.sort(key=operator.itemgetter("key1", "key2", …)) # import operator

相关推荐

C#.NET Autofac 详解(c# autoit)

简介Autofac是一个成熟的、功能丰富的.NET依赖注入(DI)容器。相比于内置容器,它额外提供:模块化注册、装饰器(Decorator)、拦截器(Interceptor)、强o的属性/方法注...

webapi 全流程(webapi怎么部署)

C#中的WebAPIMinimalApi没有控制器,普通api有控制器,MinimalApi是直达型,精简了很多中间代码,广泛适用于微服务架构MinimalApi一切都在组控制台应用程序类【Progr...

.NET外挂系列:3. 了解 harmony 中灵活的纯手工注入方式

一:背景1.讲故事上一篇我们讲到了注解特性,harmony在内部提供了20个HarmonyPatch重载方法尽可能的让大家满足业务开发,那时候我也说了,特性虽然简单粗暴,但只能解决95%...

C# 使用SemanticKernel调用本地大模型deepseek

一、先使用ollama部署好deepseek大模型。具体部署请看前面的头条使用ollama进行本地化部署deepseek大模型二、创建一个空的控制台dotnetnewconsole//添加依赖...

C#.NET 中间件详解(.net core中间件use和run)

简介中间件(Middleware)是ASP.NETCore的核心组件,用于处理HTTP请求和响应的管道机制。它是基于管道模型的轻量级、模块化设计,允许开发者在请求处理过程中插入自定义逻辑。...

IoC 自动注入:让依赖注册不再重复劳动

在ASP.NETCore中,IoC(控制反转)功能通过依赖注入(DI)实现。ASP.NETCore有一个内置的依赖注入容器,可以自动完成依赖注入。我们可以结合反射、特性或程序集扫描来实现自动...

C#.NET 依赖注入详解(c#依赖注入的三种方式)

简介在C#.NET中,依赖注入(DependencyInjection,简称DI)是一种设计模式,用于实现控制反转(InversionofControl,IoC),以降低代码耦合、提高可...

C#从零开始实现一个特性的自动注入功能

在现代软件开发中,依赖注入(DependencyInjection,DI)是实现松耦合、模块化和可测试代码的一个重要实践。C#提供了优秀的DI容器,如ASP.NETCore中自带的Micr...

C#.NET 仓储模式详解(c#仓库货物管理系统)

简介仓储模式(RepositoryPattern)是一种数据访问抽象模式,它在领域模型和数据访问层之间创建了一个隔离层,使得领域模型无需直接与数据访问逻辑交互。仓储模式的核心思想是将数据访问逻辑封装...

C#.NET 泛型详解(c# 泛型 滥用)

简介泛型(Generics)是指在类型或方法定义时使用类型参数,以实现类型安全、可重用和高性能的数据结构与算法为什么需要泛型类型安全防止“装箱/拆箱”带来的性能损耗,并在编译时检测类型错误。可重用同一...

数据分析-相关性分析(相关性 分析)

相关性分析是一种统计方法,用于衡量两个或多个变量之间的关系强度和方向。它通过计算相关系数来量化变量间的线性关系,从而帮助理解变量之间的相互影响。相关性分析常用于数据探索和假设检验,是数据分析和统计建模...

geom_smooth()函数-R语言ggplot2快速入门18

在每节,先运行以下这几行程序。library(ggplot2)library(ggpubr)library(ggtext)#用于个性化图表library(dplyr)#用于数据处理p...

规范申报易错要素解析(规范申报易错要素解析)

为什么要规范申报?规范申报是以满足海关监管、征税、统计等工作为目的,纳税义务人及其代理人依法向海关如实申报的行为,也是海关审接单环节依法监管的重要工作。企业申报的内容须符合《中华人民共和国海关进出口货...

「Eurora」海关编码归类 全球海关编码查询 关务服务

  海关编码是什么?  海关编码即HS编码,为编码协调制度的简称。  其全称为《商品名称及编码协调制度的国际公约》(InternationalConventionforHarmonizedCo...

9月1日起,河南省税务部门对豆制品加工业试行新政7类豆制品均适用投入产出法

全媒体记者杨晓川报道9月2日,记者从税务部门获悉,为减轻纳税人税收负担,完善农产品增值税进项税额抵扣机制,根据相关规定,结合我省实际情况,经广泛调查研究和征求意见,从9月1日起,我省税务部门对豆制品...