首页 > 解决方案 > Left += 字符串操作

问题描述

在 Python 中,该+=操作是一个右动作,意思a+=b是等价于a=a+b.

因为,对于字符串,这个操作不是可交换的,它提出了一个问题,如果有一个类似的左操作操作符,即某个操作符(或其他黑客)说%=这样的话a%=ba=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+=bfor a=a+b)。

标签: python

解决方案


如果您询问是否有一个运算符来前置字符串(而不是像 ' 那样附加它们+=),我认为没有。写出:

b = a + b

是我知道如何添加ab.

(有趣的是,由于字符串附加是不可交换的,Larry Wall(Perl 的创建者)选择使用.作为字符串附加运算符,以便+完全可交换和数学,这a += b意味着a = a+ba = b+a。除非你明确地重载它,当然。)


推荐阅读