python进阶

一、容器、迭代器、生成器

http://python.jobbole.com/87805/

容器

一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中。尽管绝大多数容器都提供了某种方式来获取其中的每一个元素,但这并不是容器本身提供的能力,而是可迭代对象赋予了容器这种能力。通常这类数据结构把所有的元素存储在内存中(也有一些特例,并不是所有的元素都放在内存,比如迭代器和生成器对象),在Python中,常见的容器对象有:
list, deque, ….
set, frozensets, ….
dict, defaultdict, OrderedDict, Counter, ….
tuple, namedtuple, …
str

迭代器和生成器

https://www.zhihu.com/question/20829330

迭代器

使用内建的工厂函数iter(iterable)可以获取迭代器对象:iter(range(5));迭代器支持迭代协议的对象:for、in、not in;

生成器

当需要有一百万个元素的数组时,如果直接写出数组,将会保存到内存,那么会造成资源浪费。生成器就是在你需要的时候,会生成这个数组,占用空间极小。

生成器一般都是迭代器,但是迭代器不一定是生成器;


def range1(n):
    i = 0
    r = []
    while i < n:
        i += 1
        r.append(i)
    return r
    
def range2(n):
    i = 0
    while i < n:
        i += 1
        yield i
  • 简写如下 [i for i in range(100)]
  • 用 圆括号 代替 中括号, 就能得到一个生成器 (i for i in range(100))
python进阶_第1张图片
生成器.PNG

列表推倒

列表推导:可以加条件 if,可以进行运算
字典推导:和列表推导一样
集合推到:{}

l = [i for i in range(10)]
# 相当于
l = []
for i in range(10):
    l.append(i)
# 更复杂的例子如下
l = [i for i in range(10) if i % 2 == 0]
# 相当于
l = []
for i in range(10):
    if i % 2 == 0:
        l.append(i)
        
l = [str(i) for i in range(10)]
  • 字典推倒
{k: 1 for k in range(10)}
{str(k): 1 for k in range(10)}
print({str(k): 1 for k in range(10)})
  • 集合推到
>>> {i.lower() for i in ['A','B']}
{'a', 'b'}
>>> a = {i.lower() for i in ['A','B']}
>>> type(a)

>>>

python 类

  • 静态方法(类)
    • @staticmethod 修饰的方法
    • 只能用 类.方法() 的方式来调用
    • 实际上相当于一个普通函数
    • 放到类里只是为了看上去整齐点
    • 没有额外的参数
  • 类方法(类、实例子)
    • @classmethod 修饰的方法
    • 可以用 类.方法() 和 实例.方法() 来调用
    • 有一个 cls 参数代表调用者的 class
  • 实例方法(实例)
    • 普通方法
    • 有一个 self 参数
    • 只能被 实例.方法() 调用

python 参数

  • *args **kwargs

    • 多参数和关键字参数
  • def log(*args):

    • args 是一个包含了所有参数的 list
    • print(*args)
    • log(1, 2, 3, 4)
  • 匿名函数

    • lambda 函数
    • f = lambda a, b: a + b
    • 上面一句相当于下面一句
    def add(a, b):
        return a + b
    f = add
    
    • 匿名函数中只能有一个语句
    • 如果代码复杂,在 Python 中就不应该使用匿名函数
    • sorted(d, key=lambda part: part[0])

迭代器与生成器

类方法

匿名函数

你可能感兴趣的:(python进阶)