2016-04-14 15 views
8

İnsanlar nedeniyle Python C-düzey API'ler geliştirilen bir şekilde, kendi bağımsız değişkenler için yerleşik işlevleri ve yöntemlerin aslında yok adlarının bir sürü a2 Anahtar kelime bağımsız değişkeniyle çağrılamayan yerleşik işlevlerin tam listesi var mı?

olduğunu, cevapları a1 belirtilen.

Gerçekten rahatsız edici bir neden buldum, doktora bakarak bunu bilmem mümkün değil. Örneğin,

eval (ifade, globaller = Yok, halk = Yok) için

Sonra kod

print(eval('a+b', globals={'a':1, 'b':2})) 

bu çizgiyi yazmış ve TypeError: eval() takes no keyword arguments aldık. Yani bu tür fonksiyonların tam bir listesi var mı? Bir fonksiyonun anahtar kelime argümanlarına sahip olmasına izin verileceğini nasıl bilebilirim?

>>> eval.__text_signature__ 
'($module, source, globals=None, locals=None, /)' 

veya

>>> abs.__text_signature__ 
'($module, x, /)' 
>>> abs(x=5) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: abs() takes no keyword arguments 

(x bir anahtar kelime argüman olarak kullanılamaz)

/: yerleşik fonksiyonun __text_signature__ inceleyebilir Python 3.5 olarak

+0

Sadece bu değil, bununla ilgili hatalar var, 'sıralanmış (iterable = []) 'vs sıralanmış (iterable = None)' seçeneğini deneyin. –

+1

Sanırım tüm bu "tuzaklar" aslında hatalar ve rapor edilmelidir: her ikisi de "sıralanmış()" ve belgelenen ancak kabul edilmeyen anahtar kelime argümanları. (Fwiw PyPy genellikle anahtar kelime argümanlarını kabul eder.) –

+0

IIRC bildirilmiştir. (Ben hata izleyiciden okudum sanırım) –

cevap

4

Bu, aşağıdaki argümanların anahtar kelime argümanları olarak kullanılabileceği anlamına gelir. Bakınız:

>>> compile.__text_signature__ 
'($module, /, source, filename, mode, flags=0,\n  dont_inherit=False, optimize=-1)' 
>>> compile(source='foo', filename='bar', mode='exec') 
<code object <module> at 0x7f41c58f0030, file "bar", line 1> 

Tabii bile 3,5 hatalar vardır: iterable olarak iterable bir anahtar kelime argüman olarak kullanılamaz sonra

>>> sorted.__text_signature__ 
'($module, iterable, key=None, reverse=False)' 

, orada gerektiğini issue 26729 in the Python bug tracker göre / olmak bile.


Bu bilgi Python belgelerinin kendisinde bulunmamaktadır.

İlgili konular