Python'da bir yöntemin varsayılan argüman değerlerine nasıl programlanabilir? Örneğin, Python'daki varsayılan değişken değerlerine erişme
def test(arg1='Foo'):
pass
nasıl dize
test
içeride
'Foo'
erişebilir aşağıda bunlar?
Python'da bir yöntemin varsayılan argüman değerlerine nasıl programlanabilir? Örneğin, Python'daki varsayılan değişken değerlerine erişme
def test(arg1='Foo'):
pass
nasıl dize
test
içeride
'Foo'
erişebilir aşağıda bunlar?
Onlar ler vardır
+1: Bu! işe yarıyor. –
Ricardo Cárdenes doğru yolda. Aslında,test
'un test
işlevine ulaşılması çok daha zor olacaktır. inspect
modül size daha fazla alacak, ancak çirkin olacak: Sonradan anlaşıldı ki Python code to get current function into a variable?
, sen işlevi içinde test
başvurabilirsiniz:
def test(arg1='foo'):
print test.__defaults__[0]
foo
dışarı yazdırır. Ama sadece sürece test
aslında tanımlandığı gibi çalışacak test
atıfta: etrafta bu işlevi geçen niyetinde olmadığını
>>> 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
Yani, gerçekten inspect
rotayı :(
Bu izlenim altındaydım, Ricardo'nun cevabım hakkındaki yorumunda belirtildiği gibi, 'testin' testin yerel kapsamında olduğunu ortaya koyuyor. –
bilmek harika! cevabımı yansıtacak şekilde güncelledim! –
Eğer test2(): def: print locals(), '\ n \ n', globals() 'komutunu kullanırsak, 'test2' nin globals olduğunu ve yerlilerde hiçbir şey olmadığını görürüz. –
Bu gitmek gerekebilir (hiç) değil çok şık, ama ne istediğinizi yapar:.
def test(arg1='Foo'):
print(test.__defaults__)
test(arg1='Bar')
çok Python 3.x ile İşleri
Neden globals() '? 'test' kendi kapsamında yereldir, buna gerek yok. –
@ RicardoCárdenes, haklısınız. Bunu bilmiyordum, teşekkürler. Şimdi tamir ediyorum. –
test.func_defaults
yılında tored düşünün:
def test(arg1='Foo'):
pass
In [48]: test.func_defaults
Out[48]: ('Foo',)
.func_defaults
argümanlar kodunuzda göründükleri sırayla, bir dizi olarak, size varsayılan değerleri verir.
Görünüşe göre, func_defaults
sen bunu yapmak isteyebilirsiniz neden gösteren bir örnek verebilir
Bence func_defaults sadece Python 2.x üzerinde çalışıyor. __defaults__' Python 2.7 ve 3.2 üzerinde çalışıyor gibi görünüyor. –
@RobWouters: python 3'ü kullanmamama rağmen bilmem. – Marcin
piton 3'te kaldırılmış olabilir? – Kevin
Sadece "arg1" yazmayı değil mi demek istiyorsun? –
Eğer 'test' çağrılırken 'arg1' sağlamıyorsanız, 'arg1' varsayılan olarak '' Foo '' – TyrantWave