Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 10, 2015 07:17:33

Imarden
Зарегистрирован: 2015-02-20
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по функции. (Вернуть функцию одного аргумента x)

Добрый день!
Решаю одну задачу.

def task(a, b):
    return lambda x: x in range(a, b + 1)
print(task(1, 3)(2))
Не пойму почему (2) стоит за скобками, где указывается аргументы функции.
Искал где можно почитать про такой синтаксис - но поиск выдает, что аргументы надо передавать внутри скобок. Где можно почитать про такой синтаксис?

Офлайн

#2 Ноя. 10, 2015 07:36:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Вопрос по функции. (Вернуть функцию одного аргумента x)

Imarden
Не пойму почему (2) стоит за скобками
Потому что эти скобки - это вызов функции, которая возвратилась.



Офлайн

#3 Ноя. 10, 2015 07:36:57

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос по функции. (Вернуть функцию одного аргумента x)

Для начала вам надо ответить на вопрос: что возвращает функция task, и чему будет равна переменная

a = task(1, 3) 



Офлайн

#4 Ноя. 10, 2015 07:37:42

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос по функции. (Вернуть функцию одного аргумента x)

x in range(a, b + 1)
А что вы таким образом хотите узнать?



Офлайн

#5 Ноя. 10, 2015 07:39:02

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

Вопрос по функции. (Вернуть функцию одного аргумента x)

.

Отредактировано J.R. (Янв. 27, 2016 08:31:12)

Офлайн

#6 Ноя. 10, 2015 07:45:18

Imarden
Зарегистрирован: 2015-02-20
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по функции. (Вернуть функцию одного аргумента x)

FishHook
(1, 3)
task(1, 3) возварщает
<function task.<locals>.<lambda> at 0x00460150>
Т.е. получается task(1, 3) возвращает lambda x, а этой lambda x передаем x, а ‘a’ и ‘b’ уже локальные переменные.

Спасибо.

Отредактировано Imarden (Ноя. 10, 2015 07:53:38)

Офлайн

#7 Ноя. 10, 2015 08:29:56

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос по функции. (Вернуть функцию одного аргумента x)

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

x in range(a, b + 1)
вот эту каку осмыслите. Зачем вам перебор значений для того, чтобы определить входит ли число в диапазон?
Если вам надо узнать, входит ли число n в диапазон от одного до ста, вы что перебираете все числа от одного до ста и сравниваете его с n? А если диапазон (1, 100000000000000000000000) вы тоже будете перебор делать?



Офлайн

#8 Ноя. 10, 2015 08:38:59

Imarden
Зарегистрирован: 2015-02-20
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по функции. (Вернуть функцию одного аргумента x)

FishHook
Нет, пока не спасибо.
А как без перебора?
Использовать >= и <=?

Офлайн

#9 Ноя. 10, 2015 09:06:25

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Вопрос по функции. (Вернуть функцию одного аргумента x)

FishHook
Зачем вам перебор значений для того
У него третий питон, а он не перебирает при поиске в range. range - это специальный тип (который во втором - xrange).

>>> range(1, 3)
range(1, 3)
>>> type(_)
<class 'range'>
>>>



Отредактировано py.user.next (Ноя. 10, 2015 09:07:32)

Офлайн

#10 Ноя. 10, 2015 09:30:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос по функции. (Вернуть функцию одного аргумента x)

py.user.next
У него третий питон, а он не перебирает при поиске в range
А вот этого я не знал. Спасибо.
Imarden
Вопрос снят.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version