首页 > 技术文章 > Python基础知识点总结

abcyrf 2019-07-12 14:58 原文

常用数据类型

整数、浮点数、字符串、布尔值、空值、

字符串编码

默认使用unicode编码,通过encode转换成byte数组,byte通过decode转换成unicode字符串。

常用数据结构

list
tuple
set
dict

列表生成式

生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):
[x * x for x in range(1, 11) if x % 2 == 0]

生成器generator

列表生成式的[]改成(),就创建了一个generator
g = (x * x for x in range(10))
使用yield创建

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语句处继续执行

迭代器

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

map/reduce

>>> 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(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

filter

筛选函数

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

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

sorted 可以对list进行排序呢

sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)

返回函数

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

当我们调用lazy_sum()时,返回的并不是求和结果,而是求和函数

匿名函数

匿名函数lambda x: x * x实际上就是:

def f(x):
    return x * x

装饰器

import functools

def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper


import functools

def log(text):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('%s %s():' % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator

偏函数

functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。

>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')

type和isinstance的区别

type()不会认为子类是一种父类类型。
isinstance()会认为子类是一种父类类型。

推荐阅读