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

    xiaoxiao2021-04-14  78

    ☆函数:

    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)
    转载请注明原文地址: https://ju.6miu.com/read-670366.html

    最新回复(0)