《Python Cookbook(第2版)中文版》——1.19 检查字符串中的结束标记

简介:

本节书摘来自异步社区《Python Cookbook(第2版)中文版》一书中的第1章,第1.19节,作者[美]Alex Martelli , Anna Martelli Ravenscrof , David Ascher ,高铁军 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.19 检查字符串中的结束标记

任务

给定一个字符串s,你想检查s中是否含有多个结束标记中的一个。需要一种快捷、优雅的方式,来替换掉s.endswith(end1)、s.endswith(end2)或s.endswith(end3)之类的笨重用法。

解决方案

对于类似于本节的问题,itertools.imap给出了一种快速方便的解决办法:

import itertools
def anyTrue(predicate, sequence):
       return True in itertools.imap(predicate, sequence)
def endsWith(s, *endings):
       return anyTrue(s.endswith, endings)

讨论

一个典型的endsWith应用是打印出当前目录中所有的图片文件:

import os
for filename in os.listdir('.'):
       if endsWith(filename, '.jpg', '.jpeg', '.gif'):
            print filename

本节解决方案中给出的思想可以很容易地应用到其他类似的检查任务中去。辅助函数anyTrue是一个通用而快速的函数,可以给它传入其他的被绑定方法(bound method)作为第一个参数,比如s.startswith或s. _contains _。事实上,不使用辅助函数而直接编码也许更好:

if anyTrue(filename.endswith, (".jpg", ".gif", ".png")):

我认为它的可读性也没什么问题。

被绑定方法(Bound Method) 如果一个Python对象提供一个方法,可以直接获得一个已经绑定到该对象的方法,从而直接使用此方法。(比如,可以将其赋值给别的对象、将它作为一个参数传递、或者在一个函数中直接返回它,等等。)举个例子: L = ['fee', 'fie', 'foo'] x = L.append 现在x指向了列表对象L的一个被绑定方法。调用x,比如x(‘fum’),和调用L.append(‘fum’)是完全等价的:结果都是对象L变成了['fee', 'fie', 'foo', 'fum']。 如果访问的是一个类型或者一个类的方法,而不是一个类型或者类的实例的方法,你得到的是一个非绑定方法,该方法并未“依附”于此类型或者类的任何一个实例:当调用它时,需要提供该类型或类的一个实例作为第一个参数。比如,如果设定y = list.append,你不能直接调用y(‘I’),因为Python猜不出你想给哪个列表对象添加一个I。可以调用y(L,’I’),这和调用L.append(‘I’)效果完全一样(只要isinstance(L,list)成立)。

本节的解决方案和想法来源于news:comp.lang.python的一个讨论,并综合和概括了很多人的观点,包括了Raymond Hettinger、Chris Perkins、Bengt Richter等。

相关文章
|
1天前
|
Python
Python避免在字符串和字节之间混淆
【5月更文挑战第5天】Python避免在字符串和字节之间混淆
11 3
|
2天前
|
数据安全/隐私保护 开发者 Python
【Python 基础】检查字符串是否只包含数字和字母?
【5月更文挑战第8天】【Python 基础】检查字符串是否只包含数字和字母?
|
2天前
|
Python
【Python 基础】如何将一个字符串转化为全大写和全小写?
【5月更文挑战第8天】【Python 基础】如何将一个字符串转化为全大写和全小写?
|
2天前
|
机器学习/深度学习 存储 人工智能
python 字符串的三种定义方式
python 字符串的三种定义方式
8 1
|
4天前
|
Python Perl
Python中的字符串分析:判断字符串中是否包含字母
Python中的字符串分析:判断字符串中是否包含字母
9 0
|
4天前
|
C语言 Python
【Python 基础】如何进行字符串插值?
【5月更文挑战第6天】【Python 基础】如何进行字符串插值?
|
4天前
|
存储 监控 Python
python 日期字符串转换为指定格式的日期
python 日期字符串转换为指定格式的日期
14 3
|
4天前
|
数据处理 Python
Python中按指定数量分割列表字符串的方法
Python中按指定数量分割列表字符串的方法
9 1
|
11天前
|
存储 算法 Python
【亮剑】探讨了Python中查找两个字符串差异位置的方法
【4月更文挑战第30天】本文探讨了Python中查找两个字符串差异位置的方法。首先,通过内置函数和基本字符串操作,可以逐个字符比较找到第一个不同位置。其次,利用`difflib`库的`SequenceMatcher`能获取更详细的差异信息。最后,通过实现Levenshtein距离算法,可以计算字符串间的最小编辑距离。根据需求选择合适的方法,能提升代码效率和可读性。
|
11天前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。