f(x)は何でしょうか。
文法というか言語仕様について説明します。
fは、関数tangent_lineの引数として渡ってきたオブジェクトです。引数には呼び出し可能オブジェクト(callable object)を渡すことができます。
そして、f(x)は、fというオブジェクトてxを引数として呼ぶ(call)という意味です。
引数として渡ってきたfは、それが呼び出し可能(callable)であるならばその関数内で関数とかクラス名のように使うことができる、というのがPythonの文法というか言語仕様です。
fというオブジェクトをxを引数として呼んだ場合、Python処理系はfが呼び出し可能(callable)でなければ、以下のようなエラーを出します。
python
1>>> f = 5
2>>> f(10)
3Traceback (most recent call last):
4 File "<stdin>", line 1, in <module>
5TypeError: 'int' object is not callable
6>>> f = 'abc'
7>>> f(10)
8Traceback (most recent call last):
9 File "<stdin>", line 1, in <module>
10TypeError: 'str' object is not callable
Explanation
1fがcallableであるというのは、fというオブジェクトが__call__という属性を持つということです。
2
3関数は__call__という属性を持ちます。以下をご覧ください。
python
1>>> def f(x):
2... print(x)
3...
4>>> print(f.__call__)
5<method-wrapper '__call__' of function object at 0x000001A5E0B155E0>
Explanation
1クラスも__call__という属性を持ちます。以下をご覧ください。
python
1>>> class C:
2... def __init__(self,x):
3... self.x = x
4...
5>>> print(C.__call__)
6<method-wrapper '__call__' of type object at 0x000001A5E2545A50>
Explanation
1__call__がどのように使われるかは、(英語ですが)いかに書かれています。
公式ドキュメント3.3.6. 呼び出し可能オブジェクトをエミュレートする