Итераторы
Функция set
использует первый аргумент в качестве итератора для создания последовательности элементов. str
изначально является итератором. Другими словами, вы можете l oop над str
и назначить переменной для каждого символа в строке за итерацию.
for whatami in "hi!":
print(whatami)
h
i
!
Если вы хотите обработать ввод одной строки в виде отдельного элемента, явно передаваемый аргумент итератора для установки (list
работает так же, кстати) с одним элементом в нем. Кортеж также является итератором. Давайте попробуем использовать это, чтобы доказать нашу теорию
t1 = ('ourstring', )
print(f"t1 is of type {type(t1)}")
s1 = set(t1)
print(s1)
t1 is of type <class 'tuple'>
{'ourstring'}
Это работает!
То, что мы сделали с ('ourstring', )
, это явное определение кортежа с одним элементом. Есть знакомый разделитель ,
, который используется для обозначения того, что «этот кортеж создается только с одним элементом». Вы можете рассмотреть два подхода.
Самый простой способ - согласовать разделитель во входных данных, таких как значения, разделенные запятыми. firstvalue,secondvalue,etc
. Недостатком этого является то, что вы быстро столкнетесь с ограничениями того, какие данные вы можете получить.
Чтобы упростить разработку, argparse
настоятельно рекомендуется использовать аргументы командной строки. Это встроенный, закаленный в бою пакет, созданный для выполнения задач такого типа. В первом примере docs даже отображается многозначное поле.