2012-01-10 14 views
5

Pythonでメソッドのデフォルト引数値にプログラムでアクセスするにはどうすればよいですか?例えば、私はtest内の文字列'Foo'にアクセスする方法を次Pythonのデフォルト引数値へのアクセス

def test(arg1='Foo'): 
    pass 

で?

+1

で削除された可能性があり

は、あなたがそれをやりたい理由を証明する例を提供することはできますか? – Kevin

+0

'arg1'と入力するだけではないのですか? –

+0

'test'を呼び出すときに' arg1'を指定しないと、 'arg1'はデフォルトで' 'Foo''になります – TyrantWave

答えて

14

彼らは秒です。

+0

+1:これ!できます。 –

2

RicardoCárdenesが正しい方向にあります。実際には関数testtestの方がはるかに扱いにくくなるでしょう。 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ルートを移動する必要がある場合があります:(

+0

私もそのような印象を受けていましたが、私の答えに対するリカルドのコメントで指摘されているように、 'test'は' test'のローカルスコープにあります。 –

+0

知っておきたいこと!それを反映するために私の答えを更新! –

+1

def test2()を実行すると:locals()、 '\ n \ n'、globals() 'を出力すると、' test2'はグローバルにあり、ローカルには何もありません。 –

0

これは:しかし、唯一の限りtestが実際に定義された通り、動作しますtestに参照のうえ(すべての)非常にエレガントではありませんが、それはあなたが欲しいものを行います。

def test(arg1='Foo'): 
    print(test.__defaults__) 

test(arg1='Bar') 

すぎのPython 3.xの持つ作品

+2

なぜ 'globals()'ですか? 'test'は独自のスコープでローカルなので、その必要はありません。 –

+0

@RicardoCárdenes、そうです。私はそれを知らなかった、ありがとう。今すぐ修正する。 –

4

test.func_defaultsにtoredは考えてみましょう:

def test(arg1='Foo'): 
    pass 

In [48]: test.func_defaults 
Out[48]: ('Foo',) 

.func_defaultsは、引数は、あなたのコード内で表示される順序で、シーケンスとして、あなたのデフォルト値を示します。どうやら、func_defaultsのpython 3

+4

'func_defaults'はPython 2.xでしか動作しないと思います。 '__defaults__'はPython 2.7と3.2で動作するようです。 –

+0

@RobWouters:知っておいてよかったですが、私は決してPython 3を使用しませんでした。 – Marcin

関連する問題