Подтвердить что ты не робот

Проверьте, что-то есть список

Каков самый простой способ проверить, есть ли что-то в списке?

Метод doSomething имеет параметры a и b. В методе он будет проходить через список a и что-то делать. Мне бы хотелось, чтобы a был list перед прохождением цикла - таким образом, избегая ошибки или неудачного случая прохождения в строке, а затем возвращая письмо из каждого цикла.

Этот вопрос, должно быть, был задан раньше - однако мои ошибки не помогли мне. Приветствия.

4b9b3361

Ответ 1

Чтобы активировать дополнительные операции, но все же обрабатывать строки как скаляры, не проверяйте наличие списка, убедитесь, что это не строка:

if not isinstance(a, basestring):
    ...

Ответ 2

Typechecking вредит общности, простоте и ремонтопригодности вашего кода. Он редко используется в хороших, идиоматических программах Python.

Есть две основные причины, по которым люди хотят проверить тип:

  • Чтобы выполнить ошибки, если вызывающий абонент предоставит неправильный тип.

    Это не стоит вашего времени. Если пользователь предоставляет несовместимый тип для выполняемой операции, ошибка будет уже повышена при ударе совместимости. Вызывает беспокойство, что это может произойти не сразу, но обычно это не занимает много времени и приводит к более надежному, простому, эффективному и удобному написанию кода.

    Часто люди настаивают на этом, надеясь, что они смогут поймать все тупое, что может сделать пользователь. Если пользователь хочет делать произвольно тупые вещи, вы ничего не можете сделать, чтобы остановить его. У Typechecking в основном есть потенциал для того, чтобы держать пользователя, который приходит с его собственными типами, которые заменяют замены для замененных или когда пользователь узнает, что ваша функция должна быть фактически полиморфной и предоставляет что-то другое, которое может принять ту же операцию.

    Если бы у меня была большая система, в которой много вещей, созданных множеством людей, должно было бы сочетаться правильно, я бы использовал систему типа zope.interface сделать тестирование, чтобы все соответствовало правильно.

  • Делать разные вещи на основе типов полученных аргументов.

    Это делает ваш код хуже, потому что ваш API несовместим. Функция или метод должны делать одно, а не принципиально разные вещи. Это заканчивается тем, что обычно не стоит поддерживать.

    Один общий сценарий - иметь аргумент, который может быть либо foo, либо списком foos. Чистое решение - просто принять список foos. Ваш код проще и согласованнее. Если это важный, общий вариант использования только для одного foo, вы можете рассмотреть возможность использования другого метода/функции удобства, который вызывает тот, который принимает список foos и ничего не теряет. Предоставление первого API не только было бы более сложным и менее последовательным, но оно ломалось бы, когда типы не были точными ожидаемыми значениями; в Python мы различаем объекты, основанные на их возможностях, а не их фактические типы. Почти всегда лучше принимать произвольную итерабельность или последовательность вместо списка и все, что работает как foo, а не требует особого foo.

Как вы можете сказать, я не думаю, что любая причина достаточно сложна для проверки типов при нормальных обстоятельствах.

Ответ 3

Мне нужен способ убедиться, что a - это список, прежде чем прокручивать через

Документ функции.

Ответ 4

Обычно он считал не хорошим стилем для проверки типа в Python, но попробуйте

if isinstance(a, list):
  ...

(Я думаю, вы также можете проверить, существует ли a.__iter__.)