6

Perl の習慣はなかなか消えません。変数の宣言、スコープ、グローバル/ローカルは 2 つの言語間で異なります。perl コーディングから python コーディングへの移行の苦痛を軽減する、推奨される一連の python 言語イディオムはありますか。

微妙な変数のスペルミスは、非常に多くの時間を浪費する可能性があります。

変数宣言の問題は、python の人々の間では準宗教的であることを理解しています。言語の変更や機能について議論しているわけではありません。2 つの言語間の信頼できるブリッジであり、perl の習慣が Python の努力を台無しにすることはありません。

ありがとう。

4

5 に答える 5

2

Python クラスを個別のファイルに分割すると (Java のように、ファイルごとに 1 つのクラス)、スコーピングの問題を見つけるのに役立ちますが、これは慣用的な python ではありません (つまり、pythonic ではありません)。

私は多くの perl の後に python を書いていて、tchrist のこれは古いものであるにもかかわらず、有用であることがわかりました:

http://linuxmafia.com/faq/Devtools/python-to-perl-conversions.html

perl の最も優れた変数スコープなしで行うことに慣れることは、私の perl から python への移行で 2 番目に難しい問題でした。perl: CPAN をたくさん持っている場合、1 つ目は明らかです。

于 2009-09-29T06:42:14.990 に答える
1

Python では $_ は Python シェル以外には存在せず、グローバル スコープの変数は嫌われます。

実際には、これには 2 つの大きな影響があります。

  1. Python では、Perl のように自然に正規表現を使用することはできません。s0 は反復された $_ ごとに一致し、同様に一致をキャッチするのはより面倒です。
  2. Python 関数は、明示的に呼び出されるか、デフォルト変数を持つ傾向があります

ただし、Python ではほぼすべてがクラスになることを考えると、これらの違いはかなり小さいものです。Perl を使っていたときは、「カービング」について考えていました。Python では、むしろ「作曲している」と感じています。

Python には、Perl のような慣用的な豊かさがありません。翻訳しようとするのはおそらく間違いだと思います。

于 2009-09-28T22:11:47.667 に答える
1

PEP 8を読み、理解し、フォローし、愛してください。Python に関するすべてのスタイル ガイドラインが詳述されています。

マジで、Python の推奨イディオムと習慣について知りたいなら、それがソースです。

于 2009-09-29T08:17:38.403 に答える
1

質問は気に入っていますが、Perl の経験がないので、どのようにアドバイスすればよいかわかりません。

「Pythonイディオム」をGoogleで検索することをお勧めします。あなたはいくつかの宝石を見つけるでしょう。特に:

http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html

http://docs.python.org/dev/howto/doanddont.html

http://jaynes.colorado.edu/PythonIdioms.html

変数の「宣言」の問題については、次のアドバイスをお勧めします。

Python では、オブジェクトには変数名とは別に、独自の寿命があることに注意してください。変数名は、オブジェクトにバインドされるタグです。いつでも、おそらく完全に異なるタイプの別のオブジェクトに名前を再バインドできます。したがって、これは完全に合法です。

x = 1    # bind x to integer, value == 1
x = "1"  # bind x to string, value is "1"

実際、Python は強く型付けされています。信じられないかもしれませんが、コード 1 + "1" を実行してみてください。値 1 を持つ整数オブジェクトは、明示的な型強制がない場合、文字列値の追加を受け入れません。したがって、Python の名前には、変数のプロパティにフラグを立てる記号文字が含まれることはありません。それは Python のやり方ではありません。任意の正当な識別子名は、任意の型の任意の Python オブジェクトにバインドできます。

于 2009-09-28T21:36:16.757 に答える
0

変数名を間違って入力しないでください。真剣に。短く、簡単で、説明的なものを使用し、それらをローカルで使用し、グローバル スコープに依存しないでください。

これではうまく機能しない大規模なプロジェクトを実行している場合は、pylint、単体テスト、coverage.py を使用して、コードが期待どおりに動作することを確認してください。

他のスレッドのいずれかのコメントからコピー:

「'strict vars' の主な目的は、タイプミスした参照や見逃された 'my's が偶発的なグローバル (Perl 用語ではパッケージ変数) を作成するのを防ぐことです。これは Python では発生しません。裸の割り当てはデフォルトでローカル宣言になり、裸の未割り当てになるからです。シンボルは例外になります。」

于 2009-09-28T23:06:07.360 に答える