您当前的位置: 首页 > 

B417科研笔记

暂无认证

  • 4浏览

    0关注

    154博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

特别方法,列表推导与生成器

B417科研笔记 发布时间:2019-02-01 23:23:30 ,浏览量:4

《流畅的python》读书笔记 Day 1: 特别方法:

让自己的类实现python中内置的特别方法,就可以让你的自定义类对象也能被python的特别方法调用。这里体现了python的一致性。 如自定义类中实现以下特别方法:

  1. len(), 可以使用len()
  2. add(), 可以使用 +
  3. repr(), 可以使用print()

就是重载的意思,但是因此使得python中所有的类保持着一致的能被内置特殊方法调用的性质。 示例:实现vector类, 复写特别方法

class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __repr__(self):
return 'Vector(%r, %r)' % (self.x, self.y)
def __abs__(self):
return hypot(self.x, self.y)
def __bool__(self):
return bool(abs(self))
def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return Vector(x, y)
def __mul__(self, scalar):
return Vector(self.x * scalar, self.y * scalar)
列表推导

例子:

  1. 代替for 循环 codes = [ord(symbol) for symbol in symbols]
  2. 加上判断语句 beyond_ascii = [ord(s) for s in symbols if ord(s) > 127]
  3. 双重循环 tshirts = [(color, size) for color in colors for size in sizes] 为了避免错误, 列表的作用应该只能有一个:生成新的列表。
生成器

与列表推导的最大区别在于:生成器不会直接生成整个列表,而是可以根据需要逐个地产出元素。

例子:

  1. 用生成器生成元组tuple tuple(ord(symbol) for symbol in symbols) 当生成器ord(symbol) for symbol in symbols为唯一参数时,不需要再加一对圆括号。
  2. for循环中使用生成器
 	for tshirt in ('%s %s' % (c, s) for c in colors for s in sizes): 
   		print(tshirt)

生成器表达式逐个产出元素,从来不会一次性产出一个含有 6 个 T 恤样式的列表。

今日感想:

第一天,但感觉这本书真的很好,希望可以坚持下来。

次日补充: 元组拆包

自己写python的时候就感受到了元组拆包 平行赋值的便捷。 如:

lax_coordinates = (33.9425, -118.408056)
latitude, longitude = lax_coordinates 

还有与其相关的*操作符:

  1. *拆包作为函数参数
>>> t = (20, 8)
>>> divmod(*t)
(2, 4)
  1. 用*处理剩下的元素(不重要的)
>>> a, b, *rest = range(5)
>>> a, b, rest
(0, 1, [2, 3, 4])

还包括了著名的*args.

关注
打赏
1649265742
查看更多评论
立即登录/注册

微信扫码登录

0.0448s