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

Pythonは、マルチパラダイム、動的型付け、多目的プログラミング言語です。これは、学習、理解、使用が迅速で、クリーンで統一された構文を適用できるように設計されています。Python 2は2020年1月1日をもって正式にサポートされなくなりました。それでも、バージョン固有のPythonの質問については、[python-2.7]または[python-3.x]タグを追加します。Pythonのバリアントまたはライブラリ(Jython、PyPy、Pandas、Numpyなど)を使用する場合は、タグに含めてください。

6
Pythonでは、メソッドではなく関数をいつ使用すればよいですか?
PythonのZenは、物事を行う方法は1つだけである必要があると述べています。 ささいな例であるChessBoardオブジェクトを見てみましょう。理事会でキングの合法的な動きをすべて利用できるようにする方法が必要だとしましょう。ChessBoard.get_king_moves()またはget_king_moves(chess_board)を記述しますか? これが私が調べたいくつかの関連する質問です: なぜPythonは「マジックメソッド」を使用するのですか? Python文字列に文字列長メソッドがない理由はありますか? 私が得た答えはほとんど決定的ではありませんでした: なぜPythonは一部の機能(list.index()など)にメソッドを使用し、他の機能(たとえばlen(list))に関数を使用するのですか? 主な理由は歴史です。関数は、タイプのグループに対して一般的であり、メソッドをまったく持たないオブジェクト(タプルなど)でも機能することを目的とした操作に使用されました。Pythonの関数機能(map()、apply()など)を使用するときに、アモルファスオブジェクトのコレクションに簡単に適用できる関数があると便利です。 実際、組み込み関数としてlen()、max()、min()を実装する方が、実際には、各型のメソッドとして実装するよりもコードが少なくて済みます。個々のケースについて疑問を投げかけることはできますが、それはPythonの一部であり、そのような根本的な変更を今行うには遅すぎます。関数は、大規模なコード破損を回避するために残しておく必要があります。 興味深いことですが、上記では実際に採用する戦略についてはあまり触れていません。 これが理由の1つです。カスタムメソッドを使用すると、開発者はgetLength()、length()、getlength()などの異なるメソッド名を自由に選択できます。Pythonは厳密な命名を強制するため、共通の関数len()を使用できます。 もう少し面白い。私の見解では、関数はある意味では、インターフェースのPythonicバージョンです。 最後に、グイド自身から: 能力/インターフェースについて話すと、「ローグ」の特別なメソッド名のいくつかについて考えさせられました。言語リファレンスでは、「クラスは、特殊な名前でメソッドを定義することにより、特殊な構文(算術演算や添え字やスライスなど)によって呼び出される特定の演算を実装できる」と述べています。しかし、構文のサポートではなく、組み込み関数の利点のために提供されているように見える、__len__またはのような特別な名前を持つこれらすべてのメソッドが__unicode__あります。それはので、おそらく、インターフェイスベースのPythonで、これらの方法は、ABCの定期的な名前のメソッドに変わるでしょう __len__になるだろう class container: ... def len(self): raise NotImplemented それについてもう少し考えますが、すべての構文操作が特定のABCで適切な通常の名前のメソッドを呼び出さ<object.lessthancomparable.lessthanないのはなぜかわかりません。「」は、例えば、あろうおそらく呼び出し「(あるいは「」「)。したがって、もう1つの利点は、Pythonをこの複雑な名前の奇妙さから引き離すことができることです。これは、HCIの改善のようです。 うーん。同意するかどうかはわかりません(図:-)。 最初に説明したいのが「Pythonの理論的根拠」です。 まず、HCIの理由から、x.len()ではなくlen(x)を選択しました(def __len__()かなり後になりました)。実際には2つの理由があり、どちらもHCIです。 (a)一部の操作では、接頭表記は単にpostfixよりも読みやすくなります-接頭辞(およびインフィックス!)の操作は数学において長い伝統があり、ビジュアルが問題について数学者が考える助けとなる表記法を好みます。式を次のようx*(a+b)に書き換える簡単さを比較してくださいx*a + x*b生OO表記を使用して同じことをやっての不器用さにします。 (b)何かの長さを要求していることlen(x)を知っているというコードを読んだとき。これは2つのことを教えてくれます。結果は整数であり、引数はなんらかのコンテナです。逆に、私がを読んだときx.len()、それがxインターフェイスを実装しているコンテナ、または標準を持つクラスから継承しているコンテナの一種であることをすでに知っている必要がありますlen()。マッピングを実装していないクラスにget()or keys() メソッドがある場合、またはファイルではないものにwrite()ください。 同じことを別の言い方をすると、「len」は組み込みの操作と見なされ ます。それを失うのは嫌だ。あなたがそれを意味していたのかどうかははっきりしませんが、 'def len(self):...'は通常の方法に降格したいようです。私はそのことを強く-1としています。 説明することを約束したPythonの理論的根拠の2番目のビットは、__special__単に見るだけでなく、 特別な方法を選んだ理由specialです。クラスがオーバーライドする可能性のある多くの操作、一部の標準(__add__またはまたは__getitem__)、一部の標準ではない(たとえば、ピクルス__reduce__は長い間Cコードでまったくサポートされていなかった)を予期していました。これらの特別な操作で通常のメソッド名を使用したくありませんでした。そのため、既存のクラス、またはすべての特別なメソッドのエンサイクロペディックメモリを持たないユーザーが作成したクラスは、実装するつもりのない操作を誤って定義してしまう可能性があります。 、悲惨な結果をもたらす可能性があります。IvanKrstićはこれをより簡潔に彼のメッセージで説明しました。メッセージは私がこれをすべて書いた後に届きました。 ---Guido van Rossum(ホームページ:http ://www.python.org/~guido/ ) これについての私の理解は、特定のケースでは、プレフィックス表記がより意味をなす(つまり、Duck.quackがquack(Duck)よりも言語の観点から理解できる)ことであり、関数も「インターフェース」を許可します。 そのような場合、私の推測は、Guidoの最初の点のみに基づいてget_king_movesを実装することです。しかし、それでも、同様のプッシュメソッドとポップメソッドを使用してスタッククラスとキュークラスを実装するなど、関数またはメソッドのどちらであるかについて、未解決の問題が数多く残っています。(私は本当にプッシュポップインターフェイスに信号を送りたいので、ここでは関数を推測します) TLDR:関数とメソッドのどちらを使用するかを決定するための戦略を誰かが説明できるか?


3
Python抽象クラスで抽象プロパティを作成する方法
次のコードでは、基本抽象クラスを作成しますBase。から継承するすべてのクラスにプロパティBaseを提供したいnameので、このプロパティをにしました@abstractmethod。 次にBase、と呼ばれるのサブクラスを作成しましたBase_1。にはnameプロパティはありませんがBase_1、Pythonはエラーなしでそのクラスのオブジェクトをインスタンス化します。どのようにして抽象プロパティを作成しますか? from abc import ABCMeta, abstractmethod class Base(object): __metaclass__ = ABCMeta def __init__(self, strDirConfig): self.strDirConfig = strDirConfig @abstractmethod def _doStuff(self, signals): pass @property @abstractmethod def name(self): #this property will be supplied by the inheriting classes #individually pass class Base_1(Base): __metaclass__ = ABCMeta # this class does not provide the …

4
asyncioは実際にどのように機能しますか?
この質問は、別の質問「cdefで待機する方法」によって動機付けられています。 Webにはに関する記事やブログ投稿がたくさんありますがasyncio、それらはすべて表面的なものです。asyncio実際にどのように実装されているのか、I / Oが非同期になる原因についての情報は見つかりませんでした。私はソースコードを読み込もうとしていましたが、何千行もの最高級のCコードではありません。その多くは補助オブジェクトを扱っていますが、最も重要なのは、Python構文とそれが変換するCコードとを関連付けるのが難しいことです。に。 Asycnio独自のドキュメントは、あまり役に立ちません。それがどのように機能するかについての情報はそこにはありません、それを使用する方法についてのいくつかのガイドラインだけがあり、これも時々誤解を招く/非常に不十分に書かれています。 私はGoのコルーチンの実装に精通しており、Pythonが同じことを実行することを望んでいました。その場合、上記のリンクで私が思いついたコードはうまくいきました。それができなかったので、私は今、その理由を理解しようとしています。これまでの私の推測は次のとおりです。間違っている箇所を修正してください。 フォームのプロシージャ定義は、async def foo(): ...実際にはクラスを継承するメソッドとして解釈されますcoroutine。 おそらく、async def実際にはawaitステートメントによって複数のメソッドに分割され、これらのメソッドが呼び出されるオブジェクトは、これまでの実行を通じて行われた進行状況を追跡できます。 上記が真の場合、基本的に、コルーチンの実行は、いくつかのグローバルマネージャー(ループ?)によるコルーチンオブジェクトのメソッドの呼び出しに要約されます。 グローバルマネージャーは、I / O操作がPython(のみ?)コードによっていつ実行されるかをどうにか(方法?)認識しており、現在実行中のメソッドが制御を放棄した後に実行する保留中のコルーチンメソッドの1つを選択できます(awaitステートメントのヒット))。 言い換えると、これは、いくつかのasyncio構文をよりわかりやすいものに「脱糖」するための私の試みです。 async def coro(name): print('before', name) await asyncio.sleep() print('after', name) asyncio.gather(coro('first'), coro('second')) # translated from async def coro(name) class Coro(coroutine): def before(self, name): print('before', name) def after(self, name): print('after', name) def __init__(self, name): self.name …


