[解決済み] Python インタープリタにとってバックティックは何を意味するのか: `num`
質問
私はリスト内包で遊んでいて、他のサイトでこの小さなスニペットに出会いました。
return ''.join([`num` for num in xrange(loop_count)])
私は、この機能を(タイプして)再現しようと数分を費やしましたが、その前に
`num`
ビットがそれを壊していることに気づくまで、(タイプして)関数を再現するのに数分かかりました。
これらの文字で文を囲むとどうなるのでしょうか?私が見る限り、それはstr(num)と同等です。しかし、時間を計ってみると
return ''.join([str(num) for num in xrange(10000000)])
4.09秒かかるのに対して
return ''.join([`num` for num in xrange(10000000)])
は2.43秒かかります。
どちらも同じ結果を出しますが、一方はずっと遅いです。どうなっているのでしょうか?
EDITです。
奇しくも...
repr()
よりもわずかに遅い結果を与えます。
`num`
. 2.99s vs 2.43sです。Python 2.6を使用(3.0はまだ試していません)。
どのように解決するのですか?
バックティックは、非推奨のエイリアスで
repr()
. この構文は Python 3.0 で削除されましたので、もう使わないでください。
を使うよりバックティックを使う方が速いようです。
repr(num)
または
num.__repr__()
バージョン 2.x では、グローバル名前空間での追加の辞書検索が必要なためだと思います (
repr
の場合)、あるいはオブジェクトの名前空間(例えば
__repr__
の場合)、それぞれです。
を使うことで
dis
モジュールを使用すると、私の仮定が証明されます。
def f1(a):
return repr(a)
def f2(a):
return a.__repr__()
def f3(a):
return `a`
ショーを分解する。
>>> import dis
>>> dis.dis(f1)
3 0 LOAD_GLOBAL 0 (repr)
3 LOAD_FAST 0 (a)
6 CALL_FUNCTION 1
9 RETURN_VALUE
>>> dis.dis(f2)
6 0 LOAD_FAST 0 (a)
3 LOAD_ATTR 0 (__repr__)
6 CALL_FUNCTION 0
9 RETURN_VALUE
>>> dis.dis(f3)
9 0 LOAD_FAST 0 (a)
3 UNARY_CONVERT
4 RETURN_VALUE
f1
は、グローバルなルックアップで
repr
,
f2
に対する属性ルックアップ
__repr__
の属性検索を行うのに対し、バックチッ ク演算子は別のオペコードで実装されています。辞書引きのためのオーバーヘッドがないので (
LOAD_GLOBAL
/
LOAD_ATTR
) や関数呼び出し (
CALL_FUNCTION
) の場合、バックチックの方が速いです。
Pythonの人たちは、低レベルの操作を別個に持つことが
repr()
のために別の低レベル操作を持つことは価値がなく、両方の
repr()
とバックティックの両方を持つことは、この原則に反しています。
1つの、そしてできれば1つだけの、明白な方法があるはずです。
というわけで、この機能はPython 3.0で削除されました。
関連
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] Python 3 の "python -m SimpleHTTPServer" に相当するものは何ですか?
-
[解決済み] Pythonの "assert "はどのように使うのですか?
-
[解決済み] Pythonの関数定義における->の意味とは?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] Pythonでファイルの読み込みと上書きをする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Pythonの文字列と整数の連結【重複あり
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?