SORU
13 EKİM 2008, PAZARTESİ


Python bir işlevi alır anahtar kelime argümanlar sayabilir misiniz?

Anahtar kelime argümanlar örneğin.... gibi anahtar/değer geçmek için ihtiyacım olan bir dict var

d_args = {'kw1': 'value1', 'kw2': 'value2'}
example(**d_args)

Bu iyi çalışıyoramaeğer example işlevi tarafından kabul edilmeyen d_args, dict değerleri varsa, örneğin, eğer fonksiyonu def example(kw2): olarak tanımlanan belli ki.. Demek ölür

Bu bir sorun beri bilmiyorum kontrol de nesil d_args example fonksiyon.. ikisi de gelip, dış modülleri ve example sadece kabul bazı anahtar kelime argümanlar gelen dict..

İdeal sadece yaparım

parsed_kwargs = feedparser.parse(the_url)
valid_kwargs = get_valid_kwargs(parsed_kwargs, valid_for = PyRSS2Gen.RSS2)
PyRSS2Gen.RSS2(**valid_kwargs)

Muhtemelen dict, anahtar kelime argümanlar, ama merak ettim: geçerli bir liste filtreProgramlama yoluyla listesine bir şekilde anahtar kelime argümanlar belirli bir fonksiyon alır var mı?

CEVAP
13 EKİM 2008, PAZARTESİ


Kodu doğrudan nesne teftiş ve değişken çalışma dışarı daha iyi kullanmak için modülü kontrol edin.

>>> import inspect
>>> def func(a,b,c=42, *args, **kwargs): pass
>>> inspect.getargspec(func)
(['a', 'b', 'c'], 'args', 'kwargs', (42,))

Eğer argüman olarak belirli bir dizi ile çağrılabilir bilmek istiyorsanız, varsayılan belli olmadan argümanlar gerekir. Bu var olabilir.

def getRequiredArgs(func):
    args, varargs, varkw, defaults = inspect.getargspec(func)
    if defaults:
        args = args[:-len(defaults)]
    return args   # *args and **kwargs are not required, so ignore them.

O zaman belli bir dict eksik ne anlatacak bir fonksiyonudur:

def missingArgs(func, argdict):
    return set(getRequiredArgs(func)).difference(argdict)

Benzer şekilde, geçersiz bir argüman olarak denetlemek için kullanın:

def invalidArgs(func, argdict):
    args, varargs, varkw, defaults = inspect.getargspec(func)
    if varkw: return set()  # All accepted
    return set(argdict) - set(args)

Ve eğer öyleyse çağrılabilir ise tam bir test

def isCallableWithArgs(func, argdict):
    return not missingArgs(func, argdict) and not invalidArgs(func, argdict)

(Bu kadar python'un arg ayrıştırma olarak sadece iyidir. Kwargs geçersiz değerler için herhangi bir çalışma zamanı denetimleri açıkça tespit edilemez.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ampisound

    Ampisound

    12 Kasım 2006
  • 趣味そうこ♪

    趣味そう

    3 Mart 2010
  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006