Как передать список в аргумент функции Python
как мне сделать чтобы функции список(num_my) передавался через аргумент? что я делаю не так? нужно чтобы функция отрабатывала как пример выше.
def result(num_my): num = [54,24,34,1,2,3] num_res = [] for number in num: if number in num_my: num_res.append(number) return num_res num_1 = (result([54,24,1,2,3])) num_2 = (result([34,1,3])) print(num_1) print(num_2)
Отслеживать
UserNameAK
задан 31 янв 2020 в 19:48
UserNameAK UserNameAK
47 1 1 золотой знак 1 1 серебряный знак 8 8 бронзовых знаков
Сейчас что не так? Сдвинь return на уровень влево.
31 янв 2020 в 19:53
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Вам нужно убрать один отступ в функции, чтобы стало так:
def result(num_my): num = [54,24,34,1,2,3] num_res = [] for number in num: if number in num_my: num_res.append(number) return num_res
А еще лучше, если вы используете «pythonicway»:
def result(num_my): num = [54,24,34,1,2,3] return [number for number in num if number in num_my]
Отслеживать
ответ дан 31 янв 2020 в 19:57
11.9k 2 2 золотых знака 11 11 серебряных знаков 28 28 бронзовых знаков
Огромное спасибо, все моя не внимательность(( просидел час точно думал что не так делаю, а тут такая мелочь))))) Спасибо за подсказку!)
Список Python как аргумент по умолчанию
В разделе рассмотрен один из самых опасных случаев использование списка list (изменяемых последовательностей), когда список используется, как аргумент по умолчанию для функций.
Сморим следующий пример.
# определим функцию, где корзина покупателя 'basket' # по умолчанию должна быть пустым списком покупок def add_fruit(fruit, basket=[]): # при покупке - корзина пополняется basket.append(fruit) return basket >>> b = add_fruit("banana") >>> b # ['banana'] # Внимание! Аргумент `basket` не передается. >>> c = add_fruit("apple") >>> c # ['banana', 'apple'] # Да ладно, ведь при инициализации # в аргументах функции список пустой.
Из примера видно, что функция add_fruit() вызывается дважды, при чем аргумент basket (список сделанных покупок) не передается! Конечным результатом является список из двух товаров [‘banana’, ‘apple’] , как это произошло?
Причина такого поведения заключается в том, что когда интерпретатор определяет функцию, он также создает аргумент по умолчанию. Затем он связывает этот аргумент и созданный объект (ставит ссылку на него в памяти). В примере, Python выделил пустой список и привязал его к аргументу basket (корзине покупок).
Другими словами, пустой список создается один раз и аргумент basket указывает на него в течение всего времени существования функции. Единственное исключение — это когда аргументу basket передается другой список, но это не изменит значение по умолчанию. Всякий раз, когда вызывается функция снова, без указания basket , то она будет использовать значение по умолчанию, которое было создано при определении функции.
Чтобы избежать подобного поведения, аргументы по умолчанию должны быть неизменяемыми! В данном конкретном случае, можно аргументу basket присвоить значение None и создать пустой список, если basket is None , в противном случае работать со списком, который передается в функцию.
def add_fruit(fruit, basket=None): if basket is None: basket = [] basket.append(fruit) return basket >>> b = add_fruit("banana") >>> b # ['banana'] >>> c = add_fruit("apple") >>> c # ['apple']
Теперь создается пустой список покупок всякий раз, когда аргумент basket не передается функции, что исправляет ошибку.
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Список Python как аргумент по умолчанию
- Использование списка в качестве стека
- Использование списка в качестве очереди
- Генератор списка list
- Эффективное использование генераторов списков
- Операция присваивания на месте и списки
- Поведение списков Python в разных областях видимости
- Сравнение и идентичность двух списков
- Как получить несколько последних элементов списка
Распаковка аргументов для передачи в функцию Python
Бывают ситуации, когда для функции, требующей отдельных позиционных аргументов, значения этих аргументов уже находятся в списке или кортеже, и для вызова функции должны быть распакованы.
Например, встроенная range() функция ожидает отдельные аргументы start и stop . Если они не доступны отдельно, то можно распаковать аргументы из списка list или кортежа tuple , вызвав функцию с переменной этого списка/кортежа, а впереди нее поставить символ одной звездочки * :
# обычный вызов с отдельными аргументами >>> list(range(3, 6)) # [3, 4, 5] >>> args = [3, 6] # вызов с аргументами, распакованными из списка >>> list(range(*args)) # [3, 4, 5]
Таким же образом, из словаря dict в функцию можно передать ключевые аргументы, только в этом случае, перед переменной словаря ставится два символов звездочки ** :
>>> def parrot(voltage, state='a stiff', action='voom'): . print("-- This parrot wouldn't", action, end=' ') . print("if you put", voltage, "volts through it.", end=' ') . print("E's", state, "!") . >>> d = "voltage": "four million", "state": "bleedin' demised", "action": "VOOM"> >>> parrot(**d) # -- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demis
- символом * — распаковывают последовательности в качестве элементов которых одно значение (списки, кортежи, множества)
- два символа ** — распаковывают последовательности в качестве элементов которых имеется ключ и значение (словари)
Примеры распаковки списков и словарей с аргументами для функции:
date_inf = 'year': "2020", 'month': "12", 'day': "06"> f_name = " - - .txt".format(**date_inf) print(f_name) # 2020-12-06.txt fruits = ['lemon', 'orange', 'banana', 'tomato'] print(*fruits) # lemon orange banana tomato
Распаковку аргументов можно использовать несколько раз в функции:
date_info = 'year': "2020", 'month': "01", 'day': "01"> track_info = 'artist': "Beethoven", 'title': 'Symphony No 5'> filename = " - - - - .txt".format(**date_info, **track_info) print(filename) # 2020-01-01-Beethoven-Symphony No 5.txt
fruits = ['lemon', 'orange', 'banana', 'tomato'] first, second, *orher = fruits print(orher) # ['banana', 'tomato'] first, *orher = fruits print(orher) # ['orange', 'banana', 'tomato'] first, *middle, last = fruits print(middle) # ['orange', 'banana']
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Функции это объекты
- Функции могут иметь атрибуты
- Функции могут храниться в структурах данных
- Функции могут быть вложенными
- Передача функции в качестве аргумента другой функции
- Область видимости переменных функции
- Операторы global и nonlocal
- Параметры (аргументы) функции
- Ключевые аргументы в определении функции Python
- Значение аргумента по умолчанию в функциях Python
- Варианты передачи аргументов в функцию Python
- Переменные аргументов *args и **kwargs в функции Python
- Распаковка аргументов для передачи в функцию Python
- Как оцениваются аргументы при вызове функции?
- Строгие правила передачи аргументов в функцию Python
- Инструкция return
- Анонимные функции (lambda-выражения)
- Строки документации в функциях Python
- Рекурсия
- Замыкания в функциях Python
- Перегрузка функций
Как передать список в качестве аргумента функции?
Занимаюсь реализацией решения ОДУ.
В функцию необходимо передать 4 аргумента , два из них — массивы (списки в моём случае, допустимо же? )
Как это сделать? Видимо, неверно поняла фишку с использованием символа * при передаче в функцию списка )
(def explicitEulerMethod(n, h, *x, *y) не прокатило )
- Вопрос задан более трёх лет назад
- 19860 просмотров
Комментировать
Решения вопроса 1
Александр @fireSparrow
Звёздочка в данном случае — это распаковка. Её нужно использовать в противоположной ситуации — когда нужно передать не сам список, а его элементы в качестве отдельных аргументов.
Чтобы передать сам список, никаких дополнительных трюков не нужно. Если вы просто напишете его имя, это сам список и будет.
Ответ написан более трёх лет назад
Нравится 4 2 комментария
dr sbtn @dawasaturday Автор вопроса
Theodore_Codeman @Theodore_Codeman
Снимаю перед вами шляпу за данную помощь)
Ответы на вопрос 1

Владимир Куц @fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Ну так и передавайте:
def explicitEulerMethod(n, h, x, y)
где x и y — массивы
Ответ написан более трёх лет назад
Нравится 2 2 комментария
dr sbtn @dawasaturday Автор вопроса
То бишь только потом при их использовании с индексами и размерностями работать?

Владимир Куц @fox_12 Куратор тега Python
Дарья Субботина: В смысле «только потом»? Опишите более внятно какие затруднения вы видите. Вы передаете в функцию 4 аргумента. 2 — переменные и 2 массива x и y. Первый — размерностью len(x), второй — len(y). Пробежаться по всем индексам первого массива — for element in x: . второго — for element in y: Исходя из этих знаний выполняете в функции действия нам массивами.