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

python基础四_函数,切片,迭代

2017-07-24 16:05 441 查看
一.函数

函数返回多个值时,其实是返回一个tuple(如return nx, ny,其实是返回的是(nx,ny))

函数的参数改为可变参数

def calc(*numbers):

定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数:

>>> calc(1, 2)

如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做:

Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:

>>> nums = [1, 2, 3]

>>> calc(*nums)

*nums表示把nums这个list的所有元素作为可变参数传进去。

关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

二.切片

用于取一个list或tuple的部分元素

L[0:3]
表示,从索引
0
开始取,直到索引
3
为止,但不包括索引
3
。即索引
0
1
2
,正好是3个元素。

如果第一个索引是
0
,还可以省略:

L[ : 3]

从索引1开始,取出2个元素出来

L[1 : 3]

Python支持
L[-1]
取倒数第一个元素,那么它同样支持倒数切片

L[ -2 : ]

L[-2 : -1]

前10个数,每两个取一个:

>>> L[:10:2]
[0, 2, 4, 6, 8]

所有数,每5个取一个:

>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:

>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)


字符串也是同样的道理,可以进行相应的切割。

三.迭代

如果给定一个list或tuple,我们可以通过
for
循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。

通过for . . . in 可遍历整个list或tuple

Python的
for
循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上

dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。

默认情况下,dict迭代的是key。如果要迭代value,可以用
for value in d.values()
,如果要同时迭代key和value,可以用
for k, v in d.items()


由于字符串也是可迭代对象,因此,也可以作用于
for
循环:

>>> for ch in 'ABC':
...     print(ch)
...
A
B
C


如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False


如果要对list实现类似Java那样的下标循环怎么办?Python内置的
enumerate
函数可以把一个list变成索引-元素对,这样就可以在
for
循环中同时迭代索引和元素本身:

>>> for i, value in enumerate(['A', 'B', 'C']):
...     print(i, value)
...
0 A
1 B
2 C

上面的
for
循环里,同时引用了两个变量,在Python里是很常见的,比如下面的代码:

>>> for x, y in [(1, 1), (2, 4), (3, 9)]:
...     print(x, y)
...
1 1
2 4
3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 函数