Pythonでメソッドのデフォルト引数値にプログラムでアクセスするにはどうすればよいですか?例えば、私はtest
内の文字列'Foo'
にアクセスする方法を次Pythonのデフォルト引数値へのアクセス
def test(arg1='Foo'):
pass
で?
Pythonでメソッドのデフォルト引数値にプログラムでアクセスするにはどうすればよいですか?例えば、私はtest
内の文字列'Foo'
にアクセスする方法を次Pythonのデフォルト引数値へのアクセス
def test(arg1='Foo'):
pass
で?
彼らは秒です。
+1:これ!できます。 –
RicardoCárdenesが正しい方向にあります。実際には関数test
test
の方がはるかに扱いにくくなるでしょう。 inspect
モジュールは、あなたを取得しますが、醜いことになるだろう:Python code to get current function into a variable?
結局のところ、あなたが関数内test
を参照することができます。
def test(arg1='foo'):
print test.__defaults__[0]
はfoo
をプリントアウトします。
>>> test()
foo
>>> other = test
>>> other()
foo
>>> del test
>>> other()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in test
NameError: global name 'test' is not defined
だから、あなたの周りのこの機能を渡しする予定がある場合は、あなたが本当にinspect
ルートを移動する必要がある場合があります:(
私もそのような印象を受けていましたが、私の答えに対するリカルドのコメントで指摘されているように、 'test'は' test'のローカルスコープにあります。 –
知っておきたいこと!それを反映するために私の答えを更新! –
def test2()を実行すると:locals()、 '\ n \ n'、globals() 'を出力すると、' test2'はグローバルにあり、ローカルには何もありません。 –
これは:しかし、唯一の限りtest
が実際に定義された通り、動作しますtest
に参照のうえ(すべての)非常にエレガントではありませんが、それはあなたが欲しいものを行います。
def test(arg1='Foo'):
print(test.__defaults__)
test(arg1='Bar')
すぎのPython 3.xの持つ作品
なぜ 'globals()'ですか? 'test'は独自のスコープでローカルなので、その必要はありません。 –
@RicardoCárdenes、そうです。私はそれを知らなかった、ありがとう。今すぐ修正する。 –
test.func_defaults
にtoredは考えてみましょう:
def test(arg1='Foo'):
pass
In [48]: test.func_defaults
Out[48]: ('Foo',)
.func_defaults
は、引数は、あなたのコード内で表示される順序で、シーケンスとして、あなたのデフォルト値を示します。どうやら、func_defaults
のpython 3
'func_defaults'はPython 2.xでしか動作しないと思います。 '__defaults__'はPython 2.7と3.2で動作するようです。 –
@RobWouters:知っておいてよかったですが、私は決してPython 3を使用しませんでした。 – Marcin
で削除された可能性があり
は、あなたがそれをやりたい理由を証明する例を提供することはできますか? – Kevin
'arg1'と入力するだけではないのですか? –
'test'を呼び出すときに' arg1'を指定しないと、 'arg1'はデフォルトで' 'Foo''になります – TyrantWave