python编程导论_第三课

Chapter 5 结构化类型、可变性与高阶函数

1 结构化对象

int和float对象是标量类型,str对象是一种结构化的非标量类型,它具有可以访问的内部结构。本章将介绍四种新的结构化类型,它们均为序列类型:tuple、range、list和dict。下表总结了它们的一些异同。

类型 元素类型 示例 是否可变 索引和切片
str 字符型,有序 ' ', 'a', 'abc' str[i], str[start:end]
tuple 任意型,有序 (), (3,), (1.2, '2', 'abc') t[i], t[start:end]
range 整型,有序 range(1,10,2), range(10,2), range(10) range()[i], range()[start:end]
list 任意型,有序 [],[3],[1.2, '2', 'abc'] l[i], l[start:end]
dict 键值对(键和值均为任意型?),无序 {}, {1:'Jan', 2:'Feb'}, {'Jim':31, 'Joy':29, 'Lily':28} d[key], 无切片

如下为这些类型的常用操作。

python编程导论_第三课_第1张图片
序列类型(不包括dict)的通用操作
python编程导论_第三课_第2张图片
一些字符串方法
python编程导论_第三课_第3张图片
一些常用的列表操作
python编程导论_第三课_第4张图片
一些常用的字典操作

可变性

list的别名问题,比如append方法的副作用。tuple没有别名问题。

2 列表推导和高阶函数

列表推导可以实现将某种操作应用到每个列表元素上。例如:
L = [x**2 for x in range(1,7)]
print(L)
会输出:
[1, 4, 9, 16, 25, 36]

for从句后面可以有一个或多个if语句和for语句,他们可以应用到for子句产生的值。
L = [x**2 for x in range(1,7) if x%2 == 0]
print(L)
会输出:
[4, 16, 36]

而高阶函数是指使用函数作为实参,可以方便的将某种操作应用到有序集合的每个值上。Python有一个内置的高阶函数map,它的第一个参数是一个具有n个参数的函数,后面跟着n个有序集合的参数(这些集合的长度都一样),集合中的值可以是n元函数的参数。例如:

    L1 = [1,3,8]
    L2 = [0,55,2]
    for i in map(max, L1, L2):
        print(i)

会输出:
1
28
9
Python还支持创建匿名函数,即lamda函数,其一般形式为:
lambda :
lamda表达式经常作为高阶函数的参数,例如:

L = []
for i in map(lambda x, y: x**y, [1,2,3,4], [2,3,4,0])
    L.append(i)
print(L)

会输出[1, 8, 81, 1]。

你可能感兴趣的:(python编程导论_第三课)