您的位置:首页 > 编程语言 > Python开发

深入Python3 (Dive Into Python3)笔记2--内置数据类型

2010-11-22 21:56 519 查看


一切内容都是摘抄,主要是便于回忆和鼓励自己不要间断,更详细内容请见原帖地址:


《深入 python3
》中文版


http://woodpecker.org.cn/diveintopython3/index.html


深入

Numbers[数值型] 可以是 Integers[整数](1 和 2)、Floats[浮点数](1.1 和 1.2)、Fractions[分数](1/2 和 2/3);甚至是 Complex Number[复数]。

2.2. 布尔类型

2.3. 数值类型

可以使用 type() 函数来检测任何值或变量的类型。

同样,还可使用 isinstance() 函数判断某个值或变量是否为给定某个类型。

将一个 int 与一个 float 相加将得到一个 float 。Python 把 int 强制转换为 float 以进行加法运算;然后返回一个 float 类型的结果。

2.3.1. 将整数强制转换为浮点数及反向转换

通过调用float() 函数,可以显示地将 int 强制转换为 float。

int() 将进行取整,而不是四舍五入。

对于负数,int() 函数朝着 0 的方法进行取整。它是个真正的取整(截断)函数,而不是 floor[地板]函数。

浮点数精确到小数点后 15 位。

整数可以任意大。

2.3.2. 常见数值运算

// 运算符执行古怪的整数除法。如果结果为正数,可将其视为朝向小数位取整(不是四舍五入),但是要小心这一点。

当整数除以负数, // 运算符将结果朝着最近的整数“向上”四舍五入。从数学角度来说,由于 ?6 比 ?5 要小,它是“向下”四舍五入,如果期望将结果取整为 ?5,它将会误导你。

// 运算符并非总是返回整数结果。如果分子或者分母是 float,它仍将朝着最近的整数进行四舍五入,但实际返回的值将会是 float 类型。

** 运算符的意思是“计算幂”,

2.3.3. 分数

Python 并不仅仅局限于整数和浮点数类型。它可以完成你在高中阶段学过、但几乎已经全部忘光的所有古怪数学运算。

为定义一个分数,创建一个 Fraction 对象并传入分子和分母

Fraction 对象将会自动进行约分。(6/4) = (3/2)

2.3.4. 三角函数

math 模块包括了所有的基本三角函数,包括:sin()、 cos()、tan() 及像 asin() 这样的变体函数。

然而要注意的是 Python 并不支持无限精度。tan(π / 4) 将返回 1.0,而不是 0.99999999999999989

2.3.5. 布尔上下文环境中的数值

可以在 if 这样的 布尔类型上下文环境中 使用数值。零值是 false[假],非零值是 true[真]。

您知道可以在 Python 交互式 Shell 中定义自己的函数吗?只需在每行的结尾按 回车键 ,然后在某一空行按 回车键 结束。

非零浮点数为真; 0.0 为假。请千万小心这一点!如果有轻微的四舍五入偏差(正如在前面小节中看到的那样,这并非不可能的事情),那么 Python 将测试 0.0000000000001 而不是 0 ,并将返回一个 True 值。

分数也可在布尔类型上下文环境中使用。无论 n 为何值,Fraction(0, n) 为假。所有其它分数为真。

2.4. 列表

2.4.1. 创建列表

如果负数令你混淆,可将其视为如下方式: a_list[-n] == a_list[len(a_list) - n] 。因此在此列表中, a_list[-3] == a_list[5 - 3] == a_list[2]。

2.4.2. 列表切片

定义列表后,可从其中获取任何部分作为新列表。该技术称为对列表进行 切片 。

如果切片索引之一或两者均为负数,切片操作仍可进行。如果有帮助的话,您可以这么思考:自左向右读取列表,第一个切片索引指明了想要的第一个元素,第二个切片索引指明了第一个不想要的元素。返回值是两者之间的任何值。

事实上,无论列表的长度是多少, a_list[:n] 将返回头 n 个元素,而 a_list[n:] 返回其余部分。

2.4.3. 向列表中新增项

append() 方法向列表的尾部添加一个新的元素。

extend() 方法只接受一个列表作为参数,并将该参数的每个元素都添加到原有的列表中。

insert() 方法将单个元素插入到列表中。第一个参数是列表中将被顶离原位的第一个元素的位置索引。列表中的元素并不一定要是唯一的;

如果开始的时候有个 6 元素列表,然后将一个列表 append[添加]上去,结果就会……得到一个 7 元素列表。为什么是 7 个?因为最后一个元素(刚刚 append[添加] 的元素) 本身是个列表 。列表可包含任何类型的数据,包括其它列表。这可能是你所需要的结果,也许不是。但如果这就是你想要的,那这就是你所得到的。

2.4.4. 在列表中检索值

count() 方法返回了列表中某个特定值出现的次数。

如果你想知道的是某个值是否出现在列表中, in 运算符将会比使用 count() 方法要略快一些。in 运算符总是返回 True 或 False;它不会告诉你该值出现在什么位置。

如果想知道某个值在列表中的精确位置,可调用 index() 方法。尽管可以通过第二个参数(以 0 为基点的)索引值来指定起点,通过第三个参数(以 0 基点的)索引来指定搜索终点,但缺省情况下它将搜索整个列表,

