Pythonを独自の言語として一意にする特徴は何ですか?良いものから悪いものまで、有用なものから障害物まで、構文から実際の使用法まで、あらゆる種類の特性を探しています。
私はここでは初心者なので、直感的なことを説明する必要があるかもしれません。
Pythonを独自の言語として一意にする特徴は何ですか?良いものから悪いものまで、有用なものから障害物まで、構文から実際の使用法まで、あらゆる種類の特性を探しています。
私はここでは初心者なので、直感的なことを説明する必要があるかもしれません。
回答:
あなたは絶対にユニークな機能を見つけるのに苦労するでしょう。存在するほとんどの言語機能は、開始以来複数の言語で採用されています。いくつかはまれであるかもしれません、主に彼らが新しくて、まだあいまいであるか、正当な理由で死んだので。それでも、その場合でも、機能の組み合わせを見ることをお勧めします。
とはいえ、Pythonのいくつかの機能は、比較的ユニークな組み合わせになるはずです。少なくとも私は、ほとんど重複する機能セットを備えた人気のある(そして実用的な)リモート言語を知らない。コメントで述べたように、Rubyはかなり似ていますが、それでも多くの違いがあります。
attr = SomeDataType()
、コードのトンが自動的に生成されます。この例は、Djangoの「モデル」です。O(1)
中間結果のスペースが自然に続くことが多く、実際にメモリ内のすべてのアイテムを一度に必要とするタスクはほとんどありません)O(1)
、結果を明示的に保持しない限り、スペースを取ります)。yield
、主にイテレーター(ここではジェネレーターと呼びます)の記述をはるかに優れたものにします。これらは上記の兄であり、あらゆる種類の制御フローをサポートしています。C#には似たようなものがあり、同じキーワードがあります。しかしyield
、限られた種類のコルーチンをサポートするためにオーバーロードされています(たとえば、Luaはより精巧なサポートを持っています)。私の頭の上の2つの例:バックトレースとスタック制限なしの非同期降下解析と非同期I / O(便利な構文を使用)。for key, value in mapping.items()
)、既知の長さ(正直なところ、ほとんどの場合はタプル)の反復可能要素を複数の変数にアンパックできます。3.x以降では、単一のアイテムを取得する変数と残りのものを取得する変数を指定できるため、未知の長さのコレクションに対しても実用的ですfirst, *everything_in_between, last = values
。propery
オブジェクトにラップする小さな関数を作成しました。*args
そして**kwargs
、タプルと辞書をパラメータにマッピングする痛みのない方法など。
Pythonをユニークなものにしているのは、公開する機能の特定の組み合わせだけだと思います。これは、ほとんどのプログラミング言語に当てはまります。
または、1つの小さな問題があるかもしれません。Pythonがself
、他の言語で行われるオブジェクトメンバー関数への正式なパラメーターとして明示的に渡す方法を見ていません。それは小さなことで、これが実際にどのように変化するかわかりません。
しかし、私はPythonにあまり流ではないので、確かに欠けているものがあるかもしれません!
所有者のプロパティになるdocstringの自動処理。一般に、Pythonの優れたイントロスペクション機能はすべて、help()を使用する機能から__doc__
オブジェクトのファーストクラスプロパティとして使用する機能まで、非常にユニークな言語にします。例えば:
>>> class DocStringException(Exception):
... """Error message is the same as docstring"""
... def __str__(self):
... return repr(self.__doc__)
...
>>> class ExampleException(DocStringException):
... """An example happened"""
...
>>> raise ExampleException
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.ExampleException: 'An example happened'
その他の便利なイントロスペクション機能:
Generator Expressions
input()
説明してみましょう、私は言語を見ていません(これまでのところ)、何かを印刷するステートメントに値を割り当てることができます、それはruby's print/gets
に似ていますが、印刷に割り当てられた値で:print "Foo" bar = gets
yield
ordereddict, namedtuple, array, list, tuple, dictionary
大事なことは、Pythonは非常に少ない構文オーバーヘッドを持つ非常に少ない言語の1つであり、リスト/セット/ dictの理解、収量、デコレーター、評価、メタクラスプログラミング、イントロスペクション、最適化された組み込みデータ構造(リスト、これらのすべてが非常に良い方法で共謀し、あなた(開発者)があなたが考えていることとほぼ同じくらい速く簡潔でエレガントなコードであなたの考えを表現する力を与えます。このキラーな機能セットを組み合わせた他の言語は、本当に考えられません。