python - Left += 字符串操作
问题描述
在 Python 中,该+=
操作是一个右动作,意思a+=b
是等价于a=a+b
.
因为,对于字符串,这个操作不是可交换的,它提出了一个问题,如果有一个类似的左操作操作符,即某个操作符(或其他黑客)说%=
这样的话a%=b
?a=b+a
附录
到目前为止的解决方案,除了显而易见的a=b+a
,涉及覆盖str.__add__
方法,正如@BrianJoseph 指出的那样,这并不是我的想法,因为它只是将问题转移到另一个极端。
以下解决方法,涉及这个惊人的 hack,说明了我正在寻求的行为。
预赛
# -------------------------------------------------------------
# Following class can be found in Tomer Filiba's blog
# Link provided in the question
from functools import partial
class Infix(object):
def __init__(self, func):
self.func = func
def __or__(self, other):
return self.func(other)
def __ror__(self, other):
return Infix(partial(self.func, other))
def __call__(self, v1, v2):
return self.func(v1, v2)
# -------------------------------------------------------------
# Custom Class
class my_str(str):
def __init__(self, string):
self.string = string
def __str__(self):
return self.string.__str__()
def __repr__(self):
return self.string.__repr__()
@Infix
def left_assign(self, string):
self.string = string + self.string
例子
# Testing
a = my_str('World')
b = 'Hello'
print(a)
# World
a |my_str.left_assign| b
print(a)
# HelloWorld
当然,这行a |my_str.left_assign| b
写起来并不容易a = b + a
,但这只是一个示例。
最后,对于那些我的未编辑问题可能不清楚的人:我(曾经)想知道是否a=b+a
可以a
只写一次(类似于a+=b
for a=a+b
)。
解决方案
如果您询问是否有一个运算符来前置字符串(而不是像 ' 那样附加它们+=
),我认为没有。写出:
b = a + b
是我知道如何添加a
到b
.
(有趣的是,由于字符串附加是不可交换的,Larry Wall(Perl 的创建者)选择使用.
作为字符串附加运算符,以便+
完全可交换和数学,这a += b
意味着a = a+b
和a = b+a
。除非你明确地重载它,当然。)
推荐阅读
- google-cloud-platform - 如何重启谷歌云机器组
- php - 修改一个wordpress/buddypress php函数
- asp.net - asp.net core 3.0 上的 502 Bad Gateway 托管在 ubuntu 18.04 TLS 和 nginx
- encoding - 使用“ffmpeg hevc_nvenc”创建的文件无法在电视上播放。(使用 nvidia 的视频编解码器 SDK 9.1)
- r - 绘制具有部分共同图例的多个段
- jwt - keycloak 错误 http://localhost:8080/auth/realms/claim-dev/protocol/openid-connect/token
- firebase - Firebase Crashlytics - 禁用版本
- ssl - 是否可以在带有 Win 10 iot 的树莓派上的 AspNetCore 3.1 服务器中设置 HTTPS 和自签名证书?
- java - iText - setSplitRows 问题
- excel - Excel - 对从另一个工作表中提取的数据进行排序