index() 方法将查找某值在列表中的第一次出现。

可能 出乎 您的预期,如果在列表中没有找到该值,index() 方法将会引发一个例外。

2.4.5. 从列表中删除元素

可使用 del 语句从列表中删除某个特定元素。

删除索引 1 之后再访问索引 1 将 不会 导致错误。被删除元素之后的所有元素将移动它们的位置以“填补”被删除元素所产生的“缝隙”。

还可以通过 remove() 方法从列表中删除某个元素。remove() 方法接受一个 value 参数,并删除列表中该值的第一次出现。同样,被删除元素之后的所有元素将会将索引位置下移,以“填补缝隙”。列表永远不会有“缝隙”。

您可以尽情地调用 remove() 方法,但如果试图删除列表中不存在的元素,它将引发一个例外。

2.4.6. Removing Items From A List: Bonus Round

如果不带参数调用, pop() 列表方法将删除列表中最后的元素,并返回所删除的值。

可以从列表中 pop[弹出]任何元素。只需传给 pop() 方法一个位置索引值。它将删除该元素,将其后所有元素移位以“填补缝隙”,然后返回它删除的值。

2.4.7. 布尔上下文环境中的列表

空列表为假;其它所有列表为真。

2.5. 元组

元素 是不可变的列表。一旦创建之后,用任何方法都不可以修改元素

列表有像 append()、 extend()、 insert()、remove() 和 pop() 这样的方法。这些方法,元组都没有。可以对元组进行切片操作(因为该方法创建一个新的元组),可以检查元组是否包含了特定的值(因为该操作不修改元组),还可以……就那么多了。

元组可转换成列表,反之亦然。内建的 tuple() 函数接受一个列表参数,并返回一个包含同样元素的元组,而 list() 函数接受一个元组参数并返回一个列表。从效果上看, tuple() 冻结列表,而 list() 融化元组。

2.5.1. 布尔上下文环境中的元组

为创建单元素元组,需要在值之后加上一个逗号。没有逗号,Python 会假定这只是一对额外的圆括号,虽然没有害处,但并不创建元组。

2.5.2. 同时赋多个值

v 是一个三元素的元组,而 (x, y, z) 是包含三个变量的元组。将其中一个赋值给另一个将会把 v 中的每个值按顺序赋值给每一个变量。

(从技术上来说, range() 函数返回的既不是列表也不是元组,而是一个 迭代器,但稍后您将学到它们的区别。)

还可以使用多变量赋值创建返回多值的函数,只需返回一个包含所有值的元组。调用者可将返回值视为一个简单的元组,或将其赋值给不同的变量。

2.6. 集合

2.6.1. 创建集合

要创建只包含一个值的集合,仅需将该值放置于花括号之间。({})。

实际上,集合以 类 的形式实现,但目前还无须考虑这一点。

要从列表创建集合,可使用 set() 函数。

要创建空集合,可不带参数调用 set() 。

2.6.2. 修改集合

add() 方法接受单个可以是任何数据类型的参数,并将该值添加到集合之中。

集合是装 唯一值 的袋子。如果试图添加一个集合中已有的值,将不会发生任何事情。将不会引发一个错误;只是一条空操作。

update() 方法接受一个集合作为参数,并将其所有成员添加到初始列表中。其行为方式就像是对参数集合中的每个成员调用 add() 方法。

实际上,可以带任何数量的参数调用 update() 方法。如果调用时传递了两个集合, update() 将会被每个集合中的每个成员添加到初始的集合当中(丢弃重复值)。

update() 方法还可接受一些其它数据类型的对象作为参数,包括列表。如果调用时传入列表,update() 将会把列表中所有的元素添加到初始集合中。

2.6.3. 从集合中删除元素

如果针对一个集合中不存在的值调用 discard() 方法,它不进行任何操作。不产生错误;只是一条空指令。

区别在这里:如果该值不在集合中,remove() 方法引发一个 KeyError 例外。

2.6.4. 常见集合操作

union() 方法返回一个新集合,其中装着 在两个 集合中出现的元素。

intersection() 方法返回一个新集合,其中装着 同时 在两个集合中出现的所有元素。

difference() 方法返回的新集合中,装着所有在 a_set 出现但未在 b_set 中的元素。

symmetric_difference() 方法返回一个新集合,其中装着所有 只在其中一个 集合中出现的元素。

a_set.issubset(b_set)

b_set.issuperset(a_set)

2.6.5. 布尔上下文环境中的集合

2.7. 字典

2.7.1. 创建字典

2.7.2. 修改字典

2.7.3. 混合值字典

而且像列表和集合一样,可使用 in 运算符以测试某个特定的键是否在字典中。

2.7.4. 布尔上下文环境中的字典

空字典为假值;所有其它字典为真值。

2.8. None

None 是 Python 的一个特殊常量。它是一个 空 值。None 与 False 不同。None 不是 0 。None 不是空字符串。将 None 与任何非 None 的东西进行比较将总是返回 False 。

None 是唯一的空值。它有着自己的数据类型(NoneType)。可将 None 赋值给任何变量,但不能创建其它 NoneType 对象。所有值为 None 变量是相等的。

2.8.1. 布尔上下文环境中的 None

在 布尔类型上下文环境中, None 为假值,而 not None 为真值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: