【Python基礎学習】—関数方法

3562 ワード

前言
他のプログラミング言語と同様に、関数(またはメソッド)は組織され、単一の、または関連する機能を実現するために繰り返し使用されるコードセグメントである.pythonの関数は非常に柔軟性があり、単一の関数に別の関数をカプセル化して定義することができ、プログラミングロジックをよりモジュール化することができます.
 
一、Pythonの関数方法定義
関数メソッド定義の簡単なルール:1.関数コードブロックはdefキーワードで始まり、関数識別子名とカッコ()が続く.2.入力パラメータおよび引数は、カッコの中央に配置する必要があります.カッコ間でパラメータを定義できます.3.関数の最初の行の文は、ドキュメント文字列を選択的に使用できます.関数の説明を保存します.4.関数の内容はコロンで始まり、インデントされます.5.return[式]は関数を終了し、呼び出し元に選択的に値を返す.式を持たないreturnはNoneを返すことに相当します.
関数demo:
def test_method():
    test_string = "test"
    return test_string

メソッドと関数の違いは、メソッドはクラスに属し、呼び出しクラスの属性と定義されたメンバーを取得することができ、selfを使用してアクセスし、メソッドの定義は以下の通りです.
Class A:
    self.test_string = "test"

    def test_method(self):
        return self.test_string

注意:メソッドがクラスメンバーを使用していない場合はself、すなわちメソッドと関数が一致する必要はありません.この場合も静的メソッド@staticmethodとなります.
 
二、関数と方法のパラメータタイプ:
1.必須パラメータ:必須パラメータは正しい順序で関数に入力する必要があります.呼び出し時の数は、宣言時と同様に、必須パラメータを関数定義のカッコ()内に定義する必要があります.2.デフォルト・パラメータ:デフォルト・パラメータは、メソッドまたは関数を呼び出し、パラメータを入力しない場合にデフォルト値を使用します.デフォルト値は(内)に書かれています.def test_などの必須パラメータの後でなければなりません.method(str, default_str = "hello") 3. 不定長パラメータ:python関数はデフォルトパラメータを定義できるほか、*argsや*kwargs:(1)関数内部の可変パラメータの名前の前に*番号があり、0個、1個または複数のパラメータを可変パラメータに入力することができ、関数内部で変数argsを直接tupleと見なせばよい.(2)双星号(****kwargsはbar(1,a=2,b=3)のようにパラメータを辞書形式でインポートし、内部kwargsパラメータは{'a':2,'b':3};(3)関数の外部に単星番号*があり、外部から入力されたパラメータに*番号があり、内部には解凍方式で関数に与えられた各パラメータである.4.匿名関数:pythonはlambdaを使用して匿名関数を作成します:(1)lambdaはただ1つの式で、関数体はdefよりずっと簡単です;(2)lambdaの本体はコードブロックではなく式である.lambda式に限られた論理をカプセル化するだけである.(3)lambda関数は独自のネーミングスペースを有し、独自のパラメータリスト以外またはグローバルネーミングスペース内のパラメータにアクセスできない.
Lambdaのdemo:
sum = lambda arg1, arg2: arg1 + arg2;

呼び出し:
sum(1,2)

#   3

 
三、方法の多重化と継承:
1.メソッドの継承:(1)クラスがベースクラスを継承している場合、このクラスのコンストラクション関数(_init_())でベースクラスの初期化メソッドを呼び出す必要があります.すなわち、追加:super()._init__()ベースクラスを初期化します.(2)このクラスはベースクラスに存在し、本クラスに存在しないメソッドを呼び出すことができ、これがサブクラスが親クラスを呼び出すメソッドであり、self呼び出しを直接使用することができる.
2.python関数にはリロード機能がありません.関数のリロードは主に2つの問題を解決するためです.
1.可変パラメータタイプ;
2.可変パラメータ個数.
さらに,基本的な設計原則は,2つの関数がパラメータタイプとパラメータ個数が異なる場合を除いて,その機能が完全に同じである場合に限られる.
場合1では、関数機能は同じですが、パラメータタイプが異なり、pythonはどのように処理しますか?答えは処理する必要はありません.pythonは任意のタイプのパラメータを受け入れることができるので、関数の機能が同じであれば、異なるパラメータタイプはpythonの中で同じコードである可能性が高く、2つの異なる関数を作る必要はありません.
場合2では、関数機能は同じですが、パラメータの個数が異なり、pythonはどのように処理しますか?答えはデフォルトのパラメータであることを知っています.欠落しているパラメータをデフォルトパラメータに設定すると、問題が解決します.関数の機能が同じだと仮定すると、欠けているパラメータは結局必要です.状況1と状況2に解決策があるため、pythonは自然に関数の再ロードを必要としません.
3.メソッドオーバーライド:クラスがselfでベースクラスに存在し、本クラスも存在するメソッドを呼び出すと、サブクラスメソッドが優先的に呼び出され、親クラスを呼び出すメソッドの代わりになります.親クラスのメソッドを呼び出すにはsuper()パラメータが必要です.
四、Python関数と方法のその他の知識:Pythonはよく内蔵関数を使う:(1)dir()関数がパラメータを持たない場合、現在の範囲内の変数、方法、定義のタイプリストを返す.パラメータが付いている場合は、パラメータのプロパティ、メソッドのリストを返します.パラメータにメソッドが含まれている場合_dir__()メソッドが呼び出されます.(2)type()関数、type()は1つの変数パラメータのみを持つと変数のタイプを返しますが、この関数は3つのパラメータを持つと新しく作成したクラスオブジェクト(動的にクラスオブジェクトを作成)を返します.
#   type()     
#     
def __init__(self, name):
    #     
    self.name = name

#    
@classmethod
def study(cls):
    pass

#     
@staticmethod
def cal_student_num():
    pass

#                  
A = type(
    'A',
    (object,),
    {
        'role': 'student',
        '__init__': __init__,
        'study': study,
        'cal_student_num': cal_student_num
    })

(3)Python関数では、グローバル変数(global変数名)を宣言することで関数外部の変数を呼び出すこともできるし、外部変数をパラメータとして関数内に転送して使用することもでき、global方式で外部変数の値を変更することができる.