タグ付けされた質問 「python」

Pythonは動的に型付けされた、高レベルのインタープリタ型プログラミング言語です。その設計は、明確な構文、オブジェクト指向プログラミングへの直感的なアプローチ、および物事を明確にする正しい方法を作ることに焦点を当てています。Pythonはモジュールと例外をサポートし、広範な標準モジュールライブラリを備えています。Pythonは汎用であり、Webから組み込みシステムまで幅広く使用されています。

9
アルゴリズムはプログラミング言語よりも重要ですか?
現在(2013年)のGoogle Code Jamコンテストでは、40行のコードのみを使用して同じ問題を解決したPythonの人々と比較して、C ++およびJavaの人々が200行以上のコードを必要とする問題がありました。 PythonはC ++やJavaと直接比較することはできませんが、冗長性の違いはおそらくアルゴリズムの効率に影響を与えると考えられます。 言語の選択と比較して、適切なアルゴリズムを知ることはどれほど重要ですか?優れた実装のPythonプログラムを(同じアルゴリズムを使用して)より良い方法でC ++またはJavaで実装でき、これは特定のプログラミング言語の自然な冗長性と関係がありますか?
35 java  c++  algorithms  python 

4
Pythonの「それを行う唯一の方法」格言の具体例[終了]
私はPythonを学んでおり、PEP 20 The Zen of Pythonの次の点に興味があります。 明白な方法が1つあり、できれば1つだけである必要があります。オランダ人でない限り、その方法は最初は明らかではないかもしれませんが。 誰もこの格言の具体的な例を提供できますか?Rubyなどの他の言語とのコントラストに特に興味があります。Rubyの設計哲学の一部(Perlを起源とするのでしょうか?)は、それを行う複数の方法が良いことであるということです。誰もが各アプローチの長所と短所を示すいくつかの例を提供できますか。注:私はどちらが良いか(おそらく主観的すぎて答えられない)の答えではなく、2つのスタイルの公平な比較を求めています。

4
本当に定数にすべて大文字を使用する必要がありますか?
私は主にパイリントを使用してソースコードをリントするPythonプログラマです。1つを除くすべての警告を削除できます:定数の名前が無効です。名前をすべて大文字に変更すると修正されますが、本当にそうすることになっていますか?私がそれを行うと、ほとんどの変数が定数であるため、コードがいように見えます(pylintによると)。

5
Pythonミックスインはアンチパターンですか?
私はpylint、他の静的分析ツールがすべてを知っているわけではないことを完全に認識しています。(これは、conventions だけでなく、さまざまなクラスのメッセージに適用されます。) 私のようなクラスがある場合 class related_methods(): def a_method(self): self.stack.function(self.my_var) class more_methods(): def b_method(self): self.otherfunc() class implement_methods(related_methods, more_methods): def __init__(self): self.stack = some() self.my_var = other() def otherfunc(self): self.a_method() 明らかに、それは不自然です。あなたが好きなら、これはより良い例です。 このスタイルは「ミックスイン」を使用して呼び出されると思います。 他のツールと同様に、pylintレートでこのコードを-21.67 / 10、主にそれは考えているためmore_methodsとrelated_methods持っていないselfか、属性otherfunc、stack、annd my_varのコードを実行せず、それは明らかに見ることができないためrelated_methodsとmore_methods混合でにしていますimplement_methods。 コンパイラーと静的解析ツールが停止問題を常に解決できるとは限りませんが、これは確かに、継承されたものを見るとimplement_methodsこれが完全に有効であることを示す場合であり、それは非常に簡単なことです。 なぜ静的解析ツールがこの有効な(私が思うに)OOPパターンを拒否するのですか? どちらか: 彼らは継承をチェックしようとさえしません mixinは慣用的で読みやすいPythonでは推奨されません #1は明らかに間違っています。なぜなら、を使用し pylintて継承する私のクラス(でのみ定義されているもの)について教えてもらえば、文句を言わないからです。unittest.TestCaseself.assertEqualunittest.TestCase ミックスインは非Pythonpythonですか、落胆しますか?

