2016-03-23 30 views
1

Bir lambda'nın fonksiyon argümanı olarak kaç argüman alabileceğini belirleme olanağı var mıdır? ÖrneğinPython, bir argüman işlevi olarak lambda argümanlarını belirtir

: k standart lamda değilse

def func(k=lambda x:return x**2): 
    return k 

i, belirtebilir misiniz o k tam olarak bir argüman almak gerekiyordu?

Max

+0

Neden bir argüman olarak bir lamda alıyorsunuz? Ayrıca sorunuzda ne var geçerli python değil –

+0

Ayrıca yeterince args ile lambda arayarak hata sadece –

cevap

6

Sen inspect.getargspec kullanarak böyle bir şey yapabileceğini: Yukarıdaki irade gibi bir şey ile başarısız sefil olduğunu

import inspect 
def func (k = lambda x: x ** 2): 
    if not callable(k) or len(inspect.getargspec(k).args) != 1: 
     raise TypeError('k must take exactly one argument.') 
    # Do whatever you want 

Not (bu olmamalı iken):

func (lambda x, y = 8: x + y) 

... bu durumda, bu davayı ele almak isterseniz biraz daha karmaşık bir şeye ihtiyacınız olacak:

import inspect 
def func (k = lambda x: x ** 2): 
    if not callable(k): 
     raise TypeError('k must be callable.') 
    argspec = inspect.getfullargspec(k) 
    nargs = len(argspec.args) 
    ndeft = 0 if argspec.defaults is None else len(argspec.defaults) 
    if nargs != ndeft + 1: 
     raise TypeError('k must be callable with one argument.') 
    # Do whatever you want 
+0

yakalayabiliyordu böylece çok teşekkür ederim! –

İlgili konular