如果只推荐一本 Python 书,我要 Pick 它!

 △点击上方“Python猫”关注 ,回复“1”领取电子书

作者:豌豆花下猫

来源:Python猫

今年二月初,我偶然看到了一条推特:

《流畅的Python》一书的作者发布了一条激动人心的消息:他正在写作第二版!

如果要票选最佳的 Python 进阶类书目,这本书肯定会是得票率最高的书籍之一。我在最早写“Python猫荐书系列”时,就想推荐它,但又觉得好东西应该留到最后,所以一直拖到了现在……

如果你读过它,肯定也会认为它值得推荐;如果你没有,那请往下阅读,看我的介绍能否打动你把它列为必读书目吧~

这本书的英文名是《Fluent Python》,在 2015 年 8 月出版。两年后,国内的图灵教育出品了译本,出版时间是 2017 年 5 月,获得豆瓣 9.4 高分。(图书翻译/出版真是个漫长的过程啊)

作者 Luciano Ramalho 是个巴西人、资深的 Python 程序员/演讲者、PSF(Python软件基金会)成员。书籍的技术审校与推荐人囊括了圈内的一众大咖。

此书一出,大受圈内好评,各国出版社纷纷引进版权,目前至少已有 9 种语言版本(来数数你认识几种?):

PS:图片出自@fluentpython官推,简体中文版最薄,巧合占据C位。根据图灵教育统计,简体中文版销量超过4万册,预计在2020年能超越英文版的销量。

那么,这本书到底写了些什么呢?又有哪些特别之处呢?

全书内容充实,除去前言、附录和术语表这些内容,共分为六个部分 21 章节。我将核心章节内容制作了一份思维导图:

(在Python猫公众号回复『流畅』,有完整的高清原图)

以上是主要章节的思维导图,图中的数字是折叠起来的分支数。

下面给大家看看部分的细节图:

原图太大,展示不下。在Python猫公众号内回复『流畅』,有完整的高清原图、PDF 版本和 MarkDown 版本

从章节上可以看出,这本书主要面向中高级的开发者。它基本不涉及入门级内容,反而聚焦在数据模型、数据结构、函数对象、面向对象、控制流程与元编程等话题上。

打开书本第一章,作者用寥寥十几行 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]

然后,直接就点出了全书最关注的核心话题:由各种特殊方法构成的数据模型。

特殊方法(special method)是__xxx__() 这种以前后双下划线命名的东西,通常又被称为魔术方法(magic method)和双下方法(dunder method),是 Python 独有的设计。

数据模型(data model)无疑是 Python 语言的关键核心,是得以形成所谓 Python 风格(pythonic)的基石。

Python 中一切皆对象,而数据模型则是这些对象的接口规范,正是因为它,Python 得以获得极强的行为一致性。

《流畅的Python》以数据模型为始,定下了全文的风格基调,即关注 Python 对象的构造以及语言内部的特性细节,目的是让读者写出更地道、简洁高效、可读易用的代码。

《流畅的Python》作者与中文版合影

接着,它介绍了 Python 中一些内置类型的特性(序列类型、映射类型、文本和字节类型),介绍作为特殊对象的函数以及一般性对象的用法,介绍控制流程(迭代器、生成器、上下文管理器、协程和并发编程),最后深入到素有黑魔法之称的元编程(描述符和元类)。

全书 600 多页,洋洋洒洒,旁征博引,内容充实到让人应接不暇,让人时不时就产生一种“又学到了新知识”的感觉,以及一种“哦我想进一步学习”的求知欲望。

很多读过书的同学会有一个同感:它的“延伸阅读/杂谈”并不是闲笔,反而有些内容比正文更精彩,作者在此展示了他丰富的知识面(官方文档、社区典故、语法演进、文章视频、开源项目、语言差异等等),每一章都值得挖掘阅读。目前没有任何一本 Python 书籍能在这方面与它匹敌。

我推荐大家找到自己感兴趣的章节进行阅读,另外,有人做了非常不错的读书笔记(都挺长的),我放在这里:

http://www.hongweipeng.com/index.php/archives/1345 (by hongweipeng)

http://frankorz.com/2017/07/01/fluent-python-note (by 猫冬)

《流畅的Python》第一版基于当时最新的 Python 3.4。这些年来,Python 不断丰富自己,既正式宣告了 Python 2 版本的终结,又快速地演进到了最新的 3.9 版本。

但是,由于作者关注的是 Python 的核心概念,探讨的是基本不会变化的特性,因此倒不必太担忧内容过时,它仍是一本非常推荐购买和阅读参考的书籍。

