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

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

2
キャッシングファクトリーデザイン
のclass XFactoryオブジェクトを作成するファクトリがありますclass X。のインスタンスXは非常に大きいため、ファクトリの主な目的は、クライアントコードに対してできるだけ透過的にインスタンスをキャッシュすることです。のオブジェクトclass Xは不変であるため、次のコードは妥当なようです。 # module xfactory.py import x class XFactory: _registry = {} def get_x(self, arg1, arg2, use_cache = True): if use_cache: hash_id = hash((arg1, arg2)) if hash_id in _registry: return _registry[hash_id] obj = x.X(arg1, arg2) _registry[hash_id] = obj return obj # module x.py class X: # ... それは良いパターンですか?(実際のファクトリーパターンではないことはわかっています。)変更すべき点はありますか? …

1
使用時のPythonモジュールのインポート
私自身の個人的なPythonライブラリでは、次のようなことがよくあります。 class MyClass: # ... def plot(self): import someGraphicsLibrary as graphicslib graphicslib.plot(self.data) その理由は、初期化にsomeGraphicsLibraryは時間がかかり、使用するライブラリの1つでは数秒かかるためです。このクラスを使用するときは常に結果をプロットする必要はありません。そのため、実際に使用されるまではインポートしないのが理にかなっています。 これは正常に動作するようですが、他の人のコードでは見たことがないと思います。だから私の質問は、これが良い習慣と考えられるかどうかです。このように物事を行うときに予想される隠れた落とし穴はありますか?
8 python 

1
大きな(数ギガバイト)ファイルのアップロードを処理するオプション
DjangoアプリケーションとS3で非常に大きなファイルのアップロード機能をどのように実装しますか? 写真家としての副業で、問題のあるイベントの元の画像と処理された画像を含むマルチギガバイトのアーカイブ(zip、tar)ファイルを共有する必要があるクライアントがいくつかいます。これまでは、これにGoogleドライブを使用してきました。GDにファイルをアップロードし、ローカルストレージドライブにファイルを取得して保存していました。アップロードされたファイルはMacのGoogleドライブクライアントを介してコンピューターにミラーリングされるため、GDフォルダーを時々クリーンアップします。私のMacには256GBのオンボードドライブしかないので、スペースは非常に貴重です。 1つのクライアントで、過去4か月間に2つのハードドライブ障害が発生しました。過去10年間、私が彼らに雇われていたのはゼロでした。彼らはより良いソリューションを望んでおり、私はすでに開発者です。 ここでの問題は、ブラウザに12ギガバイトを超えるアーカイブファイルのキューイングとサーバーへの転送を任せることをお勧めします。このファイルは、S3に移動する前に属性のスキャンを行います。 これには2つのオプションがあります。 ブラウザでファイルアップロードフォームを使用して、マルチパートファイルをサーバーにアップロードします。完了すると、ファイルはローカルのCeleryタスクによってチェックおよび処理され、S3バケットにアップロードされます。 ローカルファイル処理のCeleryタスクの実行をトリガーするDjango管理コマンドを実装し、Paramikoを使用してローカルPythonスクリプトを使用してファイルをアップロードし、アップロードが完了したときに管理コマンドの実行をトリガーします。 個人的には、私はオプション2に傾いていますが、可能であれば他のアイデアを求めています。

1
C ++でのPythonスタイルのキーワード引数-良い習慣か悪い考えか?
最近、関数へのオプションのパラメーターの最適な順序を見つけようとしているときに、このブログの投稿と、C ++のPythonのような機能のヘッダーを提供するGitHubリポジトリを偶然見つけましたkwargs。結局使ったわけではないのですが、強く型付けされた言語でこれがいいのか疑問に思っています。しばらくPythonで作業していkwargsて、プロジェクト内の-のような機能の概念が非常に魅力的であることがわかります。そのオブジェクト/関数の多くには多数のオプションパラメーター(残念ながら回避できない)があり、コンストラクターの長いリストが生成されるためです。 1つまたは2つのパラメータが異なり、はるかに簡潔/ DRY風にすることができます。 このようなことを他の人が経験したとしたら、どうですか。避けるべきですか?ガイドラインはありますか?潜在的な問題/落とし穴は何ですか?
8 c++  python 

4
教科書が実際の言語ではなく疑似コードを使用するのはなぜですか?
大学やアルゴリズムの教科書では、教師と著者が疑似コードで制御フローを説明することは非常に一般的です。PythonやHaskellなどのより表現力のある言語の出現により、大学がこれらの言語のいずれかを介してアルゴリズムを説明するように切り替えることは合理的ですか? 私が考えることができる疑似コードの唯一の利点は、それがおそらく言語に依存しないということです。そうではありません。一部の疑似コードは命令型アプローチを使用し、他の疑似コードは機能的に見えます。著者は、使いやすいプログラミング言語からセマンティクスを借用するか、またはさらに悪いことに、セマンティクスを自然言語で記述します。では、疑似コードが実際に言語に依存しない場合、それを使用する利点は何ですか?既存の言語をそのまま使用した方がよいのではないでしょうか。

