2

Python 2.x で、バッククォートを使用して int オブジェクトから 10 進文字列を取得するのは恐ろしいことですか? バッククォートはrepr()ではありませんstr()か? この質問に答えていて気づきました。

Python ソースでは、Python ソースintobject.cで同じ機能を持っています。

(reprfunc)int_to_decimal_string,            /* tp_repr */
....
(reprfunc)int_to_decimal_string,            /* tp_str */

どう思いますか?

4

3 に答える 3

7

まあ、それが「恐ろしい」とは言いませんが、少なくとも4つの理由で正しくないと思います。

  1. str(my_number)バックティックで囲むよりも明確にあなたの意図を述べますmy_number( PythonのZenの「読みやすさのカウント」を参照してください)。

  2. CでのPythonの実装は、可能な実装の1つにすぎません。Jython、IronPython、PyPyなどがあり、Python仕様のどこかに明示的なステートメントがなく、整数オブジェクトでも同じでない限り、repr()そのstr()動作に依存することはありません。

  3. バックティックはPython3.xではなくなりました。

  4. あなたの数がたまたま大きすぎて、で表すことができない場合int、Pythonはそれを自動的に長整数に昇格させます。そのために、repr()それstr()は異なります。

この例を参照してください。

>>> x = 1234567890
>>> y = x ** 3
>>> `y`
'1881676371789154860897069000L'
>>> str(y)
'1881676371789154860897069000'
于 2010-05-17T10:03:12.513 に答える
2

はい。何にでもバックティックを使用するのは恐ろしいことです。

あなたは持っていstr(i)ます、あなたは持っています'%d' % i、あなたは持ってい.format(i)ます。必要な場合は、またはまたは何でもrepr直接言ってください。repr()%r

バッククォートを使用する正当な理由はありませんでした。バッククォートを使用すると、コードが読みにくくなり、解析がはるかに難しくなります。それらは Python 3 でなくなりました。

于 2010-05-17T10:06:17.367 に答える
0

2.X: 何にでもバッククォートを使用するのは恐ろしいことです。必要に応じて repr() または str() を使用します。

3.X: バッククォートが消えた! 三拍子揃って!!

于 2010-05-17T10:08:31.387 に答える