文章目录
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
11∗∗2=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]=[5−3]=[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为真值。