假设我有一个自定义类,该类str
实现/重写了一些方法:
class mystr(str):
# just an example for a custom method:
def something(self):
return "anything"
现在,我现在必须mystr
通过在构造函数中传递一个字符串来手动创建的实例:
ms1 = mystr("my string")
s = "another string"
ms2 = mystr(s)
这还不错,但是它导致了这样的想法,即使用类似于b'bytes string'
orr'raw string'
或or的自定义字符串前缀会很酷u'unicode string'
。
是否有可能在Python中创建/注册这样的自定义字符串文字前缀m
,以使文字m'my string'
产生新的实例mystr
?
还是将这些前缀硬编码到Python解释器中?
这些前缀在解释器中进行了硬编码,您不能注册更多的前缀。
但是,您 可以 做的是通过使用 自定义源编解码器
预处理Python文件。这是一个相当简洁的技巧,要求您注册一个自定义编解码器,并了解和应用源代码转换。
Python允许您在顶部加上特殊注释来指定源代码的编码:
# coding: utf-8
会告诉Python使用UTF-8编码的源代码,并在解析之前对文件进行相应的解码。Python在codecs
模块注册表中为此查找编解码器。而且
你可以注册自己的编解码器 。
该pyxl项目使用这种伎俩来从Python文件解析出的HTML语法与实际的Python语法来替换它们构建HTML,尽在“解码”的一步。请参阅该项目中的codec
包,其中该register
模块注册了一个自定义codec
搜索功能,该功能可以在Python实际解析和编译源代码之前转换源代码。将自定义.pth
文件安装到您的site- packages
目录中,以在Python启动时加载此注册步骤。另一个做同样的事情来解析Ruby样式的字符串格式的项目是interpy
。
然后,您所需要做的就是也构建这样的编解码器,该编解码器将解析Python源文件(对它进行标记,也许使用tokenize
module标记),并用mystr(<string literal>)
调用的自定义前缀替换字符串文字。要解析的任何文件都用标记# coding: yourcustomcodec
。
我将把这一部分留给读者练习。祝好运!
注意,此转换的结果然后被编译成字节码,并被缓存;您的转换只需在每个源代码修订版中运行 一次 ,使用您的编解码器的模块的所有其他导入将加载缓存的字节码。
当我发现可以将用户定义的文字模板化时,我大吃一惊: 但是上面的声明不适用于字符串文字: 给我以下错误: 掠夺。cpp:在函数“int main()”中: prog。cpp:12:15:错误:调用“运算符”“s()”时没有匹配的函数 std::cout prog.cpp:4:34:注意:候选:模板标准::字符串运算符" " _s() 模板标准::字符串运算符" " _s() prog.cpp: 4:
问题内容: 目前,我仅显示键,每个键都在新行中显示: 如何在新行中将它们显示为 key :: value ? 问题答案: 通过迭代器,将生成一个键,值元组: 更新为现代符号:
在我的脚本中,我有一个字符串及其前缀/后缀。我需要从原始字符串中删除前缀/后缀。 例如,假设我有以下值: 如何得到以下结果?
我一直试图使用date.format(DateTimeFormatter formatter)方法格式化一个日期字符串列表,例如,'date'是java.time.LocalDate对象。问题是,我找不到直接从字符串创建Year对象的方法。例如,如果我有字符串yearString=“90”。我想创建一个等于这个值的Year对象,然后使用format方法输出yearStringNew=“1990”。
问题内容: 在数学课上,我们学习了如何定义新的运算符。例如: 这定义了法律。对于x和y的任何实数,x y是x + 2y。 范例:。 可以在JavaScript中定义这样的运算符吗?我知道函数可以胜任: 但我想使用以下语法: 代替这个: 哪个是最接近这个问题的解决方案? 问题答案: 最简洁的答案是不。ECMAScript(标准JS所基于的)不支持运算符重载。 可以使用sweet.js之类的第三方工具
给定示例类: 如何为用户名添加自定义前缀并从id继承值?例如:id的值为1,所以我希望用户名字段的值为:“REGULAR.USER.1”