我是Python的初学者,但在java中,您通常会让这些导入显示对象的确切位置。例如,下面的import语句告诉我SpringBootApplication对象直接来自Spring Boot类,我可以深入到类中读取它的所有方法代码:
import org.springframework.boot.autoconfigure.SpringBootApplication;
现在我在python中查看zipline库:
https://github.com/quantopian/zipline
这是来自他们的github repo主页上的示例代码:
from zipline.api import (
history,
order_target,
record,
symbol,
)
所以我看一下zipline文件夹,看看是否有导入方法history, order_target, record, symbol
的api文件,因为我想阅读驱动这些方法的底层代码。
代码并没有告诉我多少(https://github.com/quantopian/zipline/blob/master/zipline/api.py):
from .finance.asset_restrictions import (
Restriction,
StaticRestrictions,
HistoricalRestrictions,
RESTRICTION_STATES,
)
from .finance import commission, execution, slippage, cancel_policy
from .finance.cancel_policy import (
NeverCancel,
EODCancel
)
from .finance.slippage import (
FixedSlippage,
VolumeShareSlippage,
)
from .utils import math_utils, events
from .utils.events import (
date_rules,
time_rules
)
__all__ = [
'EODCancel',
'FixedSlippage',
'NeverCancel',
'VolumeShareSlippage',
'Restriction',
'StaticRestrictions',
'HistoricalRestrictions',
'RESTRICTION_STATES',
'cancel_policy',
'commission',
'date_rules',
'events',
'execution',
'math_utils',
'slippage',
'time_rules'
]
但是,有一个名为api.pyi
的文件似乎包含一些关于我感兴趣的方法(https://github.com/quantopian/zipline/blob/master/zipline/api.pyi)的文字。例如,使用方法record
,它说:
def record(*args, **kwargs):
"""Track and record values each day.
Parameters
----------
**kwargs
The names and values to record.
Notes
-----
These values will appear in the performance packets and the performance
dataframe passed to ``analyze`` and returned from
:func:`~zipline.run_algorithm`.
"""
我认为代码可能位于zipline.run_algorithm
内,并且还查看了zipline/run_algorithm
文件,但无法在回购邮件中找到它。
在python中为这些方法保存的代码在哪里?我只是想阅读代码以更好地理解它是如何工作的。
答案 0 :(得分:3)
zipline
正在使用一种有点复杂且不寻常的导入结构。线索在api.py
:
# Note that part of the API is implemented in TradingAlgorithm as
# methods (e.g. order). These are added to this namespace via the
# decorator ``api_method`` inside of algorithm.py.
如果查看algorithm.py
,您可以看到这些record
,其余的这些方法都是使用@api_method
装饰器定义的。 (如果你查看zipline/utils/api_support.py
,你可以看到装饰器本身的代码,它使用zipline.api
将这些方法添加到setattr
。)