think python学习笔记(13)

元组作为返回值
严格来说,一个函数只能返回一个值,但是如果这个返回值是元组,其效果等同于返回多个值
例:对两个整数做除法,计算出商和余数,同时计算出这两个值更好。
内建函数divmod接受两个实参,返回包含两个值的元组:商和余数。
可以使用元组来存储返回值

t = divmod(7,3)
quot,rem = divmod(7,3)

也可以使用元组赋值分别存储它们

def min_max(t):
	return min(t),max(t)

max和min是用于找出一组元素序列中最大值和最小值的内建函数。min_max同时计算出这两个值,并返回二者组成的元组。

可变长度参数元组
函数可以接受可变数量的参数。以“*”开头的形参将输入的函数汇集到一个元组中。
以下函数可以接受任意数量的参数,并且当它们打印出来

def printall(*args):
	print(args)

汇集形参可以使用任意名字,但是习惯使用args

与汇集相对的,是分散。
如果有一个值序列,并且希望使其作为多个参数传递给一个函数,可以使用运算符*
例如,divmod只接受两个实参,元组无法作为参数传递进去

t = (7,3)
divmod(t)
#错误,无法接受元组实参
divmod(*t)

将元组分散,就可以被传进递进函数

许多内建函数使用了可变长度参数元组。
例如,max和min就可以接受任意数量的实参

max(1,2,3)
sum(1,2,3)
#但是sum不可以

列表和元组
zip是一个内建函数,可以接受将两个或多个序列组,并返回一个元组列表,其中每个元组包含了各个序列中相对位置的一个元素。

s = 'abc'
t = [0,1,2]
zip(s,t)

输出的结果是一个zip对象,包含了如何对其中元素进行迭代的信息,zip函数最常用于for循环

for pair in zips(s,t):
	print(pair)

将两个序列中的元素一一对应,组成与序列长度相同的元组列表

zip对象是迭代器的一种,即任何能够按照某个序列迭代的对象。迭代器在某些方面和列表非常形式,但不同之处在于,无法通过索引来选择迭代器中的某个元素。

如果想使用列表操作符和方法,可以通过zip对象创建一个列表

list(zip(s,t))

结果就是一个包含若干元组的列表,在此例中,每个元组包含了字符串中的一个元素和对应位置中对应的元素

如果用于创建的序列长度不一,返回对象的长度以最短序列的长度为准

list(zip('Anne','Elk'))

可以在for循环中使用元组赋值,遍历包含元组的列表

t = [('a',0),('b',1)]
for letter,number in t:
	print(letter,number)

每次循环时,python会选择列表中的下一个元组,并将其内容赋给letter和number

如果zip,for循环和元组赋值结合起来使用,会得到一个可以同时遍历两个序列的惯用法。
例如,has_match接受两个序列t1和t2,如果存在索引i让t1[i] == t2[i],则返回True

def has_match(t1,t2):
	for x,y in zip(t1,t2):
		if x==y:
			return True
	return False

如果需要遍历一个序列的元素以及其索引号,可以使用内建函数enumerate

for index,element in enumerate('abc'):
	print(index,element)

enumerate的返回结果是一个枚举对象,可迭代一个包含若干个对的序列,每个队包含了索引(从0开始计数)和给定序列中的对应元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值