Альтернативный диапазон Python - PullRequest
0 голосов
/ 23 января 2019
for i in range(10):

for i in 0 .. 9:

Как мне «перегрузить»? '..'.

Я считаю объект range() не лаконичным и не легко читаемым. Обозначение / синтаксис на языке Паскаль (диапазон (включительно .. включительно) http://rigaux.org/language-study/syntax-across-languages-per-language/Pascal.html) намного проще для чтения.

Я увидел в модуле pathlib https://docs.python.org/3/library/pathlib.html, что он перегружает (?) Символ /.

1 Ответ

0 голосов
/ 23 января 2019

Хотя Python не имеет оператора .., вы можете определить инфиксный оператор следующим образом:

class Infix:
    def __init__(self, function):
        self.function = function
    def __ror__(self, other):
        return Infix(lambda x, self=self, other=other: self.function(other, x))
    def __or__(self, other):
        return self.function(other)
    def __rlshift__(self, other):
        return Infix(lambda x, self=self, other=other: self.function(other, x))
    def __rshift__(self, other):
        return self.function(other)
    def __call__(self, value1, value2):
        return self.function(value1, value2)

Теперь выберите осмысленное имя, например until, и все готово:

until = Infix(lambda x,y: range(x,y +1))
print(2 |until| 4)
# [2, 3, 4]

Или

for i in (2 |until| 4):
    print(i)

К сожалению, не моя идея, см. этот блестящий пост для оригинальной идеи .

...