4

string.replace の Python ドキュメント ( http://docs.python.org/library/string.html )に従います。

string.replace(str, old, new[, maxreplace])

部分文字列 old をすべて new に置き換えた文字列 str のコピーを返します。オプションの引数 maxreplace が指定された場合、最初の maxreplace 出現箇所が置き換えられます。

指定された形式を使用すると、次のエラーが生成されます。

>>> a = 'grateful'
>>> a.replace(a,'t','c')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: an integer is required

「str」を繰り返す必要があるのは奇妙に思えます。エラーから、3 番目の引数が maxreplace に使用されていると推測しました。

形式:

string.replace(古い、新しい)

期待どおりに機能しているようです。

私は何かを誤解しているのではないかと思っています.Pythonのドキュメントに記載されているフォームは、実際には何らかの形で正しいです.

4

5 に答える 5

7

stringここでの混乱(およびほとんどの回答の混乱)は、モジュールとstr組み込みクラスの違いだと思います。機能的に多くの重複があるとしても、それらは完全に別物です。

string.replace(s, old, new)メソッドではなくフリー関数です。モジュールのインスタンスにすることはできないs.replace(old, new)ため、として呼び出す方法はありません。sstring

str.replace(self, old, new)方法です。他のメソッド (classmethod メソッドと staticmethod メソッド以外) とstr同様に、インスタンスを介して呼び出すことができます (通常は呼び出します)。s.replace(old, new)ここで、自動的にパラメーターにsなります。self

クラスを介してメソッドを呼び出すこともできるため、str.replace(s, old, new)とまったく同じであることがわかりs.replace(old, new)ます。そして、たまたま が の場合sstrこれは とまったく同じことを行いstring.replace(old, new)ます。しかし、これは歴史的な理由による偶然の一致です。

string補足として、モジュール内で関数を呼び出すことはほとんどありません。それらはほとんど、非常に初期のバージョンの Python からの持ち越しです。実際、string.replaceドキュメントの「非推奨の文字列関数」セクションの下にリストされており、おそらくそこで探している他のほとんどの関数と同様です。モジュール全体が廃止されていない理由は、 のような定数など、 str(またはbytesまたは) クラスに属さないものがいくつかあるためです。unicodestring.digits

于 2012-09-19T19:08:34.707 に答える
3

はい、スタンドアロン関数string.replace()として使用することを参照しているため、そのドキュメントは正しいです。だからあなたはこれを行うことができます:

>>> import string
>>> string.replace("a","a","b")
'b'

これは、次のように、特定の stringreplace()のメソッドとして呼び出すのとは異なります。

>>> 'a'.replace('a','b')
'b'

これらは、構文は異なりますが、同じ結果が得られるように設計された 2 つの異なるものです。そのため、一方を他方の構文で呼び出すと、エラーが発生します。例えば:

>>> 'a'.replace('a','a','b')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: an integer is required
于 2012-09-19T18:59:35.037 に答える
2

string モジュールの 'replace' メソッドと python string の 'replace' メソッドを混同しているようです。

string.replace("rest,"r", "t")

「テスト」を返します

"rest".replace("r", "t") 

「テスト」を返します

"rest".replace("rest", "r", "t") 

あなたが言及したエラーを返します

于 2012-09-19T19:07:12.550 に答える
0

Python メソッドは、明示的な自己を使用します。つまり、C++ / javascript にマジックthis変数がある場合、Python はそれを最初の引数として明示的に渡します。メソッドを呼び出すと、ドットの左側にあるオブジェクトがメソッドの最初の引数になります。

これらは同等です:

str.replace('foobar', 'o', 'O', 1)

'foobar'.replace('o', 'O', 1)

str両方のケースに関係する4 つの値 (および 1 つの class: ) だけであることがわかります。

于 2012-09-19T19:06:56.157 に答える