aardio教程五) 写Python风格的aardio代码(字符串篇)

前言

熟悉一个新的语言最麻烦的就是需要了解一些库的使用,特别是基础库的使用。

所以我想给aardio封装一个Python风格的库,Python里的基础库是什么方法名,aardio里也封装同样的方法名。

这样就不需要单独去了解aardio里一些方法的使用细节,可以很方便的将Python代码改成aardio代码。

语法差异

不过因为语法上有差异,使用上不能做到完全一模一样。比如Python字符串是可迭代的,而aardio并不能迭代类,aardio中的迭代器是函数。

另外,有些函数较为复杂,我只实现最基本的意思,比如Python的isdigitisnumeric是检测字符串是否全是数字,它的数字还包含一些其他语言的数字,不只是0-9的10个阿拉伯数字。

下载地址

库名就叫pyaardio,然后封装字符串的库就是pyaardio.str,封装列表的库就是pyaardio.list。目前只实现了pyaardio.str,欢迎大家提bug

下载库的代码可以到上一篇文章里(aardio教程) 搭建自己的扩展库仓库 )的扩展库下载,或者在上篇文章里的github也能看到完整代码,。

Python字符串方法

简单使用
import console; 
import pyaardio.str;var s0 = pyaardio.str("你好");
console.log("center: " , s0.center(10, "#"));var s1 = pyaardio.str("swafdrerswfdccswwscsasw");
console.log("count: " , s1.count("sw"));
console.log("endswith: ", s1.endswith("sw"))
console.log("find: ", s1.find("ers"))
console.pause(true);

具体实现

首先定义一个类:

namespace pyaardio;class str{ctor(s){this.rawStr = s;}@_metaProperty;
}

这里只给前几个方法的具体实现,不然文章就太长了,感兴趣的可以看库的代码

capitalize()

功能:将字符串的第一个字符转换为大写,其余字符转换为小写

capitalize = function(){var ss = string.trimleft(owner.rawStr);var s1 = string.slice(ss,1,1,true); // 取第一个字符var s0 = string.slice(ss,2,,true); // 取后面的字符var newStr = table.clone(owner); // 因为无法在内部实例化pyaardio.str类,所以只能拷贝自身// 第一个字符串大写,后面小写newStr.rawStr = string.upper(s1) + string.lower(s0);return newStr;
};
casefold()

功能: 将字符串转换为小写,用于不区分大小写的匹配

这里我就当它是lower来实现:

casefold = function(){var newStr = table.clone(owner);newStr.rawStr = string.lower(owner.rawStr);return newStr;
};
center(width, fillchar)

功能: 将字符串居中,并使用指定字符填充至长度width

center = function(width, fillchar=" "){var ss = owner.rawStr;var len = string.len(ss);// 如果fillchar类型也是pyaardio.str,则取它的实际字符串if(type(fillchar) == type(owner)) fillchar = fillchar.rawStr;// 如果fillchar给定的不是字符串或长度不等于1if(type(fillchar) != type.string || string.len(fillchar) != 1) return;if(!len){ // 如果本身自己就是空字符串,就返回width个fillchar字符var newStr = table.clone(owner);newStr.rawStr = fillchar;return newStr*width; }if(width <= len){ return owner;}var paddingSize = width - len;// 计算左右需要填充的长度var leftPaddingSize = ..math.floor(paddingSize/2);var rightPaddingSize = paddingSize - leftPaddingSize;// 拼接字符串var leftStr = table.clone(owner);leftStr.rawStr = fillchar;var rightStr = table.clone(owner);rightStr.rawStr = fillchar;return leftStr*leftPaddingSize + owner + rightStr*rightPaddingSize;
};
count(sub, start=..., end=...)

功能: 返回sub在字符串里出现的次数,可以指定开始和结束位置

