深入Python3(一) 内置数据类型

0.摘要

  在 P y t h o n Python Python中, 每个值都有一种数据类型,但您并不需要声明变量的数据类型。那该方式是如何运作的呢? P y t h o n Python Python根据每个变量的初始赋值情况分析其类型,并在内部对其进行跟踪。我们将选择其中的一些进行介绍。

1.布尔类型

  布尔类型或为真或为假。 P y t h o n Python Python有两个被巧妙地命名为 T r u e True True F a l s e False False的常量,可用于对布尔类型的直接赋值。表达式也可以计算为布尔类型的值。在某些地方(如 i f if if语句), P y t h o n Python Python所预期的就是一个可计算出布尔类型值的表达式。这些地方称为布尔类型上下文环境。事实上,可在布尔类型上下文环境中使用任何表达式,而 P y t h o n Python Python将试图判断其真值。在布尔类型上下文环境中,不同的数据类型对于何值为真、何值为假有着不同的规则。

2.数值类型

   P y t h o n Python Python同时支持 I n t e g e r Integer Integer[整型] 和 F l o a t i n g P o i n t Floating Point FloatingPoint[浮点型] 数值。无任何类型声明可用于区分; P y t h o n Python Python通过是否有小数点来分辨它们。
  可通过 i n t ( x x ) 、 f l o a t ( x x ) int(xx)、float(xx) int(xx)float(xx)显示的将 x x xx xx转换为整数、浮点数。整数可以任意大,但是浮点数有精度限制。
  常见的运算符就不多说了,值得一提的是 P y t h o n Python Python中的 / / /运算符执行的是浮点数除法; / / // //运算符执行的是地板除,但是它不总是返回整数,当分子或分母为浮点数时,它依然会返回浮点数,比如 7.0 / / 3 7.0//3 7.0//3会返回 2.0 2.0 2.0 ∗ ∗ ** 运算符是计算幂的,比如 11 ∗ ∗ 2 = 121 11**2=121 112=121
  在布尔类型上下文环境中,非零整数为真,非 0.0 0.0 0.0浮点数为真。不过在使用浮点数时一定要注意误差。

3.列表

  列表是 P y t h o n Python Python的主力数据类型。像使用数组一样使用列表,不过列表可以容纳任何对象,并在加入新元素时进行动态扩展。

3.1创建列表

在这里插入图片描述
  列表的索引从 0 0 0开始,负数索引相当于从列表尾部向前计数访问元素,以上面的图片为例,列表长度为 5 5 5,那么 [ − 3 ] = [ 5 − 3 ] = [ 2 ] [-3]=[5-3]=[2] [3]=[53]=[2]

3.2列表切片

在这里插入图片描述
  通过指定两个索引值,可以从列表中获取称作“切片”的某个部分,返回值是一个新列表。第一个索引值默认为 0 0 0,第二个索引值默认为列表的长度,左闭右开。

3.3向列表中新增项

在这里插入图片描述
   + + +运算符包含两个步骤 — 连接然后赋值 — 当处理大型列表时,该操作可能(暂时)消耗大量内存。
   a p p e n d ( ) append() append()方法向列表的尾部添加一个新的元素。
  列表是以类的形式实现的。“创建”列表实际上是将一个类实例化。因此,列表有多种方法可以操作。 e x t e n d ( ) extend() extend()方法只接受一个列表作为参数,并将该参数的每个元素都添加到原有的列表中。
   i n s e r t ( ) insert() insert()方法将单个元素插入到列表中。第一个参数是列表中将被顶离原位的第一个元素的位置索引。

3.4在列表中检索值

在这里插入图片描述
   c o u n t ( ) count() count()方法返回了列表中某个特定值出现的次数。
  如果你想知道的是某个值是否出现在列表中, i n in in运算符将会比使用 c o u n t ( ) count() count()方法要略快一些。它总是返回 T r u e True True F a l s e False False,而不是告诉你该值出现在什么位置。
  如果想知道某个值在列表中的精确位置(第一次出现的位置),可调用 i n d e x ( ) index() index()方法。后两个参数用来指定搜索范围欸,左闭右开默认为整个列表。
  如果在列表中没有找到该值, i n d e x ( ) index() index()方法将会引发一个错误。

3.5从列表中删除元素

在这里插入图片描述
  可使用 d e l del del语句从列表中删除某个特定元素,后面的元素将各自向前移动一位。
