ホームページ >バックエンド開発 >Python チュートリアル >Python プログラミング: 関数の戻り値に関する基本ガイドラインとベスト プラクティス
関数に関する最後の記事として、この記事では関数の戻り値と、関数を作成するための基本的なベスト プラクティス ガイドラインを紹介します。
関数の戻り値は、Python が競合他社よりも優れている点の 1 つです。他のほとんどの言語では、関数は通常オブジェクトを返すことしか許可されていませんが、Python ではタプルを返すことができます。つまり、必要なものは何でも返すことができます。この機能を使用すると、プログラマーは、他の言語で作成するよりもはるかに困難、または確実に退屈なソフトウェアを作成できます。関数から何かを返すには、return ステートメントの後に返したいものを使用する必要があることはすでに述べました。必要に応じて、関数本体に複数の return ステートメントを含めることができます。
一方、関数本体で何も返さない場合、または「裸の」return ステートメントを呼び出した場合、関数は None を返します。この動作は、必要がない場合には無害ですが、いくつかの興味深いパターンを考え出すこともでき、Python が非常に一貫性のある言語であることを確認します。
関数呼び出しの結果を強制的に収集する必要がないため、無害であると言えます。以下に、例を通して私が何を意味するかを示します。
# 返回none值 def func(): pass func() # 这个调用是没有接收的,将丢失 a = func() # 这个调用被a接收 print(a) # prints: None
関数本体全体は pass ステートメントのみで構成されていることに注意してください。公式ドキュメントに記載されているように、 pass は実行しても何も起こらないため、 no-op です。これは、ステートメントが構文的に必要であるがコードの実行を必要としない場合のプレースホルダーとして役立ちます。他の言語では、空のスコープを定義する中括弧 ({}) のペアでこれを表現することもありますが、Python ではスコープはインデントされたコードによって定義されるため、 pass のようなステートメントが必要です。
また、 func() への最初の呼び出しでは、受信されていない値 (None) が返されることにも注意してください。前に述べたように、関数呼び出しの戻り値を受け取る必要はありません。
これは素晴らしいですが、あまり面白くありません。楽しい関数を書いてみませんか?階乗関数について説明したことを思い出してください。ここに独自の実装を書いてみましょう (簡単にするために、関数は常に適切な値で正しく呼び出されると想定しているため、入力パラメーターをチェックする必要はありません):
# 阶乘函数,返回单个值 def factorial(n): if n in (0, 1): return 1 result = n for k in range(2, n): result *= k return result f5 = factorial(5) # f5 = 120
戻り値が 2 つあることに注意してください。ポイントをn が 0 または 1 の場合、1 が返されます。それ以外の場合は、必要な計算を実行して結果を返します。
ヒント: Python では、前の例で行ったように、より詳細なチェックではなく、メンバー チェックに in 演算子を使用するのが一般的です。
if n = = 0 または n == 1:
…
この関数をもっと簡潔に書いてみます:
# 返回单个值示例.2 from functools import reduce from operator import mul def factorial2(n): return reduce(mul, range(1, n + 1), 1) f5 = factorial(5) # f5 = 120
これは簡単です。この例は、Python がどのように機能するかを示しています。エレガントかつ簡潔。この実装は、reduce() や mul() を見たことがなくても読むことができます。読んだり理解できない場合は、Python の動作を理解するまで数分かけて Python ドキュメントを調べてください。ドキュメント内の関数を見つけたり、他の人が書いたコードを理解したりできることは、すべての開発者が実行できる必要があるタスクなので、挑戦してください。
ヒント: Python に付属のヘルプの表示方法を学習してください。コンソールを使用して探索するときに非常に便利な help() 関数を必ず探してください。
前述したように、他のほとんどの言語とは異なり、Python では関数から複数のオブジェクトを非常に簡単に返すことができます。この機能により無限の可能性が開かれ、他の言語では再現が難しいスタイルでコーディングできるようになります。私たちの思考は、使用するツールによって制限されます。したがって、Python が他の言語よりも自由度を高めれば、創造力が向上します。
複数の値を返すのは非常に簡単です。タプル (明示的または暗黙的) を使用するだけです。 divmod() 組み込み関数を模倣した簡単な例を見てみましょう:
# 返回多个值 def moddiv(a, b): return a // b, a % b print(moddiv(20, 7)) # prints (2, 6)
前のコードの太字部分を括弧で囲んで明示的なタプルにすることもできますが、その必要はありません。それで。上記の関数は、除算の結果と剰余の両方を返します。
関数を作成するときは、関数を適切に作成できるように、いくつかのベスト プラクティス ガイドラインに従うことが非常に役立ちます。関数をよりよく理解して適用するために、これらのガイドラインを見てみましょう。
1) 関数は 1 つのことだけを実行する必要があります
1 つのことを実行する関数は、一文で簡単に説明できます。複数のタスクを実行する関数は、1 つのタスクを実行する小さな関数にリファクタリングできます。これらの小さな関数は、通常、読みやすく、理解しやすいです。
2) 関数は小さくする必要があります。
#関数は小さいほど、テストと作成が容易になるため、1 つのことを行うことに集中できます。
3) 入力パラメーターは少ないほど良いです
多数のパラメーターを受け入れる関数は、(他の問題の中でも特に) すぐに管理できなくなります。さらに多くの入力パラメータが必要な場合は、クラス オブジェクトや他の複合データへのリファクタリングなど、必要に応じて検討してください。
4) 関数の戻り値は一貫している必要があります。
False を返すことと None を返すことは、たとえブール値のコンテキストであっても同じではなく、それらの値は同じではありません。は偽です。 False は情報があること (つまり False) を意味し、None は情報がないことを意味します。可能な限り、ロジックで何が起こっているかに関係なく、一貫した方法で戻る関数を作成してください。
5)函数不应该有副作用
换句话说,函数不应该影响调用它们的值。这可能是目前最难理解的一条实践性原则,所以这里给出一个使用列表的示例。在下面的代码中,注意如何不使用sorted()函数对numbers进行排序,该函数实际上返回的是已排序的数字副本。相反,list.sort()方法作用于numbers对象本身,这很好,因为它是一个方法(属于对象的函数,因此有权修改它):
>>> numbers = [4, 1, 7, 5] >>> sorted(numbers) # 不会排序原始的'numbers' 数字列表 [1, 4, 5, 7] >>> numbers # 验证一下 [4, 1, 7, 5] # 很好,没有改变原始数据对象 >>> numbers.sort() # 这将实质性影响原始列表 >>> numbers [1, 4, 5, 7]
所以,遵循以上这些常规的基本指导原则,将有益于你写出更好的函数,为你实现更好的服务。
到此关于Python函数的主体性知识就介绍完了——函数定义语法、输入参数定义以及相关规则、返回值实现和多返回值等,并简单总结了基于最佳实践的一些有益基本指导原则。请多加练习和体会,以便更好的理解和掌握作为Python的核心特性之一的函数。
以上がPython プログラミング: 関数の戻り値に関する基本ガイドラインとベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。