Python详细学习笔记+总结 第二天

切片 slice

l = [1, 2, 3]
s = l[0:1]
[1]
s = list(range(100))
s[0:100:9]
[0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99]



迭代 Iteration

是否可迭代

from collections import Iterable
isinstance('abc', Iterable)
True
isinstance([1, 2, 3], Iterable)
True
isinstance(123, Iterable)
False
d = enumerate(['a', 'b', 'c'])
for k, v in d:
    print(k, v)
0 a
1 b
2 c



列表生成式

p = '甲乙丙丁戊己庚辛壬癸'
q= '子丑寅卯辰巳午未申酉戌亥'
h = [p[x % len(p)] + q[x % len(q)] for x in range(60)]
['甲子', '乙丑', '丙寅', '丁卯', '戊辰', '己巳', '庚午', '辛未', '壬申', '癸酉', '甲戌', '乙亥', '丙子', '丁丑', '戊寅', '己卯', '庚辰', '辛巳', '壬午', '癸未', '甲申', '乙酉', '丙戌', '丁亥', '戊子', '己丑', '庚寅', '辛卯', '壬辰', '癸巳', '甲午', '乙未', '丙申', '丁酉', '戊戌', '己亥', '庚子', '辛丑', '壬寅', '癸卯', '甲辰', '乙巳', '丙午', '丁未', '戊申', '己酉', '庚戌', '辛亥', '壬子', '癸丑', '甲寅', '乙卯', '丙辰', '丁巳', '戊午', '己未', '庚申', '辛酉', '壬戌', '癸亥']
l = [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]



全排列

l = [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']



列表生成器 generator
一边循环,一边计算

g = (x * x for x in range(10))
a = next(g)

超出范围
StopIteration

yield,生成器generator

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return
fib(3)
print(next(a))
print(next(a))
print(next(a))
1
1
2

迭代器
Iterable
使用for循环
可迭代对象,list、tuple、dict、set、str、generator、yield函数
isinstance(x, Iterable)

Iterator
使用for循环、next()

Iterable转Iterator
iter()

l = iter([1, 2, 3])
next(l)
1



函数式编程
高阶函数
变量指向函数

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



函数名作为变量

abs = 10
abs(-10)
TypeError



传入函数
高阶函数,参数为函数

map()
两个参数,一个函数,一个Iterable
将函数作用到每个元素,返回Iterator

def f(x):
    return x * x
r = map(f, [1, 2, 3])
next(r)
1
list(r)
[1, 4, 9]

reduce
两个参数,1个函数,1个list
累积计算

from functools import reduce
def f(x, y):
    return x + y
r = reduce(f, [1, 2, 3])
6



filter
两个参数,1个函数,1个list

def is_odd(n):
    return n % 2 == 1
list(filter(is_odd, [1, 2, 3, 4]))
[1, 3]



Iterator
惰性序列
list()转list

排序,sorted

l = [36, 5, -12, 9, -21]
sorted(l)
[-21, -12, 5, 9, 36]
sorted(l, key=abs)
[5, 9, -12, -21, 36]
sorted(l, key=abs, reverse=True)
[36, -21, -12, 9, 5]



清除自定义变量

globals().pop('abs')



闭包,函数作为返回值
返回函数不要引用循环变量

def lazy_sum(*args):
    def sum():
        s = 0
        for n in args:
            s = s + n
        return s
    return sum
f = lazy_sum(1, 2, 3)
f()
6



匿名函数 lambda
:前面的x为参数
只能有一个表达式

list(map(lambda x : x * x, [1, 2, 3]))
[1, 4, 9]



装饰器
动态增加函数功能

def log(func):
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper
@log
def now():
    print('2017-12-24')
call now():
2017-12-24



@log
相当于now = log(now)

偏函数

def int2(x, base=2):
    return int(x, base)
int2('110')
6
import functools
int2 = functools.partial(int, base=2)
int2('1110')
14
int2('100', base=10)
100



模块
避免函数名、变量名冲突
.py

包 package
__init__.py必须存在,可以是空文件

使用模块

# -*- coding: utf-8 -*-
' a test module'
__author__ = 'Young'
import sys
def test():
    args = sys.argv
    if len(args) == 1:
        print('Hello, World!')
    else:
        print('Welcome!')
if __name__ == '__main__':
    test()
Hello, World!



作用域
默认public
__xx__ 特殊变量
_xx、__xx private

安装第三方模块

pip install Pillow


上一篇:Python详细学习笔记+总结 第三天

下一篇:赞助本站!