Объясните что это (питон)

Leeviafun

Новичок
Пользователь
Июл 2, 2020
3
0
1
Собсна знакомый программист посоветовал пройти курс от computer science, а потом начать делать всяких телеграмм ботов, так вот если 1 видос я прошел+- все разобрал и понял большую часть, тогда как 2 видос тяжело понимаю. И вот жду помощи что делает этот код, желательно поподробнее.
def unique(iterable, seen=None):
acc = []
for item in iterable:
if item not in seen:
seen.add(item)
acc.append(item)
return acc
xs = [1, 1, 2, 3]
unique(xs)
[1, 2, 3]
unique(xs)
[1, 2, 3]
p.s это мой 1 язык, я совсем мало понимаю, всего пару дней изучаю
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Код вставляйте через кнопку ... -> код -> python.
Код принимает iterable (например, список) и возвращает список с уникальными (не повторяющимися элементами).
Данный код работает не корректно.
Вот исправленный вариант:
Python:
# функция, принимает iterable
def unique(iterable):
    acc = []  # список для результата
    for item in iterable:  # цикл по iterable
        if item not in acc:  # если элемент не списке acc
            acc.append(item)  # добавляет его в список
    return acc # возвращает список с уникальными элементами
xs = [1, 1, 2, 3] # список, который подается на вход (iterable)
# два вызова функции и вывода в консоль их результатов
print(unique(xs))
print(unique(xs))
 
  • Мне нравится
Реакции: Leeviafun

Leeviafun

Новичок
Пользователь
Июл 2, 2020
3
0
1
Код вставляйте через кнопку ... -> код -> python.
Код принимает iterable (например, список) и возвращает список с уникальными (не повторяющимися элементами).
Данный код работает не корректно.
Вот исправленный вариант:
Python:
# функция, принимает iterable
def unique(iterable):
    acc = []  # список для результата
    for item in iterable:  # цикл по iterable
        if item not in acc:  # если элемент не списке acc
            acc.append(item)  # добавляет его в список
    return acc # возвращает список с уникальными элементами
xs = [1, 1, 2, 3] # список, который подается на вход (iterable)
# два вызова функции и вывода в консоль их результатов
print(unique(xs))
print(unique(xs))
спасибо, хотя бы понял примерно, а то приуныл
 

Leeviafun

Новичок
Пользователь
Июл 2, 2020
3
0
1
Код вставляйте через кнопку ... -> код -> python.
Код принимает iterable (например, список) и возвращает список с уникальными (не повторяющимися элементами).
Данный код работает не корректно.
Вот исправленный вариант:
Python:
# функция, принимает iterable
def unique(iterable):
    acc = []  # список для результата
    for item in iterable:  # цикл по iterable
        if item not in acc:  # если элемент не списке acc
            acc.append(item)  # добавляет его в список
    return acc # возвращает список с уникальными элементами
xs = [1, 1, 2, 3] # список, который подается на вход (iterable)
# два вызова функции и вывода в консоль их результатов
print(unique(xs))
print(unique(xs))
не могли бы вы так же объяснить, только с этим кодом
Python:
def make_min(*, lo, hi):
    def inner(first, *args):
        res = hi
        for arg in (first, ) + args:
            if arg < res and lo < arg < hi:
                res = arg
        return max(res, lo)
    return inner

bounded_min = make_min(lo=0, hi=255)
bounded_min(-5, 12, 13)
0
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
не могли бы вы так же объяснить, только с этим кодом
Тут в переменную присваивается значение внутренней функции с установленными границами. После присвоения переменная bounded_min будет равна такой функции:
Python:
def inner(first, *args):       
        res = 255
        for arg in (first, ) + args:
            if arg < res and 0 < arg < 255:
                res = arg
        return max(res, 0)
Вот комментарии к вашему коду:
Python:
# функция, которая возвращает другую функцию
# со значениями (границами), заданными в аргументах
def make_min(*, lo, hi):
    # внутренняя функция
    # принимает несколько аргументов
    # возвращает минимальный, но в пределах заданных границ
    def inner(first, *args):
        # в переменную res присваиваем значение верхней границы
        # потом там будет минимальное значение
        res = hi
        # цикл по списку (кортежу) аргументов
        for arg in (first, ) + args:
            # если аргумент меньше минимального на данный момент
            # и находится в границах
            # -5 не пройдет это условие
            if arg < res and lo < arg < hi:
                # присваиваем его значение минимальному (переменной res)
                res = arg
        # возвращаем наибольшее значение из нижней границы
        # и минимального аргумента
        return max(res, lo)  # 12, так как 12 > 0, а -5 сюда не попадет
    # функция make_min возвращает функцию
    return inner


# присваиваем в переменную bounded_min
# функцию inner с определенными границами (lo=0, hi=255)
bounded_min = make_min(lo=0, hi=255)
# вызываем функцию inner
x = bounded_min(-5, 12, 13)
# выводим результат в консоль
print(x)  # выведет 12, так как -5 находится за границами
 

Форум IT Специалистов