4
PythonプログラミングとPythonicであるために、なぜ「今のところ*現在*よりも優れていないことが多い」のですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 Zen of Pythonでは、以下を除くほとんどの部分を理解できます。 Now is better than never. Although never is often better than *right* now ですから、今それを行うか、結果を得ることが今よりも良いと思います。しかし、なぜ「今のところ、*現在*よりもよくない」のはなぜですか?それはどういう意味ですか? 上記の2行のコンテキストを確認するには、PythonのZen全体を次に示します。 The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is …
8 python 

3
コードの重複や不明確なパラメーターの通過を回避するためのクライアントAPIのリファクタリング
APIを開発する必要があります。APIの機能は、サーバーによって公開されているサービスを呼び出すリクエストです。 最初、APIは次のように機能しました。 class Server: def firstRequest(self, arg1, arg2): # block of code A async = Async() async.callFirstRequest(arg1, arg2) # block of code B def secondRequest(self, argA, argB, argC): # block of code A (identical to that of firstRequest) async = Async() async.callSecondRequest(argA, argB, argC) # block of code B (identical …

1
セロリでAPIを呼び出す
要件が次のようなクライアント向けのシステムを設計しています。 彼らはJSONファイルをアップロードします(1つのオブジェクト/行) JSONオブジェクトをペイロードとしてAPIを呼び出す 各API呼び出しの状態(成功/失敗)をデータベースに記録する 失敗した場合は、1回再試行します。 セロリとsqliteデータベースをバックエンドとして使用して構築することにしました。JSONの行の数は多くなく、メモリに収まる可能性があります。個々のコンポーネントはすべて正常に動作していますが(ファイルのアップロード、ファイルの読み取り、APIの呼び出し、dbへの書き込みなど)、セロリを使用したタスクのディスパッチの全体的なアーキテクチャについてはわかりません。 ファイルにN行あるとすると、次のようになります。 オプションA: result列(最初はnull)を持つデータベースにN個のオブジェクトを作成します。 N個のセロリタスクを作成し、オブジェクトIDをパラメーターとペイロードとして渡します サブタスクにAPIを呼び出しさせ、オブジェクトの結果フィールドを成功/失敗に更新します。 失敗した場合にセロリの再試行機能がAPIを再度呼び出そうとするようにします。 オプションB: result列(最初はnull)を持つデータベースにN個のオブジェクトを作成します。 1つのセロリタスクを作成し、N個のオブジェクトIDとN個のペイロードのリスト全体を渡します N個のオブジェクトすべてをループして、各ステップの結果でデータベースを更新します。 前のタスクが完了すると、別の1回限りのセロリタスクが起動され、失敗した結果を持つすべてのオブジェクトのデータベースが読み取られて再試行されます。 オプションAは、その単純さのために優先していますが、スケジュールできるセロリタスクの数の制限と、ブローカー(RabbitMQ)がそれを処理するかどうかはわかりません。オプションBの場合、大きなリスクは、セロリタスクが何らかの理由で何らかの行Mで終了した場合、後続のすべてのオブジェクトが試行されることはないということです。 これらの2つについての考え、または3番目に優れた代替案があるかどうか。

2
リストよりもPythonジェネレーターを優先する必要がありますか?
Pythonイテレータはメモリ効率が非常に高くなります。リストだけでなく、常にジェネレータを使用した方がよいですか?どのような場合に、単純な配列を使用すべきですか? たとえば、これの代わりに: emails = [user.email for user in users] 私はこれを好むべきですか?: emails = (user.email for user in users) 注:「イテレータ」ではなく「ジェネレータ」を意味します。

4
ネストされたtry / except / elseをクリーンアップする方法は?
コードを書くとき、私はしばしばこのようなことをしたいです: try: foo() except FooError: handle_foo() else: try: bar() except BarError: handle_bar() else: try: baz() except BazError: handle_baz() else: qux() finally: cleanup() 明らかに、これは完全に判読できません。しかし、それは比較的単純なアイデアを表しています。一連の関数(または短いコードスニペット)を、それぞれに例外ハンドラーを付けて実行し、関数が失敗するとすぐに停止します。Pythonがこのコードに構文糖を提供できると思います。おそらく次のようなものです。 # NB: This is *not* valid Python try: foo() except FooError: handle_foo() # GOTO finally block else try: bar() except BarError: handle_bar() # ditto else try: baz() …

