не получается применить созданную функцию

код вне функции работает корректно, переводит строку в список и убирает лишние символы

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 шт):

Автор решения: Jimmy

параметры функции нужно было в кавычках передавать

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"

→ Ссылка
Автор решения: artaxerx

Ответ на ваш дополнительный вопрос: Чтобы задать произвольное количество аргументов у функции, можно объявить её вот так:

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(), но тут уже придётся использовать лямбда-выражение

→ Ссылка