代码清单6:使用range生成等差数列
s = 0
if s in range(4):
print(‘s在0, 1, 2, 3中’)
if s not in range(1, 4, 1):
print(‘s不在1, 2, 3中’)
- 函数
Python用def来自定义函数,如代码清单7所示。
代码清单7:自定义函数
def add2(x):
return x+2
print(add2(1)) # 输出结果为3
与一般编程语言不同的是,Python的函数返回值可以是各种形式,可以返回列表,甚至返回多个值,如代码清单8所示。
代码清单8:返回列表和返回多个值的自定义函数
def add2(x = 0, y = 0): # 定义函数,同时定义参数的默认值
return [x+2, y+2] # 返回值是一个列表
def add3(x, y):
return x+3, y+3 # 双重返回
a, b = add3(1,2) # 此时a=4,b=5
有时候,像定义add2()这类简单的函数,用def来正式地写个命名、计算和返回显得稍有点麻烦,Python支持用lambda对简单的功能定义“行内函数”,这有点像MATLAB中的“匿名函数”,如代码清单9所示。
代码清单9:使用lambda定义函数
f = lambda x : x + 2 # 定义函数f(x)=x+2
g = lambda x, y: x + y # 定义函数g(x,y)=x+y
03 数据结构
Python有4个内建的数据结构—List(列表)、Tuple(元组)、Dictionary(字典)以及Set(集合),它们可以统称为容器(Container),因为它们实际上是一些“东西”组合而成的结构,而这些“东西”可以是数字、字符、列表或者是它们之间几种的组合。
通俗来说,容器里边是什么都行,而且容器里边的元素类型不要求相同。
- 列表/元组
列表和元组都是序列结构,它们本身很相似,但又有一些不同的地方。
从外形上看,列表与元组存在一些区别是。列表是用方括号标记的,如a = [1, 2, 3],而元组是用圆括号标记的,如b = (4, 5, 6),访问列表和元组中的元素的方式都是一样的,如a[0]等于1,b[2]等于6,等等。刚刚已经谈到,容器里边是什么都行,因此,以下定义也是成立的:
c = [1, ‘abc’, [1, 2]]
‘’’
c是一个列表,列表的第一个元素是整型1,第二个是字符串’abc’,第三个是列表[1, 2]
‘’’
从功能上看,列表与元组的区别在于:列表可以被修改,而元组不可以。比如,对于a = [1, 2, 3],那么语句a[0] = 0,就会将列表a修改为[0, 2, 3],而对于元组b = (4, 5, 6),语句b[0] = 1就会报错。
要注意的是,如果已经有了一个列表a,同时想复制a,并命名为变量b,那么b = a是无效的,这时候b仅仅是a的别名(或者说引用),修改b也会修改a。正确的复制方法应该是b = a[:]。
跟列表有关的函数是list,跟元组有关的函数是tuple,它们的用法和功能几乎一样,都是将某个对象转换为列表/元组,如list(‘ab’)的结果是[‘a’, ‘b’],tuple([1, 2])的结果是(1, 2)。一些常见的与列表/元组相关的函数如下所示。
cmp(a, b):比较两个列表/元组的元素
len(a):列表/元组元素个数
max(a):返回列表/元组元素最大值
min(a):返回列表/元组元素最小值
sum(a):将列表/元组中的元素求和
sorted(a):对列表的元素进行升序排序
此外,作为对象来说,列表本身自带了很多实用的方法
(元组不允许修改,因此方法很少),如下所示。
a.append(1):将1添加到列表a末尾
a.count(1):统计列表a中元素1出现的次数
a.extend([1, 2]):将列表[1, 2]的内容追加到列表a的末尾
a.index(1):从列表a中找出第一个1的索引位置
a.insert(2, 1):将1插入列表a中索引为2的位置
a.pop(1):移除列表a中索引为1的元素
最后,不能不提的是“列表解析”这一功能,它能够简化我们对列表内元素逐一进行操作的代码。使用append函数对列表元素进行操作,如代码清单10所示。
代码清单10:使用append函数对列表元素进行操作
a = [1, 2, 3]
b = []
for i in a:
b.append(i + 2)
使用列表解析进行简化,如代码清单11所示。
代码清单11:使用列表解析进行简化
a = [1, 2, 3]
b = [i+2 for i in a]