7.6に示されている関数定義の正式な構文。Python言語リファレンスの関数定義は次のとおりです。
decorated ::= decorators (classdef | funcdef)
decorators ::= decorator+
decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE
funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite
dotted_name ::= identifier ("." identifier)*
parameter_list ::= (defparameter ",")*
( "*" identifier ["," "**" identifier]
| "**" identifier
| defparameter [","] )
defparameter ::= parameter ["=" expression]
sublist ::= parameter ("," parameter)* [","]
parameter ::= identifier | "(" sublist ")"
funcname ::= identifier
のsublist
構文に注意してくださいparameter
。これにより、たとえば次の関数定義が可能になります。
def f((a,b,c), d):
return a,b,c,d
ただし、このsublist
構文を使用したPythonコードは見たことがありません(Pythonの経験が非常に限られているためです)。これが私の質問です:
sublist
正式な関数定義構文(kwargs、*iterable
および**mapping
、など)によって提供される他の可能性と比較して、どのような状況で構文が優れているでしょうか?
実際に役立つようにするための実際の(つまり実用的な)使用例はありますか?
1つの理由は、データ自体がリストまたはタプルとして最もよく表されているが、リスト自体よりもその個々の要素を参照している場合です。たとえば、2点間の距離を計算するこの関数を見てください。
def distance_between_points((x1, y1), (x2, y2)):
return math.sqrt((x2-x1)**2 + (y2-y1)**2)
これは行うよりもはるかに良く見えます:
def distance_between_points(p1, p2):
return math.sqrt((p2[0]-p1[0])**2 + (p2[1]-p0[1])**2)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加