4
他のファイルで使用する外部Pythonコードを含める方法は?
ファイルにメソッドのコレクションがある場合、それらのファイルを別のファイルに含める方法はありますが、プレフィックス(つまり、ファイルのプレフィックス)なしで呼び出す方法はありますか? だから私が持っている場合: [Math.py] def Calculate ( num ) 次のように呼び出すにはどうすればよいですか。 [Tool.py] using Math.py for i in range ( 5 ) : Calculate ( i )
117 python 



8
DjangoサイトでHTMLをPDFにレンダリング
私のdjangoベースのサイトでは、動的なHTMLページをPDFに変換する簡単なソリューションを探しています。 ページには、Google Visualization APIのHTMLとチャートが含まれます(JavaScriptベースですが、これらのグラフを含めることは必須です)。

13
sklearnからのインポート時のImportError:名前check_buildをインポートできません
sklearnからインポートしようとすると、次のエラーが発生します。 >>> from sklearn import svm Traceback (most recent call last): File "<pyshell#17>", line 1, in <module> from sklearn import svm File "C:\Python27\lib\site-packages\sklearn\__init__.py", line 16, in <module> from . import check_build ImportError: cannot import name check_build 私はpython 2.7、scipy-0.12.0b1スーパーパック、numpy-1.6.0スーパーパック、scikit-learn-0.11を使用しています。 私はこの問題のいくつかの回答を確認しましたが、どれもこのエラーを回避する方法を提供しません。

