夜光序言:
世界上,最公平和最不公平的,都是时间。
别人偷不走它,而你却也留不住它。你拥有了它,却不能改变它。
正文:
4.4 元组类型
4.4.1 目标
在程序中求一组值的最大值或者最小值时常用的操作,例如:
def max(a,b):
return a if a>b else b
可以计算两个值的最大值,但是三个参数的最大值就无法计算,能不能设计一个 max 函数计算任意多个数的最大值呢?
目标是掌握元祖的使用,最后设计一个这样的通用的最大值函数,在调用时可以指 定任意多个数,都能找出这些数的最大值。
4.4.2 元组类型
元组也是 Python 中常用的一种数据类型,它是 tuple 类的类型,与列表 list 几乎相似, 区别在于:
(1) 元组数据使用圆括号()来表示,例如 t=('a','b','c');
(2) 元组数据的元素不能改变,只能读取;
因此可以简单理解元组就是只读的列表,除了不能改变外其它特性与列表完全一样。
例 4-4-1:元组的使用
s=(1,3,2,3,4,5)
print(s)
prnt(type(s))
结果:
(1, 3, 2, 3, 4, 5)
<class 'tuple'>
例:4-4-2: 建立一个代表星期的元组表,输入一个 0-6 的整数,输出对应的星期名 称。
week=("日","一","二","三","四","五","六")
print(week)
w=input("Enter an integer: ")
w=int(w)
if w>=0 and w<=6:
print("星期"+week[w])
else:
print("错误输入")
结果:
('日', '一', '二', '三', '四', '五', '六')
Enter an integer: 3
星期三
如果在函数参数的末尾使用"*"参数,那么这个参数是可以变化的,一般标注为*args 参 数,在函数中成为一个元组,注意这样的*args 的参数必须放在函数参数的末尾。
例 4-4-3 元组可变参数的函数
def fun(x,y,*args):
print(x,y)
print(args)
fun(1,2)
fun(1,2,3)
fun(1,2,3,4)
结果:
1 2
()
1 2
(3,)
1 2
(3, 4)
其中 args 就是一个可变参数,它根据实践的调用成一个元组,fun(1,2)时 x=1,y=2,而 args=(),但是 fun(1,2,3)时 x=1,y=2,args=(3,)。
显然不能设计成 def fun(x,*args,y),或者 def fun(*args,x,y),不然 fun(1,2,3)时到底 args 应该是多少个参数的元组。
4.4.3 【案例】通用的最大值函数
1、案例描述
设计一个通用的最大值函数 max,它可以计算出任意个数的最大值。
2、案例分析
函数设计成带任意参数*args 的形式:
def max(*args)
那么就可以带任意参数调用了,例如:
print(max(1,2))
print(max(1,2,3,4))
3、案例代码
def max(*args):
print(args)
m=args[0]
for i in range(len(args)):
if m<args[i]:
m=args[i]
return m
print(max(1,2))
print(max(1,2,0,3))
结果:
(1, 2)2
(1, 2, 0, 3)
3
由此可见在调用 max(1,2)时 1,2 都传递给 args 参数,args=(1,2)成为一个元组,同样 max(1,2,0,3)是 args=(1,2,0,3)成一个元组。