[解決済み] Python、可変長の位置引数の後のデフォルトのキーワード引数
2023-05-25 06:30:04
質問
Python 2の関数呼び出しで、可変長の位置指定パラメータの後に名前付きパラメータを使えると思ったのですが、そのパラメータを使うと
SyntaxError
を使用すると、Pythonのクラスをインポートする際に 例えば以下の"get"メソッドで書いているのですが。
class Foo(object):
def __init__(self):
print "You have created a Foo."
def get(self, *args, raw=False, vars=None):
print len(args)
print raw
print vars
エラーの内容は以下のようになります。
def get(self, *args, raw=False, vars=None):
^
SyntaxError: invalid syntax
メソッドを何通りか呼び出せるようにしたい。
f = Foo()
f.get(arg1, arg2)
f.get(arg1, raw=True)
f.get(arg1, arg2, raw=True, vars=something)
など
どのように解決するのですか?
動作しますが、Python 3 のみです。PEP を参照してください。
3102
. What's new"のドキュメントをちらっと見たところ、2.xのバックポートがないようなので、運が悪いですね。キーワード引数 (
**kwargs
) を受け取り、手動でパースする必要があります。あなたは
d.get(k, default)
のどちらかを取得するために
d[k]
または
default
がない場合は から引数を取り除くには
kwargs
から引数を取り除くには、例えばスーパークラスのメソッドを 呼び出す前に
d.pop
.
なお
def get(self, *args, raw=False, vars=None):
は
raw=False
と
vars=None
はキーワード引数とは何の関係もありません。これらはデフォルトの引数値です。デフォルト値を持つ引数は位置的に渡すことができ、デフォルト値を持たない引数はキーワードで渡すことができます。
def f(a=1): pass
f(2) # works, passing a positionally
def f(a): pass
f(a=2) # works, passing a by keyword
同様に、キーワードのみの引数はデフォルト値を持つ必要はありません。の後に来る
*args
引数の後にあることが、デフォルト値の存在ではなく、キーワードのみの引数であることを示します。
def f(*args, a): pass
# a is a mandatory, keyword-only argument
関連
-
[解決済み] Pythonの変数が関数であるかどうかを検出するにはどうすればよいですか?
-
[解決済み] Argparse オプションの位置引数?
-
[解決済み] 名前付きタプルおよびオプションのキーワード引数のデフォルト値
-
[解決済み] C++で引数の数が可変?
-
[解決済み] 引数を可変個数でまわす
-
[解決済み】C言語のデフォルト引数
-
[解決済み】通常引数 vs キーワード引数
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?