count = function(sub,i,j){if(type(sub) == type(owner)) sub = sub.rawStr;var len = string.len(owner.rawStr);// aardio中索引是1开头,这里我们遵循Python的规范(0开始)i,j = formatSlice(i,j,len);if(!j) return 0;var count = 0;var pos;var subLen = string.len(sub);while(i<j){pos = owner.find(sub,i,j);if(pos == -1) break;count += 1;i = pos + subLen;if(i+subLen>len) break;}return count;
};
endswith(suffix, start=..., end=...)

功能: 检查字符串是否以指定的后缀结束

endswith = function(suffix,i,j){var len = string.len(owner.rawStr);i,j = formatSlice(i,j,len);if(!j) return false;var s = string.slice(owner.rawStr, i+1,j,true);return string.endWith(s,suffix);
};
expandtabs(tabsize=8)

功能: 将字符串中的tab符号('\t')转换为指定数量的空格

expandtabs = function(tabsize=8){var spaceStr = table.clone(owner);spaceStr.rawStr = " ";var space = spaceStr*tabsize;return string.replace(owner.rawStr,"\t",space.rawStr);
};
find(sub, start=..., end=...)

功能: 查找sub在字符串中的第一个出现位置,找不到时返回-1

find = function(sub,i,j){if(type(sub) == type(owner)) sub = sub.rawStr;var s = owner.rawStr;var len = string.len(s);i,j = formatSlice(i,j,len);if(!j) return -1;s = string.slice(s,1,j,true); if(i+string.len(sub) > len) return -1;var si,sj = string.find(s,"@"+sub,i+1,true);if(!si) si = 0;return si-1;
};
其他方法
  • format(*args, kwargs): 格式化字符串, 我只实现{变量}和{0}两种格式
  • format_map(mapping): 使用字典来格式化字符串
  • index(sub, start=..., end=...): 和find类似,但找不到子字符串时会抛出ValueError, aardio中我实现和find一样
  • isalnum(): 检查字符串是否由字母和数字组成
  • isalpha(): 检查字符串是否只包含字母
  • isascii(): 检查字符串是否只包含ASCII字符
  • isdecimal(): 检查字符串是否只包含十进制字符
  • isdigit(): 检查字符串是否只由数字组成
  • isidentifier(): 检查字符串是否是有效的标识符名
  • islower(): 检查字符串中所有字母是否都是小写
  • isnumeric(): 检查字符串中是否所有字符都是数字字符
  • isprintable(): 检查字符串中所有字符是否都是可打印的
  • isspace():检查字符串是否只包含空白字符
  • istitle(): 检查字符串是否为标题化的(所有单词的首字母大写,其余字母小写)
  • isupper(): 检查字符串中的所有字母是否都是大写
  • join(iterable): 将iterable中的字符串合并成一个字符串
  • ljust(width, fillchar): 返回左对齐字符串,并使用指定字符填充至长度width
  • lower(): 转换字符串中所有大写字符为小写
  • lstrip(chars): 移除字符串左边的指定字符集合
  • maketrans(intab, outtab): 创建字符映射的转换表
  • partition(sep): 根据分隔符将字符串分为三部分:sep前面的、sep、sep后面的
  • replace(old, new [, count]): 将字符串中的old替换成new,如果指定count,则替换不超过count次
  • rfind(sub, start=..., end=...): 从右侧开始查找sub在字符串里的第一个出现位置,找不到时返回-1
  • rindex(sub, start=..., end=...): 从右侧开始查找sub在字符串中的第一个出现位置,与rfind相似,但找不到时会抛出ValueError
  • rjust(width, fillchar): 返回右对齐字符串,并使用指定字符填充至长度width
  • rpartition(sep): 与partition相似,但是从右侧开始
  • rsplit(sub,count): 从字符串的末尾开始,按照指定的分隔符分割字符串
  • rstrip(sub): 删除字符串末尾的空格或指定字符, 注意sub指定的是字符集,比如sub="ab"则是指末尾所有的a和所有的b,而不是一个整体
  • split(sub,count): 从字符串的开头开始,按照指定的分隔符分割字符串
  • splitlines(sub,count): 按照行('\r', '\r\n', '\n')分割字符串
  • startswith(sub): 检查字符串是否以指定的前缀开始
  • strip(sub): 删除字符串前后的空格或指定字符
  • swapcase(): 将字符串中的小写字母转换为大写,大写字母转换为小写
  • title(): 将字符串中每个单词的首字母转换为大写
  • translate(tab): 根据给定的转换表替换字符串中的字符
  • upper(): 将字符串中的所有小写字母转换为大写字母
  • zfill(): 在数字字符串的左边填充零,直到达到指定的长度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/796844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lanelets_ 高效的自动驾驶地图表达方式

