Python 2、函数&切片&迭代&列表生成式

☆函数:

def fun_name(param):
    return xxxx

返回多值:

def move(x, y, z):
    return x, y
x, y = move(1, 2, 3)
print x, y
==> 1, 2

其实这个是一种假象,返回值仍是单一值

a = move(1, 2, 3)
print a
==>(1, 2)

原来返回值是一个tuple


递归函数:
汉诺伊
我们对柱子编号为a, b, c, 将所有圆盘从a移动到c可以描述为:
如果a只有一个圆盘,可以直接移动到c;
如果a有N个圆盘,可以看成a有一个圆盘(底盘)+(N-1)个圆盘,
首先需要把(N-1)个圆盘移动到b,然后,将a的最后一个圆盘移动到c,
再将b的(N-1)个圆盘移动到c。

def move(n, a, b, c):
    if n==1:
        print a, '-->', c
        return
    move(n-1, a, c, b)
    print a, '-->', c
    move(n-1, b, a, c)
move(4, 'A', 'B', 'C')

默认参数:

def power(x, n=2):
    return x ** n

power(5)
==>25
power(5,3)
==>125

注意:由于函数的参数由左到右匹配,所以默认参数只能在最右边


可变参数:

def ff(*args):
    print args
ff()
==>()
ff(1, 'a')
==>(1, 'a')         #原来参数*args是个tuple

☆切片

对list进行切片

L[0:3]
L[x:y]    #取xy但不包含y的所有元素
L[:3]
L[:y]    #从0开始取到y但不包含y的所有元素
L[x:]    #从x开始取完
L[:]    #取所有元素
L[1:8:2]
L[x:y:z]    #从x取到y不包含y,间隔为z-1

倒序切片:

L[-2:]    #从倒数第二个元素开始取到最后
L[ : -2: 2]    #每隔一个直到倒数第二个

对字符串切片:

'ABCDEFG'[:3]
==>'ABC'
'ABCDEFG'[::2]
==>'ACEG'
另:upper()大写、lower()小写

☆迭代

有时候我们想在for循环中拿到索引,使用enumerate()函数:

L = ['Adam', 'Lisa', 'Bart']
for index, name in enumerate(L):
    print index,'-',name
==>0 - Adam
==>1 - Lisa
==>2 - Bart

实际上,enumerate()把[‘Adam’, ‘Lisa’, ‘Bart’]变成了[(0,’Adam’), (1,’Lisa’), (2,’Bart’)]
因此,迭代的每个元素实际上都是一个tuple

for t in enumeration(L):
    index = t[0]
    name = t[1]

迭代 dict 的 value:

for v in d.values():    #把dict转换成value的list
for v in d.itervalues():    #不转换,省内存

☆列表生成式

生成列表:

range(1,10)
==>[1,2,3,4,5,6,7,8,9]
[x * x for x in range(1, 11)]
==>[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

条件过滤:

[x * x for x in range(1, 11) if x % 2 == 0]
==>[4, 16, 36, 64, 100]

多层表达式:

[m+n for m in 'ABC' for n in '123']
==>['A1','A2','A3','B1','B2','B3','C1','C2','C3']
#相当于
L = []
for m in 'ABC':
    for n in '123':
        L.append(m+n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值