Альтернативный диапазон Python

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, что он перегружает (?) символ /.

.. не является допустимым оператором Python, поэтому вы не можете его перегрузить.
taras 23.01.2019 14:31

Лучшее, что вы можете сделать, это обернуть первое число в класс-оболочку, затем класс перегрузит оператор, чтобы он принял конечное число, и чтобы он возвращал диапазон. Но не делайте этого. Просто привыкните к range, так как это то, что использует весь код.

Carcigenicate 23.01.2019 14:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
584
1

Ответы 1

Хотя 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)

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

Я бы, наверное, выбрал что-то попроще, например def irange(a, b): return range(a, b + 1). Хотя это интересно, кажется, что это выходит за рамки и делает код очень непитоновским.

deceze 23.01.2019 14:48

@deceze: Полностью согласен. Немного шепелявый (то есть без скобок).

Jan 23.01.2019 14:50

Не могли бы вы использовать |..| ? Итак, для i в 0 |..| 9: ? .. = Инфикс (лямбда x, y: диапазон (x, y +1))

JoePythonKing 23.01.2019 14:51

(Вы (всегда (добавляете их) обратно (в (в любом случае))))))))))).

deceze 23.01.2019 14:51

@deceze: я иду и беру с собой футболку :)

Jan 23.01.2019 14:52

@JoePythonKing: Нет, вы не можете, поскольку Python не разрешает это для имен переменных.

Jan 23.01.2019 14:52

for i in (2 |To| 4): - Я ненавижу эти бары.

JoePythonKing 23.01.2019 14:53

@JoePythonKing: Но, боюсь, это все, что можно сделать.

Jan 23.01.2019 14:54

Другие вопросы по теме