3
実装が保留中のメソッドに対してNotImplementedErrorを送出するのは慣習的ですか?
私はNotImplementedError実装したい任意のメソッドに対してaを上げるのが好きですが、まだそれをやろうとしていません。私はすでに部分的な実装を持っているかもしれraise NotImplementedError()ませんが、まだ気に入らないのでそれを前に付けます。一方で、他の人が自分のコードを保守しやすくするので、慣習に固執するのも好きです。そして、慣習は正当な理由で存在するかもしれません。 ただし、NotImplementedErrorのPythonドキュメントには次のように記載されています。 この例外はRuntimeErrorから派生しています。ユーザー定義の基本クラスでは、派生クラスがメソッドをオーバーライドする必要がある場合、抽象メソッドはこの例外を発生させる必要があります。 これは、私が説明したものよりもはるかに具体的で正式なユースケースです。NotImplementedErrorAPIのこの部分が進行中の作業であることを単に示すためにを上げるのは良い、従来のスタイルですか?そうでない場合、これを示す別の標準化された方法はありますか?

7
クラスを使用したOOPと比較した関数型プログラミング
私は最近、関数型プログラミングの概念のいくつかに興味を持っています。しばらくの間、OOPを使用しました。OOPでかなり複雑なアプリを作成する方法を見ることができます。各オブジェクトは、そのオブジェクトが行うことを行う方法を知っています。または、親クラスでも同様です。だから私は単にPerson().speak()人に話させるように言うことができます。 しかし、関数型プログラミングで同様のことを行うにはどうすればよいですか?関数がどのようにファーストクラスのアイテムであるかがわかります。しかし、その機能は特定の1つのことだけを行います。私は単にsay()周りに浮かぶメソッドを持ち、それを同等のPerson()引数で呼び出すので、何か言っていることを知っていますか? だから私は簡単なことを見ることができます、機能プログラミングでOOPとオブジェクトの比較をどのように行うのですか?それで、コードベースをモジュール化して整理できますか? 参考までに、OOPでの私の主な経験は、Python、PHP、およびいくつかのC#です。私が見ている機能的な機能を持つ言語は、ScalaとHaskellです。私はScalaに傾いていますが。 基本的な例(Python): Animal(object): def say(self, what): print(what) Dog(Animal): def say(self, what): super().say('dog barks: {0}'.format(what)) Cat(Animal): def say(self, what): super().say('cat meows: {0}'.format(what)) dog = Dog() cat = Cat() dog.say('ruff') cat.say('purr')

6
Pythonがリストを繰り返すときに個々の要素のコピーのみを作成するのはなぜですか?
Pythonで次のように書けば for i in a: i += 1 a変数iはの元の要素のコピーであることが判明したため、元のリストの要素は実際にはまったく影響しませんa。 元の要素を変更するには、 for index, i in enumerate(a): a[index] += 1 必要になります。 この振る舞いには本当に驚きました。これは非常に直感に反し、他の言語とは一見異なるように思われ、今日は長い間デバッグしなければならなかったコードにエラーが生じました。 以前にPythonチュートリアルを読んだことがあります。念のため、この本をもう一度チェックしましたが、この動作についてはまったく言及していません。 この設計の背後にある理由は何ですか?チュートリアルが読者が自然にそれを手に入れるべきであると信じるように、それは多くの言語の標準的な実践であると予想されますか?繰り返しで同じ動作が存在する他の言語は何ですか?将来的に注意する必要がありますか?
31 python  list  iterator 

5
信頼できないコードの実行のベストプラクティス
私は、ユーザーがサーバーに対して任意の信頼できないpythonコード(このようなビット)を実行できるようにする必要があるプロジェクトを持っています。私はpythonにかなり慣れていないため、システムにセキュリティホールやその他の脆弱性を招くようなミスを避けたいと思います。利用可能なベストプラクティス、推奨される読書、または私のサービスを使用可能にするが悪用できないようにする他のポインターはありますか? これまで私が考えてきたことは次のとおりです。 コンテキストから削除__builtins__して、execなどの潜在的に危険なパッケージの使用を禁止しますos。ユーザーは、私が提供したパッケージのみを使用できます。 スレッドを使用して、適切なタイムアウトを強制します。 execコンテキスト内で割り当てることができるメモリの総量を制限したいのですが、それが可能かどうかはわかりません。 ストレートexecに代わるものがいくつかありますが、ここでどれが役立つかわかりません: を使用して、ast.NodeVisitor安全でないオブジェクトにアクセスする試みをキャッチします。しかし、どのオブジェクトを禁止する必要がありますか? 入力内の二重アンダースコアを検索します。(上記のオプションよりも優雅ではありません)。 PyPyコードのサンドボックスを使用するか、サンドボックスに似たもの。 注: JavaScriptベースのインタープリターが少なくとも1つあることは承知しています。私のシナリオではうまくいきません。

