Найти - Пользователи
Полная версия: Вопросы от новичков.
Начало » Python для новичков » Вопросы от новичков.
1 2 3 4 None 11 12 13 14 15 16 17 18 None 28 29 30 31
krok64
citizen404
FileNotFoundError: No such file or directory:
пробовал переводить? файл не найден.
Myriam
Здравствуйте!
Изучаю Пайтон, не могу понять замыкания. Пример:
 def make_adder(x):
    def adder(n):
        return x + n #захват переменной "x" из внешнего контекста
    return adder
f = make_adder(10)
print f(5) # 15
print f(-1) # 9
Итак, ряд вопросов:
1) Замыкание сохраняет результат работы для последующего использования. Куда сохраняет и в виде чего?
2) Какое значение пойдет в качестве аргумента функции adder? То, которое в скобках при вызове функции f(5), f(-1)? Или 10?
3) Какое применение у замыканий? Какие задачи они решают?
Если не сложно вам, простым человеческим языком, так как в инете сложнообобщенные описания, которые сложно понять.
Заранее спасибо!
FishHook
Myriam
Куда сохраняет и в виде чего?
В питоне всё есть объект, даже функция, даже класс. Вероятно, значения захваченные из контекста сохраняются в виде атрибутов объекта.
Myriam
Какое значение пойдет в качестве аргумента функции adder? То, которое в скобках при вызове функции f(5), f(-1)? Или 10?

У вас две разные функции. 10 вы передаете в make_adder, а 5 и -1 в adder. adder в данном случае - результат работы make_adder. Просто отвыкните от того, что функции (а так же классы и объекты) это нечто статическое раз и навсегда заданное в коде. Функцию можно создать динамически, что ваш пример и демонстрирует: функция adder создается каждый вызов make_adder и каждый результат дает другую функцию с другим “телом”.
Myriam
Какое применение у замыканий? Какие задачи они решают?
Любые синтаксические конструкции решают одну задачу - уменьшение сложности алгоритмирования. Типичное применение замыканий в питоне - декораторы.
ispylnev
FishHook
Типичное применение замыканий в питоне - декораторы.
Подскажите,пожалуйста,а на вашей на практике декораторы вложенные друг в друга часто встречались?
Myriam
Выполняла задачу:
Написать реализацию вычисления числа Фибоначчи через рекурсию с подсчетом количества произведенных вызовов функции. Подсчет количества вызовов функции реализовать через замыкание.
FishHook
i = int(input('Введите количество сумм'))
def Fibonacci(n):
count = n
def Fib(m):
k = 0
nonlocal count
count+=1
if m > 2:
k = Fib(m - 1) + Fib(m - 2)
else:
k = 1
return k
print(count)
return Fib
F = Fibonacci(0)
print(F(i))
Если я правильно поняла замыкания, то в этом примере функции Fibonacci будет задаваться аргумент 0, который будет увеличиваться на 1 в подфункции Fib. А сама подфункция Fib получит значение i в качестве аргумента и вычислит число Фибоначчи. Вот только где тут ошибка: не производится подсчет количества вызовов функции?
scidam
Myriam
не производится подсчет количества вызовов функции?

Количество вызовов подсчитывается, только не возвращается.

 def Fibonacci(n):
    count = n
    def Fib(m):
        k = 0
        nonlocal count
        count+=1
        if m > 2:
            k = Fib(m - 1) + Fib(m - 2)
        else:
            k = 1
        Fib.count = count
        return k
    print(count)
    return Fib
F = Fibonacci(0)
F(3)
F.count # 3

Daler_68
Доброго дня.
Только начинаю знакомство с Python.
При запуске - ошибка “invalid syntax” и подсвечивает “while”. Не могу понять в чем проблема, помогите, пожалуйста, разобраться (код ниже). Что не было учтено?
Как я понимаю алгоритм программы:
- задали отчет попыток отгадывания/ задали число
- цикл будет выполняться и мы его прервем, при условии, что заданное число будет совпадать со случайно выбранным из (1, 100)
- напечатаем результаты
- выйдем из игры

 #игрок загадывает натуральное число от 1 до 100, а компьютер отгадывает
import random
c = 1 #кол-во попыток компьютера отгадать число
a = int (input('Загадай число: ') #число загаданное пользователем
while True:
    d = random.randint(1, 100) #варианты ответа от компьютера
    c += 1
    if a == d:
         print('Компьютур угадал c', c, 'попытки! Правильный ответ', d)
         break
input ('\n\nНажмите Enter, чтобы выйти')
FishHook
Daler_68
 [code python][/code]
FishHook
 a = int (input('Загадай число: ')
скобку кто будет закрывать?
Daler_68
FishHook
  a = int (input('Загадай число: ')
скобку кто будет закрывать?
Спасибо! Осознал, исправился, переписал!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB