環境: Macbook air, Jupyter-Notebook, Python2.7

Kernel K-meansを実装する際、一部この方のコードを参考にしました。
具体的には

def _get_kernel(self, X, Y=None):
    if callable(self.kernel):
        params = self.kernel_params or {}
    else:
        params = {"gamma": self.gamma,
                  "degree": self.degree,
                  "coef0": self.coef0}
    return pairwise_kernels(X, Y, metric=self.kernel,
                            filter_params=True, **params)

ここの部分です。"callable()"と" **params "の使い方がわかりません。加えて

@property
def _pairwise(self):
    return self.kernel == "precomputed"

ここもどういったものになっているのかわかりません。具体的には@propertyと"precomputed"です

pythonはおろかプログラミングも完全素人なのでstep by stepで例など込みで教えてもらえると助かります。よろしくお願いします。

以下にリンクを貼っておきます。
sklearnのリンク