4
並行性に対処するためにPythonに固執するか、放棄する必要がありますか?
私はDjangoで書かれた10K LOCプロジェクトを持っています。非同期性と必要なバックグラウンドジョブのためにかなりのセロリ(RabbitMQ)があり、並行性を高めるためにシステムの一部がDjango以外で書き直されることで恩恵を受けるという結論に達しました。理由は次のとおりです。 シグナル処理および可変オブジェクト。特に、あるシグナルが別のシグナルをトリガーする場合、ORMを使用してDjangoでそれらを処理すると、インスタンスが変更または消滅したときに驚く可能性があります。渡されたデータがハンドラー内で変化しないメッセージングアプローチを使用したいと思います(Clojureのコピーオンライトアプローチは、それが正しければ素晴らしいと思われます)。 システムの一部はWebベースではないため、タスクを同時に実行するためのより良いサポートが必要です。たとえば、システムはNFCタグを読み取り、読み取りが行われるとLEDが数秒間点灯し(Celeryタスク)、サウンドが再生され(他のCeleryタスク)、データベースが照会されます(他のタスク)。これはDjango管理コマンドとして実装されますが、DjangoとそのORMは本質的に同期しており、メモリを共有するのは制限されています(NFCリーダーを追加することを考えています。より優れたメッセージパッシング機能を確認したい)。 ErlangやClojureなどの言語を使用する場合と比較して、TwistedやTornadoなどを使用する場合の長所と短所は何ですか?私は実用的な利益と不利益に興味があります。 システムの一部が別の言語でより良くなるという結論にどのように到達しましたか?パフォーマンスに問題がありますか?これらの問題はどの程度深刻ですか?より高速にできる場合、高速であることが重要ですか? 例1: HTTPリクエストの外部で動作するDjango: NFCタグが読み取られます。 データベース(および場合によってはLDAP)がクエリされ、データが利用可能になったときに何かを実行したい(赤または緑のライト、サウンドを再生する)。これはDjango ORMの使用をブロックしますが、利用可能なCeleryワーカーが存在する限り問題ではありません。より多くのステーションで問題になる場合があります。 例2: Djangoシグナルを使用した「メッセージの受け渡し」: post_deleteイベントが処理され、他の目的は、このために変更または削除することができます。 最後に、通知をユーザーに送信する必要があります。ここで、通知ハンドラーに渡される引数が削除済みまたは削除予定のオブジェクトのコピーであり、ハンドラーで変更されないことが保証されていると便利です。(もちろん、ORMが管理するオブジェクトをハンドラーに渡さないことで、手動で行うことができます。)

5
同じファイルに複数のクラスが定義されているとPythonicと見なされますか?
初めてPythonを使用して、同じファイルに複数のクラスを記述することになりました。これは、クラスごとに1つのファイルを使用するJavaなどの他の言語とは対照的です。 通常、これらのクラスは1つの抽象基本クラスで構成され、1-2の具体的な実装が使用されますが、使用方法はわずかに異なります。以下にそのようなファイルを1つ投稿しました。 class Logger(object): def __init__(self, path, fileName): self.logFile = open(path + '/' + filename, 'w+') self.logFile.seek(0, 2) def log(self, stringtoLog): self.logFile.write(stringToLog) def __del__(self): self.logFile.close() class TestLogger(Logger): def __init__(self, serialNumber): Logger.__init__('/tests/ModuleName', serialNumber): def readStatusLine(self): self.logFile.seek(0,0) statusLine = self.logFile.readLine() self.logFile.seek(0,2) return StatusLine def modifyStatusLine(self, newStatusLine): self.logFile.seek(0,0) self.logFile.write(newStatusLine) self.logFile.seek(0,2) class GenericLogger(Logger): def …

5
Pythonで辞書とタプルを使用する場合
特定の例は、ファイル名とそのサイズのリストです。リストの各アイテムがフォーム{"filename": "blabla", "size": 123}であるべきか、それともただであるべきであるか決定できません("blabla", 123)。たとえば、サイズにアクセスすることfile["size"]は、file[1]... よりも説明が多いため、辞書は私にとってより論理的なように思えますが、確かにわかりません。考え?

