2009-05-15 9 views
1

私はいくつかの出力を持つ関数を持っています。これらはすべて "ネイティブ"つまり整数と文字列です。たとえば、文字列を解析して単語の数と単語の平均長さの両方を見つける関数があるとします。Python初心者:Pythonで複数のInt/String結果を返す

C/C++では、関数に2つのパラメータを渡すために@を使用します。 Pythonでは、整数と文字列は参照渡しではなく値渡しであるため(少なくともこれは試行錯誤で理解できるものです)、次のコードは機能しません:

def analyze(string, number_of_words, average_length): 

    ... do some analysis ... 

    number_of_words = ...  
    average_length = ... 

上記の場合、関数の範囲外の値は変更されません。私は現在やっていることはそうのような辞書を使用している:

def analyze(string, result): 

    ... do some analysis ... 

    result['number_of_words'] = ...  
    result['average_length'] = ... 

をそして私は、このような関数を使用します。ただし

s = "hello goodbye" 
result = {} 
analyze(s, result) 

、右感じることはありません。これを実現するPythonの正しい方法は何ですか?私は関数が数十の結果ではなく2-3の結果を返す場合のみを指していることに注意してください。また、私は、Pythonへの完全な初心者ですので、私は、私はここに些細な何かが欠落している可能性があり知っている...

おかげ

+0

についてhttp://www.google.com/url?sa=t&source=web&ct=res&cd=1&url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FPython_syntax_and_semantics&ei=Q-oNSoG9C4resgajkY2ICA&usg=AFQjCNG_HE4ZKmUPGvVh9_SqhnJdMdYxaA&sig2=5h95J4BFgltEby5aDtEL0gを参照してください。 "オブジェクト参照による呼び出し" – tzot

答えて

17

Pythonはあなたがfollwing行うことができますreturn文があります。

def func(input): 
    # do calculation on input 
    return result 

s = "hello goodbye" 
res = func(s)  # res now a result dictionary 

をしかし、あなたはあなたがそうのようないくつかの値を返すことができ、全くresultを持っている必要はありません。

def func(input): 
    # do work 
    return length, something_else   # one might be an integer another string, etc. 

s = "hello goodbye" 
length, something = func(s) 
+0

これは私が探していたものです、ありがとう! –

0

あなたは両方向にメソッドの引数を使用する必要がある場合は、引数をカプセル化することができますクラスとオブジェクトをメソッドに渡し、メソッドがそのプロパティを使用するようにします。

+0

この特定の場合を除いて、Pythonでは整数と文字列は不変です。 – mipadi

3

あなたは、このようにあなたの関数で変数を返す場合:

def analyze(s, num_words, avg_length): 
    # do something 
    return s, num_words, avg_length 

そして、あなたが渡されたパラメータ更新するには、このようにそれを呼び出すことができます。

s, num_words, avg_length = analyze(s, num_words, avg_length) 

をしかし、あなたの例の機能のために、これはより良いでしょう:あなたはパラメータを変更していないPythonで

def analyze(s): 
    # do something 
    return num_words, avg_length 
1

C/C++の方法で(参照渡しやポインタを使って変更を行う)in situ)。文字列オブジェクトがPythonで変更できないなどの理由があります。適切なことは、変更されたパラメータを(SilentGhostが示唆しているように)タプルで返し、変数を新しい値に再バインドすることです。

関連する問題