同じハックを使用できます:
#! /usr/bin/python3.2
class Postfix:
def __init__(self, f):
self.f = f
def __ror__(self, other):
return self.f(other)
x = Postfix(lambda x: x * 2)
a = 'Hello'
print(a |x)
a = 23
print(a |x |x)
それにもかかわらず、混乱を招くだけなので、私はその使用を主張しません。
編集: 特に、演算子は単項であるため、関数を呼び出すだけで、コードを読んだ人は誰でもその機能をすぐに理解できます。
def choose(t): pass
#magic happens here and returns nCr(t[0], t[1])
nCr = Postfix(choose)
#This is unintuitive:
print((3, 4) |nCr)
nCr = choose
#But this is obvious:
print(nCr((3, 4)))
Edit2: PEP-8 に信心深い人々へ: この「オペレーター」ハックは、PEP-8 に準拠していないことがすべてなので、回答の編集はやめてください。アイデアは|op
、基本的に後置演算子の 1 つのエンティティのように読み取られるということです。
編集 3: このハックが役立つケースについてよく考えてみると、次のような使い方が中途半端に賢明かもしれません。(この機能が API で十分に文書化されている場合のみ):
#! /usr/bin/python3.2
class Language:
def __init__(self, d):
self.d = d
def __ror__(self, string):
try: return self.d[string]
except: return string
enUS = Language({})
esMX = Language({'yes': 'sí', 'cancel': 'cancelar'})
deDE = Language({'yes': 'ja', 'no': 'nein', 'cancel': 'abbrechen'})
print('yes' |enUS)
print('no' |deDE)
print('cancel' |esMX)