9
Pythonのような動的に型付けされた言語でのみ可能なデザインパターンはありますか?
関連する質問を読みました。Pythonのような動的言語には不要なデザインパターンはありますか?Wikiquote.orgでこの引用を思い出した 動的型付けのすばらしいところは、計算可能なものをすべて表現できることです。また、型システムはそうではありません—型システムは通常決定可能であり、サブセットに制限されます。静的型システムを好む人は、「それでいい、それで十分だ。作成したいすべての興味深いプログラムが型として機能します。」しかし、それはばかげています。型システムができたら、どんな面白いプログラムがあるのか​​さえわかりません。 ---ソフトウェアエンジニアリングラジオエピソード140:Gilad BrachaによるNewspeakおよびPluggable Types 引用の定式化を使用して、「型として機能しない」有用な設計パターンまたは戦略があるのだろうか?

2
Pythonファクトリー関数のベストプラクティス
foo.pyクラスを含むファイルがあるとしますFoo: class Foo(object): def __init__(self, data): ... ここFooで、生のソースデータから特定の方法でオブジェクトを作成する関数を追加します。Fooの静的メソッドまたは別の別の関数として配置する必要がありますか? class Foo(object): def __init__(self, data): ... # option 1: @staticmethod def fromSourceData(sourceData): return Foo(processData(sourceData)) # option 2: def makeFoo(sourceData): return Foo(processData(sourceData)) ユーザーにとって便利であることがより重要かどうかはわかりません。 foo1 = foo.makeFoo(sourceData) または、メソッドとクラスの間の明確な結合を維持することがより重要かどうか: foo1 = foo.Foo.fromSourceData(sourceData)
30 design  python 

6
Python関数呼び出しで未使用の戻りパラメーターに使用するスタイル
関数が値のタプルを返すが、それらの値の1つだけが後で使用される状況を処理するための推奨/一般的に受け入れられているコーディングスタイルはありますか呼び出しはおそらく少しやり過ぎです...)?する代わりに a, b, c = foo() そして、andを使用bしないだけcで、次のバリアントのうちどれを優先する必要がありますか(または別のものがありますか?): バリアント1(アンダースコア) a, _, _ = foo() (これは非常に明確でシンプル_ = gettext.gettextですが、翻訳を使用する多くのアプリケーションでの使用と衝突する可能性があります) バリアント2(ダミー名) a, unused, unused = foo() (あまり魅力的ではない、私は思う、同じような他の名前にも当てはまりますdummy) バリアント3(インデックス) a = foo()[0] (私にとっては、()[0]Pythonに見えない…)

1
自分でシステムを開発する場合、マイクロサービスを使用する必要がありますか?
私は仕事で新しいプロジェクトを始めており、おそらくプロジェクトのほぼ唯一の開発者になりますが、他の1人または2人の開発者は、既存のアプリケーションまたは単純なスクリプトをメインプロジェクトに統合する必要があります。このプロジェクトでは、小規模のバルクデータとストリーミングデータの取り込み/処理、およびイベント駆動型とオンデマンドの両方のコード実行を処理する必要があります。フレームワークの一部はCPUに強く依存し、一部はI / Oに強く依存します。ほとんどのデータは単一のマシン上に存在する必要がありますが、クラスターを作成してVMを接続し、利用可能な計算能力を向上させることができます。おそらく、このコアフレームワークが提供するサービスに依存する1つ以上の小さなWebアプリケーションがあるでしょう。主な言語は、ほぼすべてのPythonです。 私の質問は、開発の大部分を自分で行うことを考えると、このような取り組みにマイクロサービスアプローチを採用すべきか、モノリシックアプリケーションに固執すべきかということです。私の考えでは、マイクロサービス(Namekoを使用)は、異なる実行モデル(データパイプライン、イベント起動、オンデマンド、Webアプリケーションなど)を持つフレームワークの要素を自然に分離し、ワークロードと複数のプロセスにわたる通信。私の懸念は、おそらくシステムの実行を容易にするために必要な複数のサービス(rabbitmq、redisなど)を管理するKubernetesクラスター(私はDockerに精通していますが、Kubernetesにはまだかなり新しい)になることです。そして、潜在的に私たちが必要なすべての機能を実際に実装するための多くの小さなコードの塊 開発者が1人しかいないプロジェクトの場合、マイクロサービスはこのような複雑なシステムの開発と保守を引き続き簡素化しますか?代わりに使用することを検討する必要があるメソッド/システム/フレームワークはありますか、またはこの方法でシステムを設計する際のオーバーヘッドを削減するためにありますか?

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