2016-08-01 6 views
-1

Cherrypyを使用しているときに、このコメント行が表示されました。 "単一の項目リストを反復処理することは、長い文字列のすべての文字を反復処理するよりもはるかに高速であるため、文字列はリストにラップされます。 これは にありますhttps://github.com/cherrypy/cherrypy/blob/master/cherrypy/lib/encoding.py#L223 私はいくつかの研究をオンラインで行っていますが、私はまだresponse.bodyを[response.body]として包む理由を十分に理解していません。 ?誰も私にこのデザインの詳細を教えてもらえますか?長い文字列を繰り返し処理するよりも速く単一の項目リストを反復処理しますか? #Python #Cherrypy

+0

デコードの意味ですか?私はまだプロセス(['sameblarblar'])がプロセス( 'sameblarblar')よりも速いのかどうかわかりません。その答えは、コメントが正しいと仮定すると、「プロセス」が入力を処理する方法にある必要があります。しかし具体的には、それは何ですか? – JoeyZhao

+0

この質問をする別の方法は、文字列をリストに入れることによって、文字列Aを通過する労力を避けることができる場合です。 – JoeyZhao

+0

あなたが与えた同じ例を使用するには、 'lotsofstuff'の中のものを実行する必要がある場合:この事をしてください、 '[' lotsofstuff ']のもののためにあなたはどのように役立ちますか? 'もの'のケア#noエスケープ、唯一の余分なステップ '?? – JoeyZhao

答えて

2

コードがそのコメントの前にあると認識した場合、self.bodyは単一の文字列または多数の文字列を含む繰り返し可能なシーケンスのいずれかになります。他のコードでは、それを後者として使用します(反復処理し、項目を文字列で処理する)。

技術的には、後のコードループを単一の文字列の文字に渡すことはできますが、文字ごとにデータを処理することは効率が悪い可能性があります。したがって、コメントの下のコードは、一度にすべて処理されるように、単一の文字列の周りにリストをラップします。

+0

コードでは、本体は 'basestring'(cherrypy 3)または 'text_or_bytes'(cherrypy 5)でなければなりません。したがって、 'a'、 'b'、 'c']または['abc']を 'a'と比較するのではなく、 'a'と 'a'を比較するだけです。 – JoeyZhao

+2

'self.body self.body:の 'chunk 'のためにファイル' all do 'に'。つまり、本体をループし、文字列である 'チャンク 'を得ることを期待しています(通常、行はループの最初の行にあるテキストであることをテストします)。それぞれのチャンクで実行する操作は、1つのチャンクが多い場合よりも1つの大きなチャンクがあれば効率的です。パフォーマンスの差はそれほど大きくないかもしれないので、このコードの実装の詳細について学ぶために多大な労力をかけていることはわかりません。 – Blckknght

+0

ありがとうございました。これはたぶん唯一の説明だと思います。 – JoeyZhao

関連する問題