[解決済み】Python関数の引数の数を調べるにはどうしたらいいですか?
質問
Pythonの関数の引数の数を調べるにはどうしたらいいですか?私はそれが持っているどのように多くの通常の引数とどのように多くの名前付き引数を知る必要があります。
例
def someMethod(self, arg1, kwarg1=None):
pass
このメソッドには2つの引数と1つの名前付き引数があります。
どのように解決するのですか?
以前から認められている回答は
非推奨
現在
Python 3.0
. を使う代わりに
inspect.getargspec
を選択する必要があります。
Signature
クラスがこれに取って代わった。
関数のシグネチャを作成するのは簡単です。
signature
機能
:
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
これで、そのパラメータを素早く表示するために
str
を入力します。
str(sig) # returns: '(self, arg1, kwarg1=None)'
また、属性名とパラメータオブジェクトの対応付けは
sig.parameters
.
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
さらに
len
で
sig.parameters
をクリックすると、この関数が必要とする引数の数も表示されます。
print(len(params)) # 3
の各エントリーは
params
マッピングは、実際には
Parameter
オブジェクト
という属性があり、さらに使いやすくなっています。例えば、パラメータを取得して、そのデフォルト値を表示することが簡単にできるようになりました。
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
に含まれる残りのオブジェクトについても同様です。
parameters
.
Pythonに関しては
2.x
ユーザは
inspect.getargspec
はない
非推奨ですが、この言語はもうすぐそうなります :-)。そのため
Signature
クラスが利用できないのは
2.x
シリーズを使用し、今後も使用することはありません。ですから、あなたはまだ
inspect.getargspec
.
Python 2 と 3 の間の移行についてですが、もしあなたが
getargspec
に切り替えると、Python 2の
signature
で
3
は難しすぎる。
という貴重な選択肢があります。
を使用することで
inspect.getfullargspec
. と似たようなインターフェイスを提供します。
getargspec
(呼び出し可能な単一の引数) を使って、関数の引数を取得することができます。
getargspec
にはない。
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
と同様に
getargspec
,
getfullargspec
が返されます。
NamedTuple
には引数が含まれます。
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
関連
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] バイトを文字列に変換する
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] 文字列が数値(float)であるかどうかを確認するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PicgoのイメージベッドツールをPythonで実装する
-
Python カメの描画コマンドとその例
-
Python jiabaライブラリの使用方法について説明
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
任意波形を生成してtxtで保存するためのPython実装
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み] 関数が受け取るキーワード引数をリストアップできますか?