2017-08-29 22 views
0

2つの引数をとる2つの関数があります。 最初の関数aは、2つの引数(整数)の結合結果を出力し、2番目の関数bは、空白で区切られた2つの引数を出力します。2つの引数を持つ2つの関数を結合する関数を返す方法

だから私はa(1,2)を実行した場合、それは私がlambda x, y : (a(x,y), b(x,y)) としてラムダを返す関数を作成してみました をプリントアウトします3しばらくb(1,2)をプリントアウトしますが、私はそれを試してみたとき、それは何も印刷されませんでしたでる。

この関数の中には独自のprintがありますので、ラムダを作成するときに結果を出力してからスーパー関数を返すはずです。

def a(c, d): 
    print('*', a) 
    return total 

def b(c, d): 
    print('**', b) 
    return echo 

def both(f, g): 
    return lambda x, y: (a(x, y), b(x, y)) 
+1

'both'は2つの関数を取り、それらの両方を呼び出す関数を返すか、2つの整数をとり、' a'と 'b'を両方とも呼びますか?あなたはあなたが行っていたオプションを混在させたようです。 – user2357112

+1

サンプルコードの関数は、テキストの内容を行いません。サンプルコードを投稿すると、それはあなたの質問に関連するはずです。 – Tomalak

+0

戻ってくると同時にそれを実行するはずです – Cal

答えて

1

lambda関数は実際には呼び出されません。 both関数から返されたときに保存する必要があります。それから、あなたはそれを呼び出すことができます。ここで

は例です:

super_function = both(1, 2) 
super_function(1, 2) 

あり、あなたのロジックで他のエラーの無数のだが、それはあなたの問題を「解決」します。

1

あなたのやりたいことが明確ではありません。これは私がそれを理解する方法です。

説明したように、関数abを定義しました。

def a(c, d): 
    return c+d 

def b(c, d): 
    return '%s %s'%(c,d) 

class Bothは、同様に定義されたパラメータセットを有する2つの機能の定義を保持する。 __call__メソッドは、2つのタプルと同じパラメータリストの2つの関数の結果を返します。

class Both: 
    def __init__(self, f, g): 
     self.f = f 
     self.g = g 
    def __call__ (self, *args): 
     return (self.f(*args),self.g(*args)) 

これらの最終行は、classを使用するわずかに2つの異なる方法です。

both = Both(a,b); print (both(1,2)) 

print (Both(a,b)(3,5)) 
関連する問題