**セクション7 **機能
みなさん、こんにちは。前回のクラスでプログラムフロー制御ステートメントを学習してから、ポイントのカテゴリからラインのフィールド(または無数のライン)まで、問題解決能力が1桁向上したことに気づきましたか。実際、これらのスキルがあれば、完全なPythonプログラムを作成できます。
ただし、詳しく見てみましょう。既存の文法ツール(定数、変数、演算子、式、フロー制御ステートメントなど)に依存しており、基本的には一部の線形ベースのソリューションしか提供できません。言い換えれば、コードを実装するために使用できる文法ツールは、フロー制御ステートメントによって制御できるカテゴリにすぎず、コードによって処理されるオブジェクトの最大粒度は依然として「可変」です。コードの行数に関係なく、上から下への追跡または判断、分岐、ループ、または計算プロセスで処理する必要のあるすべての変数を処理して、処理するトランザクションロジックを完了することしかできません。したがって、すべてのコード処理手順は、依然として1次元の線形空間に制限されています。
**私たちのツールが1つの次元の制限を打ち破ることができない場合、認識は新しい次元に上昇せず、新しい世界を見ることができません。 ****
実際のアプリケーション開発では、複雑なアプリケーション要件に直面することがよくありますが、Pythonにはより効率的な言語ツールがありますか?答えは:はい!これが、今日学習する機能です。
簡単に言えば、関数は名前付きのコードブロックです。
見た目は新しいものではありませんが、コードブロックに名前が追加されます。はい、その意味は間違いなくその名前がどれほど美しいかではありませんが、理由は次のとおりです。
**1、 このようなコードブロックには、実行可能なコードを含めることができます。 ****
**2、 繰り返し無制限に使用できます。 ****
これが実際に何を意味するのか疑問に思ったことはありませんか?
**これは、機能の導入により、アプリケーションが新しい次元に拡張されたことを意味します。これまでに作成した便利なコードは、どれほど大きくても強力でも(通常は制限されていますが)、関数にカプセル化できます。この関数は、新しいアプリケーションプロセスを構成します。一部、繰り返し呼び出すことができます。前の変数と同様に、新しいオブジェクトとして機能し、プログラムコードの新しい部分を構成します。これにより、単一のポイント(定数または変数)からコードによって処理されるオブジェクトの最大の粒度が可能になります。顔になります(機能コードブロック)。コードの効率と再利用性は、すぐに質的な飛躍を遂げます。 ****
**したがって、関数の概念を過小評価しないでください。 ****
PS:これにはプログラマーが持っていなければならないコードの再利用のアイデアが含まれています。表面的には、プログラマーの労力を軽減し、プログラミング効率を向上させるだけです。本質的には、アプリケーションの問題解決能力を、1次元の線形処理フローから2次元またはそれ以上の次元まで、新しい次元に拡張します。たぶん上の段落では、その意味と思考の本質を本当に理解する前に、実際にコードの時間を書く必要がありますが、それは問題ではなく、今あなたの注意を引くのに十分です。
1、 関数定義
(1)defキーワードを使用します。
(2)キーワードの後に、関数名(識別子)を作成します。
(3)関数名の後には、いくつかの変数名(パラメーター)を含めることができる括弧のペアがあります。
(4)最後に、この行をコロンで終了します。
(5)実際には機能は終了しません。関数の実際の本体は遅れており、新しい行を開始し、関数のコードブロックをインデントする必要があります。コードブロックが実現できる関数によって、関数の意味が決まります。
def say_hello():
print('hello world')
say_hello()#関数を呼び出す
say_hello()#関数を再度呼び出す
**注:**同じ関数を2回呼び出すことができるため、コードを再度書き直す必要がないことに注意してください。
PS:他の言語の経験を持つ学生は、プロセス制御ステートメントの定義と同様に、Pythonの関数定義メソッドがC / C ++またはJavaおよびC#の関数(またはメソッド)よりもはるかに簡潔であることを発見したかもしれません。
2、 機能パラメータ
機能の概念は、複雑なソフトウェアの中でおそらく最も重要な部分であるため(使用するプログラミング言語に関係なく)、このセクションでは機能のさまざまな側面について説明します。一種の識別子としての関数の命名については、上で説明しました。ここでは、関数パラメーターの問題に焦点を当てます。
関数名の後の括弧内では、関数は変数名を介してパラメーターを取得できます。このパラメーターの値は、関数の呼び出し元によって割り当てられます。これは、呼び出し元と呼び出された人の間で変数値を渡すためのチャネルを形成します。呼び出しの概念については、以下で簡単に説明します。したがって、関数はこれらの値を使用して必要なことを実行できます。複数のパラメーターはコンマで区切られます。
ここに用語があることに注意してください:
(1)関数を定義するときに指定されるパラメーター名は、「正式パラメーター」パラメーターと呼ばれます)、
(2)関数を呼び出すときは、「実際のパラメーター」(引数)と呼ばれる貴重なパラメーターを関数に提供します。
PS:プロのプログラマーになりたいのなら、これらの一般的に使用される用語を曖昧にするのが最善です。
def print_num(a, b):
if a > b:
print(a、 'は大きい数です!')
elif a == b:
print(a、 '等しい'、b)
else:
print(b、 '小さい数です!')
print_num(3, 4)
x = 5
y = 6
print_num(x, y)
**説明:**上記の例では、print_numという名前の関数が最初に定義され、この関数が2回呼び出されます。関数print_numには2つの正式なパラメーターaとbがあることに注意してください。この関数を呼び出すと、(値の)実際のパラメーターが正式なパラメーターに順番に渡されます。つまり、2とxがaに渡され、4とyがそれに渡されます。この点を強調することが重要です。以下では、「キーパラメータ」と呼ばれる別の特殊なケースのパラメータについて説明します。これは、順序ではなく名前で値を渡すためのものです。次の点に注意してください。
3、 関数のローカル変数
関数で定義する変数はローカル変数であることに注意してください。つまり、関数定義の範囲内でのみ有効になります。つまり、関数内の変数のスコープは、この関数のコードブロックです。
x = 10
def func_3(x):
print( 'x is'、x)#最初の印刷
x = 5
print( '関数内の変数xの値:'、x)#2番目の印刷
func_3(x)
print( '関数外の変数xの値:'、x)#3番目の印刷
**説明:**この例では、xという名前の2つの変数が関数の外側と内側の両方で作成されますが、本質的に同じ変数ではないことに注意してください。関数内のカスタム変数は関数のローカル変数であり、関数内でのみ有効です。ただし、それでも、プログラマーが混乱しやすく、プログラムが間違っているか、説明できないバグが発生するため、この命名規則を回避する必要があります。上記のケースは、ローカル変数が外部変数に影響を与えないことを示すためにのみ設定されています。
4、 関数のグローバルステートメント
ローカル変数に加えて、グローバル変数と呼ばれるものもあります。これは、スコープを制限しない最上位の変数です。
では、関数内で、グローバル変数に値を割り当てたい場合はどうでしょうか。これを実現するには、グローバルステートメントを使用する必要があります。グローバルステートメントを使用せずに関数の外部で定義された変数に値を割り当てることは不可能であるためです。
x = 10#これはグローバル変数です
def func_4():
グローバルx#ここで、xはグローバル変数として宣言されています
print( 'x値は:'、x)
x = 5
print( '変更後のグローバル変数の値は次のとおりです:'、x)
func_4()
print( 'xの値を再度表示します:'、x)
説明:
ここに3つの印刷結果があることに注意してください:
(1)最初の出力、出力はグローバル変数x(10)の値です。
(2)2番目の印刷では、出力は変更されたx値(5)です。
(3)3回目はprintステートメントですが、出力はx(5)の現在の値であり、関数によって変更されています。
5、 関数のデフォルトパラメータ
関数のパラメーターは本質的に変数です。関数が呼び出されるときに、パラメーターがある場合は、パラメーターを割り当てる必要があります。つまり、正式なパラメーターは実際のパラメーターを介して割り当てられます。しかし、呼び出されたときにパラメーターに値が割り当てられていない場合はどうなりますか? Pythonの変数定義ルールに従って、プログラムは割り当てられていない変数を使用するとエラーを報告します。このため、一部のパラメーターでは、ユーザーが実際のパラメーターを呼び出したときにエラーを回避するために、デフォルト値を設定できます。
****関数のデフォルトのパラメーターは、パラメーターリストの最後にのみ配置できることに注意してください。この順序は必須です。
**実際、関数のパラメーターにデフォルト値を設定することは、パラメーターに初期値を割り当てることです。ただし、可変オブジェクトをデフォルトのパラメータに割り当てないように注意してください。 ****
6、 関数のキーワードパラメータ
関数に複数のパラメーターがあり、呼び出し時にそれらの一部にのみ値を割り当てたい場合は、名前を付けることでこれらのパラメーターに値を割り当てることができます。これがキーワード引数です。
キーパラメータは、(長い間使用してきたように)場所ではなく名前(キーワード)を使用して、関数のパラメータを指定します。これには2つの大きな利点があります。
まず、パラメータの順序を考慮する必要がなくなり、関数の使用が簡単になります。
次に、他のパラメータにデフォルトのパラメータ値がある場合、割り当てたいパラメータにのみ値を割り当てることができます。
def func_4(a, b=5, c=10):
print('a is', a, 'and b is', b, 'and c is', c)
func_4(3,7)#call one
func_4(25、c = 24)#2つ呼び出す
func_4(c = 50、a = 100)#3つ呼び出す、
説明:
(1)関数func_4には3つの正式なパラメーターがありますが、bとcにはデフォルト値(初期値とも呼ばれます)が割り当てられています。
(2)1つを呼び出す:デフォルトでは、aとbに順番に値を割り当てます。
(3)2を呼び出します。最初の値は順番にaに割り当てられ、2番目の値は指定されたキーワードによってcに割り当てられます。
(4)3番目の呼び出し:順序に関係なく、指定されたキーパラメーターにのみ値を割り当てます。
****このような関数をデフォルトのパラメーターで呼び出す場合、キーパラメーターの割り当てが指定されているかどうかに関係なく、関数のデフォルト以外のパラメーターは無視できません。値を割り当てる必要があり、省略できません。
7、 関数のreturnステートメント
(1)関数のreturnステートメントは、割り込み関数である関数から戻るために使用されます。
(2)returnステートメントを使用する場合、関数を中断しているときに関数から値を返すこともできます。この戻り値は、関数を呼び出したオブジェクトが受け取ることができます。これは、私たちが頻繁に使用する関数の重要な機能でもあります。
def func_5(x, y):
if x > y:
return x
elif x == y:
return 'これらの2つの数値は等しいです! '
else:
return y
print(func_5(3, 3))
**説明:**関数には条件付き分岐ステートメントが含まれています。いずれかの条件が満たされると、関数は終了し、対応する値を返します。
**8、 関数DocString **
関数ドキュメント文字列(docstring)は、関数の先頭で関数を説明するために使用されるドキュメント文字列です。つまり、これは関数のヘルプドキュメントであり、help()組み込み関数を使用してドキュメントを表示できます。さらに驚くべきことは、関数の__doc__属性を使用してドキュメントのコンテンツを取得することもできることです。一部の高度なコードエディタでは、関数を呼び出すときに、マウスを関数名に移動します。関数の説明テキストを表示するのに役立ち、コードの記述に非常に便利です。したがって、可能な限り関数docstringの使用に慣れる必要があります。通常、説明文書には次の情報が含まれている必要があります。
1、 機能の基本情報
2、 機能の機能説明
3、 各正式なパラメータのタイプと目的
def func_6(x, y):
''' xとyの最大数を出力します。
xとyは両方とも整数である必要があります '' '
x = int(x)
y = int(y)
if x > y:
print(x、 'は大きい数です!')
else:
print(y、 'は大きい数です!')
func_6(3、5)#関数を呼び出す
print(func_6 .__ doc __)#関数の説明文書を表示(印刷)
手順:
1、 関数の最初の行に配置されます。
2、 複数行のテキスト文字列を構成するには、「 ''」などの三重引用符を使用します。
3、 機能ドキュメントの1行目は通常、機能の概要であり、2行目は空で、3行目は詳細な説明です。この協定を守ってください。
表示方法
1、 インタラクティブモードでは、help()を使用して関数のヘルプドキュメントを表示できます。
2、 __doc__属性を使用して表示すると、関数の説明ドキュメントを取得できます。
概要
このレッスンでは、機能について学びました。関数定義の文法規則を学んだだけでなく、さらに重要なことに、関数の記述と使用の方法を試しました。Pythonのすべての関数タイプを横断するわけではありませんでしたが、プログラミングの知識をさらに飛躍させるのに十分でした。
Recommended Posts