не получается применить созданную функцию
код вне функции работает корректно, переводит строку в список и убирает лишние символы
my_str = '32 431 348 453 45'
my_list = list(my_str)
my_list = [i for i in my_list if i not in [' ', '4', '5']]
my_list = [int(i) for i in my_list]
print(my_list)
# [3, 2, 3, 1, 3, 8, 3]
но внутри функции не работает и не возвращает никаких ошибок
def str_to_int(r1, r2):
my_list = list(my_str)
my_list = [i for i in my_list if i not in [' ', 'r1', 'r2']]
my_list = [int(i) for i in my_list]
print(my_list)
my_str = '32 431 348 453 45'
str_to_int(4, 5)
# [3, 2, 4, 3, 1, 3, 4, 8, 4, 5, 3, 4, 5]
Ответы (2 шт):
параметры функции нужно было в кавычках передавать
str_to_int('1', '2')
а из функции наоборот убрать кавычки not in [' ', r1, r2]]
возникает другой вопрос, чтобы сделать функцию гибкой и не задавать жестко только 2 параметра как в примере, можно ли как-то в одном параметре передать сразу 2 и более значения:
вместо r1 -> '4' и r2 -> '5' как сейчас, передать сразу r1 -> '4', '5', '8'
когда пробую, пишет "str_to_int() takes 1 positional argument but 2 were given"
Ответ на ваш дополнительный вопрос: Чтобы задать произвольное количество аргументов у функции, можно объявить её вот так:
def str_to_int(*r):
...
Тогда r внутри функции будет кортежем из её аргументов. Чтобы преобразовать это в список, можно, например, сделать так:
def str_to_int(*r):
r1 = [' '] + list(r)
К тому же другие фрагменты можно переписать с использованием встроенных средств языка. Можно заменить
[int(i) for i in my_list]
на
list(map(int, my_list))
, map() применяет первый аргумент — функцию ко всем элементам второго аргумента — итерируемого контйнера.
Проверку на вхождение в цикле можно реализовать с помощью filter(), но тут уже придётся использовать лямбда-выражение