在这里插入图片描述
   r e m o v e ( ) remove() remove()方法接受一个 v a l u e value value参数,并删除列表中的第一个 v a l u e value value;如果找不到将会引发一个错误。你还可以发现,这个方法没有返回值。
在这里插入图片描述
   p o p ( ) pop() pop()方法接收一个 i n d e x index index参数,它将删除列表 i n d e x index index位置的元素并返回它的值;默认删除列表的最后一个元素。一个空列表调用这个方法或者 i n d e x index index越界都会引发错误。

3.6布尔上下文环境中的列表

在这里插入图片描述
  非空列表为真。

4.元组

在这里插入图片描述
  这里打错了,应该是元组。
  元组和列表的主要区别是元组不能进行修改。用技术术语来说,元组是不可变更的。从实践的角度来说,没有可用于修改元组的方法。 a p p e n d ( ) 、 e x t e n d ( ) 、 i n s e r t ( ) 、 r e m o v e ( ) append()、 extend()、 insert()、remove() append()extend()insert()remove() p o p ( ) pop() pop()这些方法元组都没有。可以对元组进行切片操作(因为该方法创建一个新的元组),可以检查元组是否包含了特定的值(因为该操作不修改元组),还可以……就那么多了。
  元组的速度比列表更快。如果定义了一系列常量值,而所需做的仅是对它进行遍历,那么请使用元组替代列表。
  对不需要改变的数据进行“写保护”将使得代码更加安全。
  一些元组可用作字典键(特别是包含字符串、数值和其它元组这样的不可变数据的元组)。列表永远不能当做字典键使用,因为列表不是不可变的。

4.1布尔上下文环境中的元组

在这里插入图片描述
  非空元组为真,注意 a = ( ) a=() a=()是一个空的元组; a = ( 1 , ) a=(1,) a=(1,)才是仅包含一个元素的元组,这个逗号至关重要。悄悄告诉你,其实圆括号也可以省去, a = 1 , 2 , 3 a=1,2,3 a=1,2,3也是一个元组。

4.2同时赋多个值

在这里插入图片描述

5.集合

  集合 s e t set set是装有独特值的无序“袋子”。一个简单的集合可以包含任何数据类型的值。如果有两个集合,则可以执行像联合、交集以及集合求差等标准集合运算。

5.1创建集合

在这里插入图片描述
  要创建多值集合,请将值用逗号分开,并用花括号将所有值包裹起来。
在这里插入图片描述
  注意集合是无序的。
在这里插入图片描述
  创建空集合请使用 s e t ( ) set() set();一对不包含任何值的花括号将创建一个空字典。

5.2修改集合

在这里插入图片描述
   a d d ( ) add() add()方法接受单个可以是任何数据类型的参数,并将该值添加到集合之中。
在这里插入图片描述
   u p d a t e ( ) update() update()方法仅接受一个集合作为参数,并将其所有成员添加到初始列表中。其行为方式就像是对参数集合中的每个成员调用 a d d ( ) add() add()方法。
  实际上,可以带任何数量的参数调用 u p d a t e ( ) update() update()方法。如果调用时传递了多个集合, 它会将每个集合中的每个成员添加到初始的集合当中(丢弃重复值)。
   u p d a t e ( ) update() update()方法还可接受一些其它数据类型的对象作为参数,包括列表。

5.3从集合中删除元素

在这里插入图片描述
   d i s c a r d ( ) 、 r e m o v e ( ) discard()、remove() discard()remove()都接受一个单值作为参数,并从集合中删除该值。区别是当这个值不存在时,前者不抛出错误,后者会抛出错误。
在这里插入图片描述

   p o p ( ) pop() pop()方法从集合中删除某个值,并返回该值。然而,由于集合是无序的,并没有“最后一个”值的概念,因此无法控制删除的是哪一个值。它基本上是随机的。对空集合调用该方法会引发错误。
   c l e a r ( ) clear() clear()方法删除集合中所有的值,留下一个空集合。它等价于 a _ s e t = s e t ( ) a\_set = set() a_set=set(),该语句创建一个新的空集合,并用之覆盖 a _ s e t a\_set a_set变量的之前的值。

5.4常见集合操作

