Python学习(2)

本系列内容来源于 廖雪峰的Python教程 点击查看原文

迭代

dict 的迭代

d = {'a':1,'b':2,'c':3}

#遍历key
for key in d:
    print(key,end=" ")

#遍历values
for key in d.values():
    print(key,end=" ")

#遍历key values
for k, v in d.items():
    print(k,':',v,end=" ")

c b a
3 2 1
c:3 b:2 a:1

列表生成式

形如:[表达式/x for x in range(0,10) 表达式]
[x for x in range(1,11)]
[x*x for in range(1,11)]
[x*x for in range(1,11) if x % 2 == 2]

#两层循环
>>> [m+n for m in 'ABC' for n in 'XYZ']
  ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

#获取当前目录

>>> import os
>>> [d for d in os.listdir('.')]

['Alice', 'AliceRobot', 'Android学习.txt', 'Bayes-master', 'CloudReader-master', 'd.jpg', 'desktop.ini', 'fnlp', 'fnlp-master', 'fnlp.zip', 'HttpClient.jar', 'learngit', 'NDK', 'RobotService.zip', 'textt.py']

>>> L = ['Hello', 'World', 18, 'Apple', None]
>>> [s.lower() for s in L if isinstance(s,str)]
['hello', 'world', 'apple']

生成器

列表生成器

把列表生成式的[] 换成()
通过next()去输出一次的结果

>>> g = (x for x in range(10))
>>> g
 at 0x0000016D28CBC728>
>>> next(g)
0
>>> next(g)
1
>>> for x in g:
    print(x,end=" ")


2 3 4 5 6 7 8 9

生成器函数

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'

在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

高级函数

变量指向函数

>>> f = abs
>>> f


>>> f = abs
>>> f(-10)
10

map/reduce

map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回

>>> def f(x):
...     return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]

reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

>>> from functools import reduce
>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])


filter

filter()也接收一个函数和一个序列
filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

def is_odd(n):
    return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))

sorted

>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]


根据key自定义排序
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]

忽略大小写,并反向排序
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']

返回函数

def lazy_sum(*args):
    def sum():
        ax = 0
        for n in args:
            ax = ax + n
        return ax
    return sum

>>> f = lazy_sum(1, 3, 5, 7, 9)
>>> f()
25

匿名函数(lambda)

lambda x: x * x
相当于

def f(x):
    return x * x

装饰器 请自行百度

偏函数

在 python的functools模块等

int("10000",base=2)   #10000二进制 转换为十进制 base默认为10

创建 偏函数

>>> import functools
>>> int2 = functools.partial(int,base=2)
>>> int2('100000')
32
>>> int2('101001')
41
>>>

你可能感兴趣的:(Python学习(2))