Pythonで 'format'メソッドがより広く使用されないのはなぜですか?


8

ここで何かが足りないのかもしれませんが、検索した結果、答えが見つかりませんでした。

私はかなりの数のPythonプロジェクトを調査しましたが、私が気づいていることの1つは、大部分のプロジェクト%が新しい推奨される.format()方法ではなく、演算子を文字列のフォーマットに引き続き使用しているという事実です。これには理由がありますか?何かを完全に見逃していない限り、それは些細な変更のように思えます。

例えば:

# count how many times the % operator technique is used
find . -name "*.py" -exec grep -HE "\"[^\"]+\"\s\%\s\w+|'[^']+'\s\%\s\w+" {} \; | wc -l

# and the same for format()
find . -name "*.py" -exec grep -HE "\w+\.format\(" {} \; | wc -l

# Results:
#
#               % operator        format()
# iPython          670               63
# Django           977               8
# Tornado          91                0
# requests         25                1

この質問の真の理由はなく、好奇心が強いだけです。

乾杯!


2
人々はタイプを少なくしたいし、.format()メソッドがある前に書かれたコードも持っている?
Wooble 2013

FWIW、古い方%がより効率的で、単純な文字列置換の冗長性が低くなります。私はほとんどの時間のそれを使用し、私は私がのために行くのフォーマットより強力な必要がある場合.format
bgusach

回答:


16

この効果を生み出すために、3つの非常に強い傾向が集まります。

  1. 快適さ:「私はこれを古い方法で行う方法を知っています。新しい方法を学ぶことはより多くの努力になるでしょう。」
  2. 労力と効果のトレードオフ:「古い方法はなくなったのですか?廃止されているのですか?いいえ?これを変更するビジネスケースはありません。代わりに新しいコードを作成してください。」
  3. 安全性:「提案された新しい方法はまったく同じですか?いいえ?古いコードをそのままにしておくと、欠陥が生じる可能性があります。」

実際、3つすべては非常に賢明です(最初の1つは少なくともそうです。継続的な学習がインフォメーションワーカーの繁栄の目的であるためです)。

編集:以下で指摘するように、4つ目のポイントがあります。新しいメソッドが存在することさえ知らない!これはあまり賢明ではありませんが、実際には最も一般的なものです。)


4
+1おそらく4
です。

1
@jk。+1 format()が存在することを知りませんでした。
Joe Z.

+1、ただしその4番目のポイントを含めます。私はSOに何度も気づきます。私は、人々がそれらが存在することを知らない.format()方法またはformat()機能を示すときはいつでも。
Martijn Pieters 2013

1
これはと同等でformatはありません%。たとえば、を%使用*すると、最小のフィールド幅を指定できます(たとえば'%.*f' % (7, 2.34)、フロート2.34を少なくとも7数字でフォーマットします)が、これを行うformatことはできません。そして、たぶんできないformatことが他にもあるでしょう%
バクリウ2013

3
すばらしい答えです。また、@ Bakuriはで可能ですがformat、それほど簡潔ではありません– "{0:.{1}f}".format(2.34, 7)。何も%できないことを見つけることがformatできません。
マット

6

他の理由に加えて、下位互換性と一貫性を追加します。多くの場合、最新かつ最高のPythonにアップグレードしたくない、またはアップグレードできない他のユーザーのコンピューターで実行できるスクリプトを作成する必要があります。したがって、最も低い共通分母に書き込みます。十分な数のユーザーが十分に新しいバージョンのPythonにアップグレードした時点で、どの機能がどのバージョンのPythonに登場したかを忘れている可能性があります。それらが非常に価値のある機能でない限り、各機能を使用しても安全であるかどうかを調査、検討、および決定する価値はないでしょう。formatメソッドmethodは、新しいコードで使用するのに適したAPIですが、すでに広範囲に%を使用しているコードベースに導入するケースはそれほど強力ではありません。


2

独自に使用するソフトウェアを開発する場合、ライブラリと開発ツールの新しいバージョンを使用することは、多くの場合あなたにとって有益です。ただし、あなたが見ているプロジェクトは、コミュニティと共有することを目的としたライブラリと開発ツールです。このような場合は、必要な機能を慎重に使用して、最も幅広いインストールベースを取得し、プロジェクトに最も多くの人を関与させる必要があります。

このformat()方法は、2008年のPython 3.0 / 2.6のリリースまで追加されませんでした。それはずっと前のように思えますが、ソフトウェアの最初のリリースを使用することはめったにないことに注意してください。これを、より深刻な2つのLinuxディストリビューションで利用可能になったときの状況に当てはめてみましょう。RHEL 5.xは引き続きPython 2.4を使用し、2017年までサポートされます-6.xにはPython 2.6がリリースされましたが、2010年までリリースされませんでした。Debianキャンプでは、安定した6.xシリーズまでPython 2.6がありませんでした2011。

したがって、理にかなっているかもしれませんが、今日Django(最初に2005年にリリースされた)のようなプロジェクトを開始して新しいメソッドで標準化した場合、元のメソッドの1000のオカレンスすべてをさかのぼって変更しなくても、ほとんど影響はありません。正式に廃止されました。それは機能し、バグを導入する可能性を生み出し、不必要にシステム要件を増加させます。


0

@KilianFothの回答への追加。大きなプロジェクトを上位のソフトウェアバージョンに移植するには、やらなければならない作業が多すぎます。また、廃止されていない使用法を変更することは、アップグレードプロセスにおいて最も重要ではありません

おそらく、彼らは完全に書き直された部分で新しいフォーマットを使用しており、残りの既存の使用法を変更しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.