Lanelets: 高效的自动驾驶地图表达方式 附赠自动驾驶学习资料和量产经验&#xff1a;链接 LaneLets是自动驾驶领域高精度地图的一种高效表达方式&#xff0c;它以彼此相互连接的LaneLets来描述自动驾驶可行驶区域&#xff0c;不仅可以表达车道几何&#xff0c;也可以完整表述车…

AIGC实战——ProGAN(Progressive Growing Generative Adversarial Network)

AIGC实战——ProGAN 0. 前言1. ProGAN2. 渐进式训练3. 其他技术3.1 小批标准差3.2 均等学习率3.3 逐像素归一化 4. 图像生成小结系列链接 0. 前言 我们已经学习了使用生成对抗网络 (Generative Adversarial Network, GAN) 解决各种图像生成任务。GAN 的模型架构和训练过程具有…

真实的招生办对话邮件及美国高校官网更新的反 AI 政策

这两年 ChatGPT 的热度水涨船高&#xff0c;其编写功能强大&#xff0c;且具备强大的信息整合效果&#xff0c;所以呈现的内容在一定程度上具备可读性。 那么&#xff0c;美国留学文书可以用 ChatGPT 写吗&#xff1f;使用是否有风险&#xff1f;外网博主 Kushi Uppu 在这个申…

基于卷积神经网络的天气识别系统(pytorch框架)【python源码+UI界面+前端界面+功能源码详解】

功能演示&#xff1a; 天气识别系统&#xff0c;vgg16&#xff0c;mobilenet卷积神经网络&#xff08;pytorch框架&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的天气识别系统是在pytorch框架下实现的&#xff0c;系统中有两个模型可选…

vue+elementUI实现表格组件的封装

效果图&#xff1a; 在父组件使用表格组件 <table-listref"table":stripe"true":loading"loading":set-table-h"slotProps.setMainCardBodyH":table-data"tableData":columns"columns.tableList || []":ra…

基于Springboot的Java学习平台

采用技术 基于Springbootjava学习平台的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 系统功能模块 后台管理 用户注册 课程信息 作业信息 资料信息…

电工技术学习笔记——正弦交流电路

一、正弦交流电路 1. 正弦量的向量表示法 向量表示方法&#xff1a;正弦交流电路中&#xff0c;相量表示法是一种常用的方法&#xff0c;用于描述电压、电流及其相位关系。相量表示法将正弦交流信号表示为复数&#xff0c;通过复数的运算来描述电路中各种参数的相互关系 …

java中的正则表达式和异常

正则表达式&#xff1a; 作用一&#xff1a;用来校验数据格式是否合法 作用二&#xff1a;在文本中查找满足要求的内容 不用正则表达式&#xff1a;检验QQ号是否合法&#xff0c;要求全部是数字&#xff0c;长度在6-20&#xff0c;不能以0开头 public class test {public stat…

【Linux实践室】Linux高级用户管理实战指南:创建与删除用户组操作详解

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux创建用户组命令2.1.1 知识点讲解2.1.2…

亲手开发全国海域潮汐表查询微信小程序详情教程及代码

