首先整体结构是表达式 if 逻辑表达式 else 表达式
,所以整体逻辑如下
如果s为空串返回s,否则返回s[0] + s.title().translate({ord('-'):None, ord('_'):None})[1:]
按照需求,可以得到这么一个思路,s.title()会得到区分单词的首字母大写的字符串;把第一个字母换成s本身的大小写状态,剩下的句子去掉破折号/下划线就得到了驼峰式大小写的字符串
所以 s.title().translate({ord('-'):None, ord('_'):None})就是去掉破折号和下划线用的,下面是python文档中介绍的用法
str.translate(table)
返回原字符串的副本,其中每个字符按给定的转换表进行映射。 转换表必须是一个使用 getitem() 来实现索引操作的对象,通常为 mapping 或 sequence。 当以 Unicode 码位序号(整数)为索引时,转换表对象可以做以下任何一种操作:返回 Unicode 序号或字符串,将字符映射为一个或多个字符;返回 None,将字符从结果字符串中删除;或引发 LookupError 异常,将字符映射为其自身。
你可以使用 str.maketrans() 基于不同格式的字符到字符映射来创建一个转换映射表。
另请参阅 codecs 模块以了解定制字符映射的更灵活方式。
其实哪怕不看文档,也可以猜到translate()接受一个字典,key为要操作的字符的unicode值,value为要替换的值,None表示删掉对应字符。因为ord()函数的作用就是对表示单个 Unicode 字符的字符串,返回代表它 Unicode 码点的整数。