流畅的python-学习笔记_前言+第一部分

前言

标准库doctest

测试驱动开发:先写测试,推动开发

obj[key]实际调用实例的__getitem__方法

python数据模型

特殊方法

特殊方法一般自己定义,供py解释器调用,不推荐自己手动调用。

对于py内置类型,调用特殊方法时,cython可能会直接从c结构获取字段值,免去了py特殊方法调用,加快方法耗时,比如求py内置类型列表或元组等len时,会调对象__len__方法,该方法会调PyVarObject的ob_size属性

特殊方法调用:大部分是隐式调用。len(obj)会调用 obj.len, for i in obj 会调用iter(obj),然后会调用obj.__iter__方法

repr__和__str

调用print(obj)或显示调用str(obj)时会调用__str__

直接obj时回显是__repr__的

bool

if obj时,会调用obj.bool,如果obj没有__bool__方法,则调用obj.len,如果返回0则False,返回非0则True

纸牌类

定义

__len__方法注意不要len(self),会形成无限循环

python 复制代码
import collections
Card = collections.namedtuple('Card', ['rank', 'suit'])
class FrenchDeck:
  ranks = [str(n) for n in range(2,11)] + list('JQKA')
  suits = 'spades diamonds clubs hearts'.split()
  def __init__(self):
    self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks]
  def __len__(self):
    return len(self._cards)
  def __getitem__(self, position):
    return self._cards[position]

随机抽牌

可用random.choice方法

可迭代

仅实现__getitem__方法后,实例就变成可迭代了

洗牌

对象不可变,如果添加__setitem__方法,则可洗牌,

相关推荐
想七想八不如114082 分钟前
markdown笔记(没找到合适笔记软件,暂存)
笔记·目标检测
阳光九叶草LXGZXJ2 分钟前
自制数据库迁移工具-C版-07-HappySunshineV1.6-(支持PG、达梦、Gbase8a)
linux·c语言·开发语言·数据库·学习·postgresql
Bechamz2 分钟前
大数据开发学习Day34
java·大数据·学习
脑子不好真君8 分钟前
system-design-primer学习笔记——Updating
笔记·学习
星恒随风13 分钟前
从0开始的操作系统学习之路(2)
c语言·笔记·学习
daanpdf16 分钟前
高中数学必修一必修二课本习题答案人教版(A版+B版)
笔记
九成宫17 分钟前
WSL2 网络优化配置:提升Git克隆与包下载速度
windows·笔记·代理模式·pip·wsl
羊群智妍26 分钟前
2026 GEO实战:AI搜索优化监测工具选型与用法
笔记
爱喝水的鱼丶30 分钟前
SAP-ABAP:数据类型与数据对象 第二篇:底层逻辑篇——数据类型的分类体系与底层存储原理
运维·开发语言·学习·sap·abap
夹芯饼干34 分钟前
CentOS 7 虚拟机联网与 yum 源配置笔记
linux·笔记·centos