为什么这些python代码示例都调用构造函数两次?

时间:2016-08-13 12:27:33

标签: python

我是Python的新手,并且已经阅读了python科学库的一些API示例。

在一个库中,scikit-learn,代码示例总是在没有参数的情况下调用构造函数一次,然后再次调用所有参数。

这是一个例子(参见最后一行,以及最后一行之前的第三行(clf = linear _....),取自sklearn.linear_model.SGDRegressor的文档:

>>> import numpy as np
>>> from sklearn import linear_model
>>> n_samples, n_features = 10, 5
>>> np.random.seed(0)
>>> y = np.random.randn(n_samples)
>>> X = np.random.randn(n_samples, n_features)
>>> clf = linear_model.SGDRegressor()
>>> clf.fit(X, y)
... 
SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.01,
             fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',
             loss='squared_loss', n_iter=5, penalty='l2', power_t=0.25,
             random_state=None, shuffle=True, verbose=0, warm_start=False)

我想我可能误解了一些关于Python的东西,因为我不明白为什么构造函数被调用两次?这是否有原因,或者只是一种奇怪的方式来展示所有构造函数的可能参数?

1 个答案:

答案 0 :(得分:3)

您正在阅读的内容是doctest,这是一个嵌入在文档字符串中的测试。

Doctests使用前缀为>>>的行来表示可运行的示例,而其输出显示为无前缀。

测试运行器将示例的输出与文档测试中写入的输出相匹配。

我们可以通过在IPython解释器中运行示例来看到:

In [18]: import numpy as np

In [19]: np.random.seed(0)

In [20]: y = np.random.randn(n_samples)

In [21]: X = np.random.randn(n_samples, n_features)

In [22]: clf = linear_model.SGDRegressor()

In [23]: clf.fit(X, y)
Out[23]: 
SGDRegressor(alpha=0.0001, average=False, epsilon=0.1, eta0=0.01,
       fit_intercept=True, l1_ratio=0.15, learning_rate='invscaling',
       loss='squared_loss', n_iter=5, penalty='l2', power_t=0.25,
       random_state=None, shuffle=True, verbose=0, warm_start=False)

<强> TLDR ;您看到的第二个构造函数不在代码中,只是fit方法输出的表示。