今天学习Python,看到这样一个例子,想问一下原因:
w = "This is the left side of..."
e = "a string with a right side."
print w + e
结果是:
This is the left side of...a string with a right side.
我想问一下为什么通过使用 +
可以把两个字符串连成一个长字符串,用的是什么方法?
天蓬老师2017-04-17 16:16:35
演算子のオーバーロード。具体的には、Python ではすべての変数がオブジェクトの形式で存在します。つまり、Object を継承します。オブジェクトにはそのようなメソッド object.__add__(self, other)
があります。式 x+y
が処理されるたびに、x.__add__(y)
が呼び出されます。さらに、交換法則については、__radd__
を呼び出す y+x
の処理に使用される y.__radd__(x)
メソッドもあります。
したがって、+
自体をオーバーロードすることもできます。たとえば、
Free
このクラスは、+
演算子の左/右パラメータになることができます。
richardzhiming 氏が述べたように、a+b
は非効率であり、これは多数の +
操作に基づいて議論されています。これは、String が不変オブジェクトであるため、実際にはオブジェクト文字列 a に文字列 b を追加するのではなく、新しいオブジェクトを作成してそこに a と b をコピーする必要があります。したがって、+
を大量に実行すると、非常に多くの一時 String オブジェクトが作成されることになります。 ''.join(str_list)
多くの String オブジェクトを作成する必要がなく、文字列の作成とコピーが一度に完了するため、さらに優れています。
文字列の連結に関する具体的な実験と詳細な議論については、以下を参照してください:
Python での効率的な文字列連結
Python の文字列連結シュートアウト
さらに、プログラム最適化の鍵は、細部をすべて最適化することではなく、ボトルネック全体を最適化することであるため、被験者は微妙な最適化テクニックをすべて覚える必要はありません。ただし、具体的な実装の詳細を理解することは、言語を習得する上で非常に意味があります。
迷茫2017-04-17 16:16:35
は実際にはいわゆる 特殊方法
を呼び出します。この場合は __add__
dir(str)
であり、それらの「特別なメソッド」である
また、文字列を + 連結する場合、計算量が高すぎるため、join
"".join(iterable)
などの