Найти - Пользователи
Полная версия: строка или список
Начало » Python для новичков » строка или список
1
PooH
Допустим у нас есть функция, один из аргументов которой может быть как отдельным элементом, так и последовательностью элементов.
И пусть в качестве этого аргумента передана строка. Одно из правил хорошего тона рекомендует основываться не на типе значения, а на его интерфейсе. Но вот строка то отлично поддерживает интерфейс последовательности, результат правда удручает :)
Понятно что всегда можно сделать
if isinstance(arg, StringTypes):
но как-то некрасиво. А как вы решаете эту ситуацию? Или стараетесь избегать?
Андрей Светлов
На мой взгляд isinstance — хорошее решение.
А интерфейс — это что? И чем он так сильно отличается от типа?
doza_and
isinstance решение может и хорошее - но мне всегда мешало что элементы строки - строки
a="123"
type(a)==type(a[0])
Это мешает строить итераторы по элементам произвольных рекурсивных контейнеров - приводит к зацикливанию.
Studentik
def myfunc(arg):
if type(arg) is str: return myfunc([arg])
for v in arg:
print(v)
doza_and
Я имел ввиду чтото типа
def it(obj):
if hasattr(obj,"next"):
for sub in obj:
it(sub)
else:
yield obj
итерирует листики древовидного представления объекта.
PooH
Андрей Светлов
А интерфейс — это что? И чем он так сильно отличается от типа?
Ну набор методов класса, типа ходит как утка, крякает как утка. Так сказать не по названию, а по факту.

Попробовал сейчас найти ту статью, не смог.
Александр Кошелев
PooH
Ну набор методов класса, типа ходит как утка, крякает как утка. Так сказать не по названию, а по факту.
+1

Жестких проверок на тип надо избегать. Но увы, иногда нужно обобщенный алгоритм ими чуть-чуть ограничивать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB