web-dev-qa-db-ja.com

Python:印刷出力を変数に割り当てる

print関数(または任意の関数)の出力を変数に割り当てる方法を知りたいです。例を挙げると:

import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()

print tag.getArtistの出力を変数に割り当てるにはどうすればよいですか?

20
Willie Koomson

Python)のprintステートメントは、引数を文字列に変換し、それらの文字列を標準出力に出力します。

a = str(tag.getArtist())
22
Sven Marnach

おそらくstrreprまたはunicode関数のいずれかが必要です

somevar = str(tag.getArtist())

どのpython Shellを使用していますか

7

より一般的な質問に答えるにはhow to redirect standard output to a variable ?

以下をせよ :

from io import StringIO
import sys

result = StringIO()
sys.stdout = result
result_string = result.getvalue()

一部の機能でのみこれを行う必要がある場合は、次の手順を実行します。

old_stdout = sys.stdout  

# your function containing the previous lines
my_function()

sys.stdout = old_stdout
1
Arcyno

注意してください、私は_Python 3.x_に基づいてこの回答を書きました。このような変数に print() ステートメントを割り当てることができます。

_>>> var = print('some text')
some text
>>> var
>>> type(var)
<class 'NoneType'>
_

ドキュメントによると、

キーワード以外の引数はすべて str() doesのような文字列に変換され、sepで区切られ、その後にendが続くストリームに書き込まれます。 sepとendは両方とも文字列でなければなりません。 Noneにすることもできます。これは、デフォルト値を使用することを意味します。オブジェクトが指定されていない場合、print()は単にendを書き込みます。

ファイル引数は、write(string)メソッドを持つオブジェクトでなければなりません。存在しない場合、またはNoneの場合、 _sys.stdout_ が使用されます。印刷された引数はテキスト文字列に変換されるため、 print() はバイナリモードファイルオブジェクトでは使用できません。これらの場合は、代わりにfile.write(...)を使用してください。

そのため、変数に print() ステートメント値を割り当てることができません。この質問では、_(or any function)_を尋ねました。 print() は、戻り値がNoneの関数でもあります。 python function の戻り値はNoneです。ただし、関数を(かっこ()で)呼び出して、この方法で戻り値を保存することができます。

_>>> var = some_function()
_

そのため、var変数の戻り値はsome_function()またはデフォルト値Noneです。 print()All non-keyword arguments are converted to strings like str() does and written to the streamに関するドキュメントによると。 str() 内で何が起こるか見てみましょう。

オブジェクトの string バージョンを返します。オブジェクトが提供されない場合、空の文字列を返します。それ以外の場合、str()の動作は、次のように、エンコードまたはエラーが指定されているかどうかによって異なります。

文字列オブジェクトを取得したら、次のコード行を次のように変更できます。

_>>> var = str(some_function())
_

または、実際に string オブジェクトがある場合は、 str.join() を使用できます。

Iterableの文字列を連結した文字列を返します。 TypeError オブジェクトを含む反復不可能な文字列値がある場合、 bytes が発生します。要素間のセパレータは、このメソッドを提供する文字列です。

変更は次のようになります。

_>>> var = ''.join(some_function())  # you can use this if some_function() really returns a string value
_
0