Как использовать одиночный двоеточие при использовании переменной для нарезки?

Я хочу использовать переменную для хранения разрезающего выражения. Вот что я пытаюсь:

    if variable is not None:
        var = variable
    elif self.__filter is not None:
        var = self.__filter
    else:
        # this doesn't work, : alone understandably gives a syntax error
        var = ':'

var используется здесь:

return stuff[var]

Я хочу сделать это, чтобы получить лучшую структуру в моем коде. Альтернативой было бы возвращение этих выражений в зависимости от случая:

return stuff[variable]
return stuff[self.__filter]
return stuff[:]

Exception raised: ValueError: invalid literal for int() with base 10

Есть ли способ назначить двоеточие в var, чтобы его можно было использовать в выражении среза (экранирование или аналогичный материал) или мне нужно использовать var = slice (0, self.getNumberOfVariables ()) вместо?

P.S .: Я искал, прежде чем спрашивать, но не нашел ничего подобного. Извините, если я пропустил дубликат.

1
Что говорит ошибка?
добавлено автор Torxed, источник
И что вы пытаетесь «нарезать»? строка? что [: 100]? Вы не можете разбить, в середине процесса нарезки. slice == self .__ dset [...] - это фрагмент, и он принимает два параметра, self .__ dset [0: X] вы не можете сделать self: __ dset [0: X, var] , там нет параметров :)
добавлено автор Torxed, источник
Это правильно, если это Numpy, вы в порядке, потому что он содержит метод index при передаче чередующегося объекта на срез :). Игнорируйте мои вопросы и утверждения до этого: P
добавлено автор Torxed, источник
AH! Теперь я вижу, что вы пытаетесь сделать! :)
добавлено автор Torxed, источник
Я нарезаю большой набор данных, и я сейчас пишу ответ на этот вопрос. Я думал о том, чтобы не публиковать вопрос, но он может быть ценным для других. Ошибка ValueError: недействительный литерал для int() с базой 10
добавлено автор Enno Gröper, источник
Хорошо. Должен был сказать это. Это много. [slice1, slice2] не подходит для [slice1] [slice2]. Запятая не проблема.
добавлено автор Enno Gröper, источник
@Torxed: убрано много вещей, чтобы упростить пример. Не стесняйтесь дать лучший ответ.
добавлено автор Enno Gröper, источник

2 ответы

Невозможно напрямую использовать двоеточие. Это буквальная запись операции; Python обычно не позволяет использовать этот вид пунктуации напрямую, вместо этого требуется использование функции (ср. Арифметические операторы и соответствующие функции в модуле operator ).

Используемой функцией является встроенная функция slice , которая возвращает явное представление среза. Используйте slice (None) , чтобы включить все.

Пример:

>>> s = slice(None)
>>> x = range(10)
>>> x[s]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
7
добавлено
slice (None), безусловно, лучше, чем использование slice (0, len ()). Вот почему я поддержал это. Но я не чувствую, что могу принять это как ответ, потому что он не говорит, как использовать двоеточие (невозможно) или почему это невозможно.
добавлено автор Enno Gröper, источник

Выражение stuff [var] неизменно фиксирует возможности чего-то, что может быть выражено с использованием одной переменной. Вы должны думать о том, как материал интерпретируется. Сначала код анализируется. В это время фиксируется какой синтаксис используется. start: stop: step - выражение, компилятор принимает как срез. Частным случаем этого является : . Другие возможности - это скаляры, списки и объекты среза. Отдельные объекты.

Используя var в getter, я могу только установить var в список, скаляр или объект среза. При попытке назначить материал синтаксиса двоеточия для var, я просто получаю строковый литерал, и строковые литералы не обрабатываются методами getter/setter. вы просто не можете изменить синтаксис, назначив некоторое значение переменной.

1
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community