ホームページ  >  記事  >  バックエンド開発  >  Pythonのitems()シリーズ関数の使い方を詳しく解説

Pythonのitems()シリーズ関数の使い方を詳しく解説

Y2J
Y2Jオリジナル
2017-05-17 15:11:3714309ブラウズ

この記事では、Python の関数の items() 系列の使い方を中心に紹介します。必要な方は参考にしてください。 Python の関数は Python プログラミングに非常に役立ちます。具体的な分析は次のとおりです:

まず例を見てみましょう:

import html  # available only in Python 3.x 
def make_elements(name, value, **attrs): 
  keyvals = [' %s="%s"' % item for item in attrs.items()] 
  attr_str = ''.join(keyvals) 
  element = &#39;<{name}{attrs}>{value}</{name}>&#39;.format( 
      name = name, 
      attrs = attr_str, 
      value = html.escape(value)) 
  return element 
make_elements(&#39;item&#39;, &#39;Albatross&#39;, size=&#39;large&#39;, quantity=6) 
make_elements(&#39;p&#39;, &#39;<spam>&#39;)

このプログラムの機能は非常に単純で、

HTML タグ

を生成することです。HTML モジュールは Python 3.x でのみ使用できることに注意してください。 。 タグ

attributes

list を生成する keyval の辞書型 変数 が 2 つの %s が 1 つの項目に対応するという興味深い方法で構築されていることに今気づきました。 そこで、関連情報を確認したところ、多くのことがここにまとめられています。 注: 以下のすべての Python インタープリターで使用されるバージョンについては、2.x は 2.7.3 に対応し、3.x は 3.4.1 に対応します

Python 2.x では、公式ドキュメントの items メソッドは次のように説明されています: 次のような (キー, 値) ペアのリストを生成します:

>>> d = {&#39;size&#39;: &#39;large&#39;, &#39;quantity&#39;: 6} 
>>> d.items() 
[(&#39;quantity&#39;, 6), (&#39;size&#39;, &#39;large&#39;)]

search

のプロセスで、stackoverflow でこの質問を偶然見ました: What is theDifference between dict.items() と dict.iteritems( )? 、最初の答えは大まかにこれを意味します: 「最初は items() は上記のような dict のすべての要素を含むリストを返しましたが、これはメモリの無駄が多すぎるため、後で追加されました (注: Python では関数のグループ2.2 で登場し始めた iteritems()、iterkeys()、および itervalues() はメモリを節約するためにイテレータを返すために使用されますが、3.x では items() 自体がそのようなイテレータを返すため、3.x では

. x の items() の動作

は、2 の iteritems() の動作と一致しています。このステートメントは、3.x の items() の動作が 2.x の iteritems() とは異なることに注意してください。実際には、「完全なシーケンス プロトコル オブジェクト」を返します。この

オブジェクトは、dict の変更を反映できます。その後、3.x の動作との一貫性を保つために、別の関数 viewitems() が Python 2.7 に追加されました。コメント内のステートメントを確認するために、次のテストを実行しました。使用されているテスト Python バージョンに注意してください:

テスト 1 (Python 2.7.3):

Python 2.7.3 (default, Feb 27 2014, 19:58:35)  
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d = {&#39;size&#39;: &#39;large&#39;, &#39;quantity&#39;: 6} 
>>> il = d.items() 
>>> it = d.iteritems() 
>>> vi = d.viewitems() 
>>> il 
[(&#39;quantity&#39;, 6), (&#39;size&#39;, &#39;large&#39;)] 
>>> it 
<dictionary-itemiterator object at 0x7fe555159f18> 
>>> vi 
dict_items([(&#39;quantity&#39;, 6), (&#39;size&#39;, &#39;large&#39;)])
テスト 2 (Python 3.4.1):
Python 3.4.1 (default, Aug 12 2014, 16:43:01)  
[GCC 4.9.0] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d = {&#39;size&#39;: &#39;large&#39;, &#39;quantity&#39;: 6} 
>>> il = d.items() 
>>> it = d.iteritems() 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
AttributeError: &#39;dict&#39; object has no attribute &#39;iteritems&#39; 
>>> vi = d.viewitems() 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
AttributeError: &#39;dict&#39; object has no attribute &#39;viewitems&#39; 
>>> il 
dict_items([(&#39;size&#39;, &#39;large&#39;), (&#39;quantity&#39;, 6)])

Python 3.x では iteritems() と viewitems() が廃止され、item() で得られる結果は 2.x の viewitems() と一致していることがわかります。

2.x では、iteritems() と viewitems() によって返されるコンテンツは、以下に示すように for を使用して走査できます

>>> for k, v in it: 
...  print k, v 
...  
quantity 6 
size large 
>>> for k, v in vi: 
...  print k, v 
...  
quantity 6 
size large

2 つの違いは何ですか? viewitems() は、ディクショナリ内の変更を反映できるビュー オブジェクトを返します。たとえば、上の例では、2 つの変数 it と vi を使用する前にキーと値の組み合わせを d に追加すると、違いが簡単にわかります。 。

>>> it = d.iteritems() 
>>> vi = d.viewitems() 
>>> d[&#39;newkey&#39;] = &#39;newvalue&#39; 
>>> d 
{&#39;newkey&#39;: &#39;newvalue&#39;, &#39;quantity&#39;: 6, &#39;size&#39;: &#39;large&#39;} 
>>> vi 
dict_items([(&#39;newkey&#39;, &#39;newvalue&#39;), (&#39;quantity&#39;, 6), (&#39;size&#39;, &#39;large&#39;)]) 
>>> it 
<dictionary-itemiterator object at 0x7f50ab898f70> 
>>> for k, v in vi: 
...  print k, v 
...  
newkey newvalue 
quantity 6 
size large 
>>> for k, v in it: 
...  print k, v 
...  
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
RuntimeError: dictionary changed size during iteration

3 行目で、新しい要素を d に挿入しました。vi はトラバースを続行でき、新しいトラバースは d の変更を反映できますが、トラバース時にエラー メッセージが表示され、トラバース時に辞書を求めるプロンプトが表示されます。サイズが変更され、横断は失敗しました。


要約すると、2.x では当初 items() メソッドが使用されていましたが、メモリの無駄が多すぎるため、3.x では item( の動作を返すために iteritems() メソッドが追加されました。 ) 返されるオブジェクトが元の辞書の変更も反映できるように、ビュー オブジェクトを返すように変更されました。同時に、viewitems() の下位互換性機能が 2.7 で追加されました。

3.x では、 items() メソッドが 1 つだけ保持されるため、3 つの違いについて心配する必要はありません。

この記事で説明されている例は、皆さんの Python プログラミングにとって一定の参考になると思います。

【関連する推奨事項】


1.

特別な推奨事項

:

「php Programmer Toolbox」V0.1 バージョンのダウンロード

2. Python の無料ビデオチュートリアル3. items() メソッド

4. Pythonのitem()関数を使用した辞書の走査例

5. 辞書にアクセスする3つの方法を紹介します

6.sortedのitemsとitemsの違い

以上がPythonのitems()シリーズ関数の使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。