2011-12-23 12 views
2

私はdpktで次の手順を実行しますPython IDLEでは、 'print'ing a variableと変数を書くだけの違いは何ですか? IDLEインタプリタで

for ts, buf in pcap: 
    eth = dpkt.ethernet.Ethernet(buf) 

を今、私は「ETHは、」私はそれを印刷、または単に変数名を書くことができるいずれかの内容を確認しようとします。

私は:

print eth 

私が手:

O&áÿE(r @,òÀ¨ 
DYP?Jò}PªpÉ 

しかし、私は単純に書くとき:

eth 

私はより多くの期待される出力を得る:

Ethernet(src='<removed>', dst='<removed>', data=IP(src='<removed>', off=16384, dst='<removed>', sum=11506, len=40, p=6, ttl=128, id=29344, data=TCP(seq=2527752393, ack=218580057, win=16202, sum=62077, flags=16, dport=80, sport=51626))) 

私の質問は、「印刷(変数)」と変数名の作成との基本的な違いは何ですか?私は単純な代入を行う場合(すなわち、「X = 100」)私は、「100」、「印刷X」の両方に「×」

+0

「[>>> some_object'とPythonインタプリタの>>>> some_object'の違いは何ですか?](http://stackoverflow.com/questions/7114675/what-is-the -difference-some-object-and-print-some-object-in) –

+0

これは上記の質問の複製です。 IDLEのシェルは、対話型のPythonをコンソールウィンドウに近似しています。 IDLEは入力した内容をPythonに送り、Pythonから返された結果を表示します。 –

答えて

9

print(variable)

一方 print(str(variable))

に等しい結果を得るでしょう

variable私の推測では、クラスの__repr____str__方法はdpkt.ethernet.Ethernetは、これらの完全に異なる結果を生成することであるprint(repr(variable))

に等しいです。

更新日:the source codeを見ると、私は正しいことが分かります。

+0

優秀、ありがとう – Rauffle

+0

私はもともと、この質問に 'dpkt'タグを追加しようとしましたが、それは新しいタグになり、新しいタグを追加するために1500+の評判が必要であるためにできませんでした。私の質問へのあなたの答えが1500人を超えるあなたの答えを見ているように、あなたは私の質問に「dpkt」タグを追加することができますか? – Rauffle

+0

私はそれが適切だとは思わない。 'str' /' repr'は純粋なpythonであり、 'dpkt'とは関係ありません。あなたは 'dpkt.ethernet.Ethernet'を印刷するために質問するように質問を言い換えることができます、それは私の目には適切かもしれません... – gecco

2

データを文字列として表すには、repr()str()の2つの関数があります。

printステートメントを使用すると、printステートメントに指定した引数(および結果の末尾に改行が追加されます)には、str関数が呼び出されます。たとえば、x = 100; print xはstr(x)を呼び出します。結果( "100")に改行が追加され、stdoutに送信されます。

printステートメント以外を実行すると、値がNoneでない限り、式はreprを使用して何らかの値を出力します。この場合、何も出力されません。

ほとんどの場合、2つの間に微妙な違いがあります。しかし、オブジェクトはしばしば、独自の非同一の__str____repr__メソッド(そのオブジェクトの組み込み関数strreprの動作を定義します)を定義します。あなたの例では、ethオブジェクトの__repr__メソッドは__str__メソッドと異なる必要があります。

__str__メソッドは、ネットワーク経由で送信するオブジェクトのバイナリ文字列表現を返していると推測しますが、わかりません。

関連する問題