Найти - Пользователи
Полная версия: Вопрос по функции. (Вернуть функцию одного аргумента x)
Начало » Python для новичков » Вопрос по функции. (Вернуть функцию одного аргумента x)
1 2
Imarden
Добрый день!
Решаю одну задачу.
def task(a, b):
    return lambda x: x in range(a, b + 1)
print(task(1, 3)(2))
Не пойму почему (2) стоит за скобками, где указывается аргументы функции.
Искал где можно почитать про такой синтаксис - но поиск выдает, что аргументы надо передавать внутри скобок. Где можно почитать про такой синтаксис?
py.user.next
Imarden
Не пойму почему (2) стоит за скобками
Потому что эти скобки - это вызов функции, которая возвратилась.
FishHook
Для начала вам надо ответить на вопрос: что возвращает функция task, и чему будет равна переменная
a = task(1, 3) 
FishHook
x in range(a, b + 1)
А что вы таким образом хотите узнать?
J.R.
.
Imarden
FishHook
(1, 3)
task(1, 3) возварщает
<function task.<locals>.<lambda> at 0x00460150>
Т.е. получается task(1, 3) возвращает lambda x, а этой lambda x передаем x, а ‘a’ и ‘b’ уже локальные переменные.

Спасибо.
FishHook
Нет, пока не спасибо.

x in range(a, b + 1)
вот эту каку осмыслите. Зачем вам перебор значений для того, чтобы определить входит ли число в диапазон?
Если вам надо узнать, входит ли число n в диапазон от одного до ста, вы что перебираете все числа от одного до ста и сравниваете его с n? А если диапазон (1, 100000000000000000000000) вы тоже будете перебор делать?
Imarden
FishHook
Нет, пока не спасибо.
А как без перебора?
Использовать >= и <=?
py.user.next
FishHook
Зачем вам перебор значений для того
У него третий питон, а он не перебирает при поиске в range. range - это специальный тип (который во втором - xrange).

>>> range(1, 3)
range(1, 3)
>>> type(_)
<class 'range'>
>>>
FishHook
py.user.next
У него третий питон, а он не перебирает при поиске в range
А вот этого я не знал. Спасибо.
Imarden
Вопрос снят.
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