流畅的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__方法,则可洗牌,

相关推荐
ClutchoQ3 小时前
【你指的API是哪个API?软件工程师跨服聊天实录】
笔记·其他
二哈赛车手5 小时前
新人笔记---Spring AI的Advisor以及其底层机制讲解(涉及源码),包含一些遇见的Spring AI的Advisor缺陷问题的解决方案
java·人工智能·spring boot·笔记·spring
red_redemption6 小时前
自由学习记录(181)
学习
wuxinyan1236 小时前
大模型学习之路007:RAG 零基础入门教程(第四篇):生成侧核心技术与大模型集成
人工智能·学习·rag
阿豪只会阿巴6 小时前
【没事学点啥】TurboBlog轻量级个人博客项目——Turbo Blog 项目学习与上线指南
开发语言·python·学习·状态模式
Slow菜鸟6 小时前
Docker 学习篇(三)| Docker安装指南(Linux版)
linux·学习·docker
Tutankaaa7 小时前
知识竞赛软件SaaS版 vs 本地部署
人工智能·经验分享·笔记·学习
小仙女的小稀罕7 小时前
培训要点写不完不会整理?规范培训转待办可这样操作
大数据·人工智能·学习·自然语言处理·语音识别
许长安7 小时前
RPC 异步调用基本使用方法:基于官方helloworld-async 示例
c++·经验分享·笔记·rpc
Wallace Zhang8 小时前
SimpleFOC源码学习10(v2.3.2) - 电流传感器CurrentSense.cpp与CurrentSense.h
驱动开发·stm32·学习·电流环·simplefoc·foc电机控制