Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python関数とPythonオブジェクトメソッドのどちらがより基本的ですか?


関数はPythonで呼び出し可能なオブジェクトです。つまり、呼び出し演算子を使用して呼び出すことができます。ただし、他のオブジェクトも__call__methodを実装することで関数をエミュレートできます。

def a(): pass # a() is an example of function
print a
print type(a)
出力
C:/Users/TutorialsPoint/~.py
<function a at 0x0000000005765C18>
<type 'function'>
メソッドは特別なクラスの関数であり、バインドまたはバインド解除できます。

class C:
      def c(self): pass
print C.c   # example of unbound method
print type(C.c)
print C().c  # example of bound method
print type(C().c)
print C.c()

もちろん、バインドされていないメソッドは、引数として渡さずに呼び出すことはできません。

出力
<function a at 0xb741b5a4>
<type 'function'>
<unbound method C.c>
<type 'instancemethod'>
<bound method C.c of <__main__.C instance at 0xb71ade0c>>
<type 'instancemethod'>
Traceback (most recent call last):
  File "~.py", line 11, in <module>
    print C.c()
TypeError: unbound method c() must be called with C instance as first argument (got nothing instead)

Pythonでは、バインドされたメソッド、関数、呼び出し可能なオブジェクト(__call__メソッドを実装するオブジェクト)、またはクラスコンストラクターの間に大きな違いはありません。それらはすべて同じように見えますが、命名規則が異なるだけで、内部的には大きく異なる場合があります。

これは、バインドされたメソッドを関数として使用できることを意味します。これは、Pythonを非常に強力にする多くの小さなことの1つです

>>> d = A().a #this is a bound method of A()
>>> d() # this is a function

また、len(...)とstr(...)(strは型コンストラクター)の間に根本的な違いがありますが、もう少し深く掘り下げるまで違いに気付かないことも意味します:

>
>>>len
<built-in function len>
>>> str
<type 'str'>

  1. Python Lambda関数:はじめに

    Python Lambda関数は、単一行の無名関数です。 PythonのLambda式は、リストのフィルタリング、文字列の大文字小文字の変換、数値の乗算など、名前を必要としない1行の関数に役立ちます。 同様のタスクを複数回実行するプログラムを作成している場合、タスクの動作を変更する必要がある場合は、コードのすべてのインスタンスを更新する必要があるため、コードを繰り返すことは実用的ではありません。コードベースが大きいほど、これらの変更にかかる時間が長くなります。 そこで便利な機能があります。 Pythonには、無名関数と呼ばれる特別なタイプの関数があり、クイック関数を宣言できます。

  2. JavaScriptの関数とメソッドの違いは何ですか?

    JavaScriptでも関数とメソッドは同じですが、メソッドはオブジェクトのプロパティである関数です。 以下はJavaScriptの関数の例です- function functionname(param1, param2){    // code } 例 メソッドはオブジェクトに関連付けられた関数です。以下はJavaScriptのメソッドの例です- <html>    <head>       <script>          var e