当前位置: 首页 > news >正文

Python Cookbook-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)成立)。

相关文章:

  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析③】
  • haproxy实现MySQL服务器负载均衡
  • Navicate数据库连接工具的下载与安装,附带使用(连接MySQL,建表、增删改查)
  • 云原生(五十五) | ECS中自建数据库迁移到RDS
  • 利用租用的GPU进行训练
  • 3.5 企业级AI Agent运维体系构建:从容器化部署到智能监控的工业级实践指南
  • Linux上安装jdk1.8和配置环境变量
  • 低代码组态软件-BY组态
  • 电商系统防重实战:三招解决订单重复创建难题
  • doris:最佳实践
  • 网络安全等级保护基本要求、测评要求、高风险判定指引综合梳理
  • 最新智能优化算法: 中华穿山甲优化( Chinese Pangolin Optimizer ,CPO)算法求解23个经典函数测试集,MATLAB代码
  • GCD of Subset
  • 设计模式:代理模式
  • [250216] Fastfetch 2.36 版本发布 | Netrunner 25 “Shockworm” 正式发布!
  • 深入学习Linux命令行中的各种替换操作(命令替换、参数替换、进程替换)
  • 计算机网络原理试题三
  • 国产FPGA开发板选择
  • 04性能监控与调优篇(D5_JVM优化)
  • 物联网行业通识:从入门到深度解析
  • 网站做盗版视频赚钱吗/媒体135网站
  • 自建网站怎么做二级页跳转/推广网页
  • 如何做流量网站/互站网
  • 韶山网站建设/网络营销策划书应该怎么写
  • wordpress标签归档/seo搜索排名优化是什么意思
  • 网站建设教程流程图/重庆森林壁纸