我非常关心它的第二版,但是也知道,写作需要时间,英文出版、中文翻译和中文出版也都需要时间,所以我们就一起静候佳音吧。

以上是推荐的购买链接~~

最后,还有一个好消息:

1024程序员节

当当计算机图书大促

每满100减50

满200减100

满300减150

……

满400减200的同时,附赠40元的叠加券

相当于160元购买价值400元的硬核技术书

【Python猫】40元专属叠加优惠码:

DQHCZA(有效期10.22-11.3)

使用条件:购书实际支付金额满200,即可享受再减40的优惠。

使用范围:全场当当自营图书

优惠码使用步骤:

步骤一:复制优惠码 DQHCZA

步骤二:长按二维码,直达技术专题,挑选图书到购物车,再点击结算

  

步骤三:点击“优惠券/码”处,输入优惠码 DQHCZA(注意都要大写哦)

           

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
FedEx 提供了一套 API,你可以使用 Python 调用它们。FedEx 提供了官方的 Python SDK,叫做 fedex-api,可以帮助你快速地集成 FedEx API。下面是使用 fedex-api 的基本步骤: 1. 安装 fedex-api 使用 pip 安装 fedex-api: ``` pip install fedex-api ``` 2. 导入必要的库 ``` from fedex.services.ship_service import FedexProcessShipmentRequest, FedexDeleteShipmentRequest from fedex.tools.conversion import sobject_to_dict ``` 3. 创建 FedEx API 的请求 ``` # 创建 FedEx 处理发货请求对象 ship_request = FedexProcessShipmentRequest(config_obj, customer_transaction_id='Ship-1234') # 设置发货信息 ship_request.RequestedShipment.ShipTimestamp = datetime.datetime.now().replace(microsecond=0).isoformat() ship_request.RequestedShipment.DropoffType = 'REGULAR_PICKUP' ship_request.RequestedShipment.ServiceType = 'FEDEX_GROUND' ship_request.RequestedShipment.PackagingType = 'YOUR_PACKAGING' ship_request.RequestedShipment.TotalWeight.Value = 50.0 ship_request.RequestedShipment.TotalWeight.Units = 'LB' # 设置寄件人信息 ship_request.RequestedShipment.Shipper.Contact.PersonName = 'John Doe' ship_request.RequestedShipment.Shipper.Contact.CompanyName = 'ABC Company' ship_request.RequestedShipment.Shipper.Contact.PhoneNumber = '555-555-5555' ship_request.RequestedShipment.Shipper.Address.StreetLines = ['123 Main St'] ship_request.RequestedShipment.Shipper.Address.City = 'Anytown' ship_request.RequestedShipment.Shipper.Address.StateOrProvinceCode = 'MI' ship_request.RequestedShipment.Shipper.Address.PostalCode = '12345' ship_request.RequestedShipment.Shipper.Address.CountryCode = 'US' # 设置收件人信息 ship_request.RequestedShipment.Recipient.Contact.PersonName = 'Jane Doe' ship_request.RequestedShipment.Recipient.Contact.CompanyName = 'XYZ Company' ship_request.RequestedShipment.Recipient.Contact.PhoneNumber = '555-555-5555' ship_request.RequestedShipment.Recipient.Address.StreetLines = ['456 Elm St'] ship_request.RequestedShipment.Recipient.Address.City = 'Anytown' ship_request.RequestedShipment.Recipient.Address.StateOrProvinceCode = 'MI' ship_request.RequestedShipment.Recipient.Address.PostalCode = '12345' ship_request.RequestedShipment.Recipient.Address.CountryCode = 'US' # 设置包裹信息 ship_request.RequestedShipment.PackageCount = 1 ship_request.RequestedShipment.RequestedPackageLineItems = [] package_item = ship_request.create_wsdl_object_of_type('RequestedPackageLineItem') package_item.Weight.Value = 50.0 package_item.Weight.Units = 'LB' ship_request.RequestedShipment.RequestedPackageLineItems.append(package_item) ``` 4. 发送请求并处理响应 ``` # 发送请求 ship_service = fedex_api.ShipServiceClient(config_obj) ship_reply = ship_service.process_shipment(ship_request) # 处理响应 if ship_reply.HighestSeverity == 'SUCCESS': tracking_number = ship_reply.CompletedShipmentDetail.CompletedPackageDetails[0].TrackingIds[0].TrackingNumber print(f'Successfully created shipment with tracking number {tracking_number}') else: print('Failed to create shipment') ``` 以上是使用 fedex-api 创建发货请求的基本步骤,具体实现可能因 FedEx 的 API 版本和使用场景而有所不同。在实际开发中,你需要根据 FedEx 的 API 文档来构造请求、发送请求、处理响应、解析数据。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值