10
インデックスによるPython辞書の要素へのアクセス
のような口述を考えてください mydict = { 'Apple': {'American':'16', 'Mexican':10, 'Chinese':5}, 'Grapes':{'Arabian':'25','Indian':'20'} } たとえば、この辞書の特定の要素にアクセスするにはどうすればよいですか?たとえば、Appleの最初の要素をフォーマットした後に最初の要素を印刷したいのですが、この場合は「アメリカ」のみですか? 追加情報上記のデータ構造は、Python関数で入力ファイルを解析することによって作成されました。ただし、一度作成すると、その実行については同じままです。 このデータ構造を関数で使用しています。 したがって、ファイルが変更された場合、次にこのアプリケーションを実行したときのファイルの内容は異なるため、このデータ構造の内容は異なりますが、形式は同じです。ですから、私の関数では、Appleの最初の要素が 'American'などであることを知らないので、 'American'をキーとして直接使用することはできません。
117 python  dictionary 

4
文字列ソースからのPython xml ElementTree?
ElementTree.parseはファイルから読み取りますが、すでに文字列にXMLデータがある場合、これをどのように使用できますか? ここに何か足りないかもしれませんが、文字列をファイルに書き込んで再度読み取らずにElementTreeを使用する方法が必要です。 xml.etree.elementtree
117 python  xml 

5
Python:バインドされていないメソッドをバインドしますか?
Pythonで、それを呼び出さずにバインドされていないメソッドをバインドする方法はありますか? 私はwxPythonプログラムを書いていて、特定のクラスについて、すべてのボタンのデータをタプルのクラスレベルのリストとしてグループ化すると便利だと判断しました。 class MyWidget(wx.Window): buttons = [("OK", OnOK), ("Cancel", OnCancel)] # ... def Setup(self): for text, handler in MyWidget.buttons: # This following line is the problem line. b = wx.Button(parent, label=text).Bind(wx.EVT_BUTTON, handler) 問題は、のすべての値handlerがバインドされていないメソッドであるため、私のプログラムは壮大な炎で爆発し、私は泣きます。 比較的簡単で解決可能な問題であると思われる問題の解決策をオンラインで探していました。残念ながら何も見つかりませんでした。現在、私はfunctools.partialこれを回避するために使用していますが、バインドされていないメソッドをインスタンスにバインドし、それを呼び出さずに渡し続けるための、クリーンで健康的なPythonicの方法があるかどうか誰かが知っていますか?
117 python  class  methods  bind 

6
PyCharmでPythonバージョンを選択するにはどうすればよいですか?
PyCharm 1.5.4を使用していて、「ディレクトリを開く」オプションを使用してIDEでフォルダーのコンテンツを開きました。 Pythonバージョン3.2が選択されています(「外部ライブラリ」ノードの下に表示されます)。 PyCharmが代わりにそのバージョンを使用するように、(私のマシンにすでにインストールされている)別のバージョンのPythonを選択するにはどうすればよいですか?

4
Ctrl-CでPythonスクリプトを強制終了できない
次のスクリプトでPythonスレッドをテストしています。 import threading class FirstThread (threading.Thread): def run (self): while True: print 'first' class SecondThread (threading.Thread): def run (self): while True: print 'second' FirstThread().start() SecondThread().start() これはKubuntu 11.10のPython 2.7で実行されています。Ctrl+ Cそれを殺すことはありません。また、システムシグナルのハンドラーを追加しようとしましたが、それは役に立ちませんでした: import signal import sys def signal_handler(signal, frame): sys.exit(0) signal.signal(signal.SIGINT, signal_handler) プロセスを強制終了するには、Ctrl+ Zでプログラムをバックグラウンドに送信した後、PIDで強制終了します。これは無視されません。なぜCtrl+ Cはそんなに永続的に無視されるのですか?どうすればこれを解決できますか?
117 python  linux 

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