2
PythonとRubyが変数の値の宣言と割り当てを区別しないのはなぜですか?
最も一般的な動的型付けスクリプト言語の2つであるPythonとRubyは、変数の宣言と変数への値の割り当ての間で構文を区別しません。 それは両方の言語であり、変数nを宣言してそれに値を割り当てることは次のようになります: n = 10 そして、後で変数に新しい値を割り当てても、まったく同じように見えます。 これにより、2つの大きな問題が発生します。 値を変更するときに変数の名前にタイプミスがあると、新しい変数が作成されてバグが発生します。 コードの意図が不明確になります。変数が最初に宣言されて使用される場所がわからないため、コードがさらに混乱する可能性があります。 私が理解していないのは、これらの言語にvar、宣言と割り当てを区別するために、宣言で使用するキーワードがない理由です。これによって言語の動的型付けが減ることはなく、欠点もありません。 変数を明示的に定義する必要がないことの利点は何ですか?

1
グラフィカルUIのみを構築する1500 LOCメソッドのリファクタリング[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前休業。 現在、基本的にUIのみを構築するメソッドをリファクタリングする方法について頭を悩ませています。 この方法は、1500行を超えるコード(LOC)であり、カウントされます。それは成長しました、これにどのように取り組むかという計画はありませんでした。あなたは可能性がある、このおなじみのを見つけます。 とにかく、これは基本的に、次のような少し大きな1つの大きなメソッドです。 . . . # null checks null_checks_bx = Box(True) null_checks_ck = CheckBox() null_checks_ck.set_text('Null checks throwing exceptions of type:') if 'doNullChecks' in options: null_checks_ck.set_active(options['doNullChecks']) else: null_checks_ck.set_active(True) # dict to sorted list: extract values from dict by list comprehension exceptions = sorted([exception.get_full_name() for exception in JavaTypes.exception_types]) …

1
Pythonがクラスプライベートメンバーにダブルアンダースコアを使用する歴史的な理由は何ですか
Pythonでは、モジュールのプライベート関数または変数の名前は_fooです。それがクラスにプライベートである場合、それは名前__fooです。これらの動作の背後にあるメカニズムは異なりますが、それは質問にはほとんど関係がありません。 Python言語の設計中に、クラスのプライベートメンバー用に2つの下線文字が選択されたのはなぜですか?モジュールprivateのように、単一の下線を付けないのはなぜですか?なぜもっと目立つ他のキャラクターがいないのですか?(_と__の区別は難しい)。 ここにはある程度の歴史があると思いますが、見つけるのに苦労しています。なぜなら、なぜそれがそうであるのかではなく、それが何を意味するのかを説明するチュートリアルだからです。
8 python  history 

3
Pythonアプリケーション用のブラウザベースのGUI [終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 コマンドラインのpythonアプリケーション用のウェブ/ブラウザベースのGUIを作成したいと考えています。目標は、このGUIを作成するためにHTML / JSテクノロジーを利用することです。アプリケーション自体として、LinuxとWindowsで実行する必要があり、インターフェースはlocalhostからのみアクセスできます(インターネットに公開されません)。GUIには5〜10ページが含まれます。 HTML / JSを含む従来のデスクトップGUIは必要ありませんが、一連のHTMLファイルと、それらとアプリケーションの間にある種のコントローラーが必要です。 また、ページ全体を更新せずに、GUIでデータを読み込んで印刷できるように、非同期プログラミング(ajaxのような)を利用したいと思っています。私はおそらくそのためにjQueryを使用しますが、他にもいくつかあります。 これをどのように設計することをお勧めしますか?ここではパフォーマンスは重要ではありません。私はむしろ、信頼性、移植性、シンプルさを考えています。 私は軽量のPython HTTPサーバー/フレームワーク(CherryPyなど)を使用することを考えています。後でPythonテンプレートシステムを使用することもできます(最初は数ページになります)。 編集: 私はこれを構築するためのアイデア/推奨事項を探していますが、ブラウザ/ウェブベースのGUIに代わるものではありません。

5
SQLiteはデータログの賢明なオプションですか?
Linuxで小さなデータロギングアプリケーションをセットアップしようとしています。データはシリアルポート経由で届き、そこからロギングとグラフィック表示に送られます。 ログ機能は、再起動後のグラフ機能の初期化のためにあります。 データは毎秒到着し、5桁の10進数の精度で構成され、2年間記録する必要があります。私の現在の空き容量は約15GBです。 これまでのプロジェクトの言語はbashとpythonです。 私の目的は、シンプルでありながら堅牢な(おそらくフラッシュドライブへのライブバックアップ? SQLiteはこれに適していますか?私のホームディレクトリにあるテキストファイルはこれに適していますか?
8 python  sql  logging 

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