最近在做一个全国海域潮汐表查询&#xff0c;可以为赶海钓鱼爱好者提供涨潮退潮时间表及潮高信息。 下面教大家怎么做一个这样的小程序。 主要功能&#xff0c;根据IP定位地理位置&#xff0c;自动查询出省份或城市的港口&#xff0c;进入后预测7天内港口潮汐表查询。 步骤&…

全坚固笔记本丨工业笔记本丨三防笔记本相较于普通笔记本有哪些优势?

三防笔记本和普通笔记本在设计和性能方面存在显著差异&#xff0c;三防笔记本相较于普通笔记本具备以下优势&#xff1a; 三防笔记本通常采用耐磨、耐摔的材料&#xff0c;并具有坚固的外壳设计&#xff0c;能够承受恶劣环境和意外碰撞&#xff0c;有效保护内部组件不受损坏。相…

【Linux】进程初步理解

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 冯诺依曼体系结构1.1 认识冯诺依曼体系结构1.2 存储金字塔 2. 操作系统2.1 概念2.2 结构2.3 操作系统的管理 3. 进程3.1 进程描述3.2 Linux下的PCB 4. task_struct本身内部属性4.1 启动4.2 进程的创建方式4.2.1 父…

C/C++预处理过程

目录 前言&#xff1a; 1. 预定义符号 2. #define定义常量 3. #define定义宏 4. 带有副作用的宏参数 5. 宏替换的规则 6. 宏和函数的对比 7. #和## 8. 命名约定 9. #undef 10. 命令行定义 11. 条件编译 12. 头文件的包含 13. 其他预处理指令 总结&#x…

谷歌在生成式人工智能领域的挑战与机遇:内部纷争与市场压力下的战略调整

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

nest获取传入接口的参数

代码 Query 可接收接口路径中传入的参数 Body 可接收body中传入的参数 Headers 可接收Headers中传入的参数 import { Controller, Post, Get, Body, Query, Headers } from nestjs/common;// 定义getList参数类型 export class ListDto {readonly page: number;readonly page…

keycloak - 鉴权VUE

目录 一、前言 1、背景 2、实验版本 二、开始干活 1、keycloak配置 a、创建领域(realms) b、创建客户端 c、创建用户、角色 2、vue代码 a、依赖 b、main.js 三、未解决的问题 目录 一、前言 1、背景 2、实验版本 二、开始干活 1、keycloak配置 a、创建领域(r…

SQL Server详细安装使用教程

1.安装环境 现阶段基本不用SQL Server数据库了&#xff0c;看到有这样的分析话题&#xff0c;就把多年前的存货发一下&#xff0c;大家也可以讨论看看&#xff0c;思路上希望还有价值。 SQL Server 2008 R2有32位版本和64位版本&#xff0c;32位版本可以安装在Windows XP及以上…

PyCharm使用指南(个性化设置、开发必备插件、常用快捷键)

&#x1f947;作者简介&#xff1a;CSDN内容合伙人、新星计划第三季Python赛道Top1 &#x1f525;本文已收录于Python系列专栏&#xff1a; 零基础学Python &#x1f4ac;订阅专栏后可私信博主进入Python学习交流群&#xff0c;进群可领取Python视频教程以及Python相关电子书合…

如何在Python中将HTML实体代码转换为文本

在处理HTML数据时&#xff0c;有时会遇到HTML实体代码&#xff0c;这些代码是为了在HTML中表示特殊字符而使用的。例如&#xff0c;<表示小于符号(<)&#xff0c;>表示大于符号(>)&#xff0c;&表示和符号(&)等等。那么当我们在实际操作中可能会遇到下面的…

ebpf+perfetto实现调度延迟记录与展示

1.背景 需要分析生产环境的调度问题,如线程的调度延迟有多少,在哪些时间点延迟比较明显,影响其调度的主要原因是什么?其次,我们希望可以比较直观的展示调度延迟情况。最好能对接perfetto的UI和后处理,因为perfetto已经用于分析比较多的性能数据,可以和调度数据进行整合.我们…