在这里插入图片描述
  要检测某值是否是集合的成员,可使用 i n in in运算符。
   u n i o n ( ) union() union()方法返回一个新集合,其中装着在两个集合中出现的元素。
   i n t e r s e c t i o n ( ) intersection() intersection()方法返回一个新集合,其中装着同时在两个集合中出现的所有元素。
   d i f f e r e n c e ( ) difference() difference()方法返回的新集合中,装着所有在 a _ s e t a\_set a_set出现但未在 b _ s e t b\_set b_set中的元素。
   s y m m e t r i c _ d i f f e r e n c e ( ) symmetric\_difference() symmetric_difference()方法返回一个新集合,其中装着所有只在其中一个集合中出现的元素。
  除了求差操作是不对称的,其它操作都是对称的。
在这里插入图片描述
   a _ s e t a\_set a_set b _ s e t b\_set b_set的子集— 所有 a _ s e t a\_set a_set的成员均为 b _ s e t b\_set b_set的成员;反过来可以说 b b b a a a的超集。

5.5布尔上下文环境中的集合

在这里插入图片描述
  非空集合为真。

6.字典

  字典是键值对的无序集合。向字典添加一个键的同时,必须为该键增添一个值。(之后可随时修改该值) P y t h o n Python Python的字典为通过键获取值进行了优化,而不是反过来。

6.1创建字典

在这里插入图片描述
  可以通过 d i c t [ x ] dict[x] dict[x]访问字典中键 x x x对应的值,但是当 x x x不存在时,会抛出一个错误。

6.2修改字典

在这里插入图片描述
  在字典中不允许有重复的键。对现有的键赋值将会覆盖旧值。
  可随时添加新的键值对。该语法与修改现有值相同。

6.3混合值字典

  字典并非只能用于字符串。字典的值可以是任何数据类型,包括整数、布尔值、任何对象,甚至是其它的字典。而且就算在同一字典中,所有的值也无须是同一类型,您可根据需要混合匹配。字典的键要严格得多,可以是字符串、整数和其它一些类型。在同一字典中也可混合、匹配使用不同数据类型的键。
在这里插入图片描述
  类似列表和集合, l e n ( ) len() len()函数将返回字典中键的数量。
  而且像列表和集合一样,可使用 i n in in运算符以测试某个特定的键是否在字典中。

6.4布尔上下文环境中的字典

在这里插入图片描述

  非空字典为真。

7.None

   N o n e None None P y t h o n Python Python的一个特殊常量。它是一个空值。 N o n e None None F a l s e False False不同, N o n e None None不是 0 0 0 N o n e None None 不是空字符串;将 N o n e None None 与任何非 N o n e None None 的东西进行比较将总是返回 F a l s e False False
   N o n e None None是唯一的空值。它有着自己的数据类型( N o n e T y p e NoneType NoneType)。可将 N o n e None None赋值给任何变量,但不能创建其它 N o n e T y p e NoneType NoneType对象。所有值为 N o n e None None变量是相等的。
在这里插入图片描述
  在布尔上下文环境中, N o n e None None为假值, n o t   N o n e not\ None not None为真值。

深入 Python 3 的内容涵盖了 Python 3 及其与 Python 2 的区别。Python 3 提供了一个脚本叫做 2to3。学习它。喜欢它。使用它。用 2to3 移植代码到 Python 3 是一个有关 2to3 工具能够自动整理的所有东西的参考手册。很多这些东西都是语法的变更,因此了解 Python 3 里面许多的语法变更是一个好的起点。(print 现在是一个函数,`x` 不能使用,等等。) 在 HTTP Web 服务这章,httplib2 模块通过 HTTP 获取头信息和数据。HTTP头信息返回的是字符串,而 HTTP 正文则返回的是字节。 在序列化 Python 对象这章,你将了解到为什么 Python 3 里面的 pickle 模块定义了一个和 Python 2 向后不兼容的新的数据类型。(提示:这就是因为字节和字符串的原因。) 同样 JSON也根本不支持字节类型。我将向你展示如何解决这个问题。 在案例分析:移植 chardet 到 Python 3这章,到处都是一大堆一大堆关于字节和字符串的东西。 即使你不关心 Unicode (但实际上你会的),你也会想阅读一下 Python 3 里面的字符串格式,这和 Python 2 里面的完全不一样。 Python 的专家们聪明的把 ElementTree 变成了标准库的一部分 ,然后现在它构成了新的 XML 章节的基础。解析 XML 的那些老的方式仍然可用,但是你应该避免使用它们,因为他们很糟糕! 除此之外,还有个关于 Python 的新东西 — 不是语言上的,而是社区中的 — 像 Python 包装索引(PyPI) 的出现。Python 提供了实 用工具类用来将你的代码打包成标准格式,并分发那些包到PyPI 中。阅读 打包 Python 库了解详细信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值