Это приложение работает нормально, без ошибок, я хочу понять только эту часть кода. Пожалуйста, посмотрите этот код:
# *args any number of non-keywords params
# *kwargs any number of keywords params
def stack(*args):
"""
Builds a stack of apps. Each parameter represents a layer in the stack. Bottom first.
:param *args: List of pairs (class, kwargs) for each app in the stack.
:returns: stack of applications.
Sample usage:
stack = app.stack(
(
session.SessionApp,
dict(
socket_klass = sb,
username = user,
password= password,
we = user,
you = "NYSE",
reset_seq_nums=True
)
),
(
MyStrategyApp,
dict(
param1 = value1,
param2 = value2
)
)
)
"""
# Generate constructor for up-most app
# [-1] take last param
klass, kwargs = args[-1]
upper_klass = (
lambda klass, kwargs: lambda lower_app: klass(lower_app=lower_app, **kwargs)
)(klass, kwargs)
def build_constructor(klass, kwargs, upper_klass):
return lambda lower_app: klass(
lower_app=lower_app, upper_klass=upper_klass, **kwargs
)
# Chain middle
for klass, kwargs in reversed(args[1:-1]):
upper_klass = build_constructor(klass, kwargs, upper_klass)
# Generate base and return
klass, kwargs = args[0]
return klass(upper_klass=upper_klass, **kwargs)
Просто я не могу понять эту часть кода. Я теряюсь с звонками и возвращениями
upper_klass = (
lambda klass, kwargs:
lambda lower_app:
klass(lower_app=lower_app,**kwargs))(klass, kwargs)
Мне нужна небольшая помощь. Заранее спасибо!





Этот:
upper_klass = (
lambda klass, kwargs:
lambda lower_app:
# this lambda should return a callable function
# meaning the function call below should return another callable function
klass(lower_app=lower_app,**kwargs)
# end lambda
# VVV this VVV calls the function returned by lower_app
)(klass, kwargs)
то же самое, что и это:
def upper_klass(klass, **kwargs):
klass(lower_app = lower_app, **kwargs)
Ах, это просто «стрелки», указывающие на вызов функции. Извините за недоразумение: D
когда вы сказали ВВВ, можете ли вы объяснить, что такое ВВВ?