ホームページ > バックエンド開発 > Python チュートリアル > Pythonプログラミング:名前付きタプルの使い方のポイントを詳しく解説

Pythonプログラミング:名前付きタプルの使い方のポイントを詳しく解説

PHPz
リリース: 2023-04-11 21:22:16
転載
3530 人が閲覧しました

はじめに

この記事では、Python コレクション モジュールの紹介に引き続き、今回はその中の名前付きタプル、つまり、namedtuple の使用方法を主に紹介します。早速、始めましょう - いいね、フォロー、リツイートを忘れないでください~ ^_^

名前付きタプルの作成

Python コレクション内の名前付きタプル クラスnamedTuples がタプルです。各位置は以下を与えます。コードの意味を強調し、コードの読みやすさと説明を強化します。これらは通常のタプルが使用される場所であればどこでも使用でき、位置インデックスではなく名前によってフィールドにアクセスする機能を追加します。これは、Python 組み込みモジュール コレクションから取得されます。使用される一般的な構文は次のとおりです:

import collections
XxNamedTuple = collections.namedtuple(typename, field_names):
ログイン後にコピー

インポート方法が異なる場合 (例: コレクションを cAlias としてインポート、コレクションからインポートのnamedtuple、コレクションからインポートの名前付きタプルをNamedTuple など)、このように、名前付きタプル作成するサブクラス フォームは次のものに対応できます:

XxNamedTuple = cAlias.namedtuple(……)
XxNamedTuple = namedtuple(……)
XxNamedTuple = NamedTuple(……)
ログイン後にコピー

そのうち:

Parameter typename: 返される新しいタプル サブクラス XxNamedTuple の文字列クラス名を指定します。プロパティ検索、位置インデックス付け、反復を通じてアクセスできる関連フィールドを持つタプルのようなオブジェクトを作成するための新しいサブクラス。サブクラスのインスタンスには、便利な docstring (typename と field_names を含むヘルプ ドキュメントに相当) と、タプルの内容を name=value 形式でリストする便利な __repr__() メソッドもあります。

パラメータ field_names: は通常、['x', 'y'] などの一連の文字列です。オプションで、field_names には、「 x y 」や「 x, y 」など、スペースやカンマで区切られた対応するフィールド名を含む文字列を指定できます。

有効な Python 識別子は名前付きフィールド名として使用できますが、アンダースコア (_) で始めることはできません。有効な識別子には文字、数字、アンダースコアが含まれますが、数字やアンダースコアで始まることはできません。また、class、return、global、pass、raise などのキーワードは使用できません。

NamedTuple がどのように機能するかを理解するために、id、name、および age プロパティを持つ Employee オブジェクトがあると仮定しましょう。コード サンプル リストを参照してください:

Pythonプログラミング:名前付きタプルの使い方のポイントを詳しく解説

プログラムを実行した場合の出力は次のようになります:

Employee(, name='Solo Cui ', age='18')
按索引方式访问Employee的名子为 : Solo Cui
Employee(, name='Annie Kent', age='26')
按键(字段名)访问Employee的名子为 : Annie Kent
ログイン後にコピー

さらに、関数には他のいくつかのパラメーターがあります。名前付きタプルを作成する関数が使用されます。ここでは簡単に説明します。

パラメータの名前変更: rename が true の場合、無効なフィールド名は自動的に位置名に置き換えられます。たとえば、['abc', 'def', 'ghi', 'abc'] は ['abc', '_1', 'ghi', '_3'] に変換され、キーワード def と重複するフィールド名 abc が削除されます。 。

パラメータのデフォルト: None またはデフォルト値の反復可能なオブジェクトです。デフォルト値を持つフィールドはデフォルト値のないフィールドの後に出現する必要があるため、デフォルト値は右端のパラメータに左から順に適用されます。たとえば、フィールド名が ['x', 'y', 'z'] で、デフォルト値が (1,2) の場合、x は必須パラメータとなり、y はデフォルトの 1、z はデフォルトになります。 2へ。

パラメータモジュール: モジュールが定義されている場合、名前付きタプルの __module__ 属性がこの値に設定されます。

名前付きタプル インスタンスは、インスタンスごとに個別の辞書を使用しないため、軽量であり、通常のタプルより多くのメモリを必要としません。

名前付きタプル固有のメソッド

タプルから継承されたメソッドに加えて、名前付きタプルは 3 つの追加メソッドと 2 つのプロパティをサポートします。フィールド名との競合を防ぐため、メソッド名とプロパティ名はアンダースコアで始まります。それらは次のように導入されます:

1) _make(iterable):

既存のシーケンスまたは反復可能なオブジェクトから新しいインスタンスを生成するクラス メソッド。コード例は次のとおりです。

Pythonプログラミング:名前付きタプルの使い方のポイントを詳しく解説

出力結果は次のようになります。

Employee(, name='Batman', age='28')
ログイン後にコピー

2) _asdict ():

Return フィールド名を対応する値にマップする新しい辞書。サンプル コードは次のとおりです:

Pythonプログラミング:名前付きタプルの使い方のポイントを詳しく解説

出力結果は次のようになります:

{'id': '333', 'name': 'Batman', 'age': '28'}

ログイン後にコピー

3)_replace (**kwargs):

指定されたフィールドを新しい値に置き換えて、名前付きタプルの新しいインスタンスを返します。コード例は次のとおりです。

Pythonプログラミング:名前付きタプルの使い方のポイントを詳しく解説

出力結果は次のとおりです。

Employee(, name='Batman', age='34')
ログイン後にコピー

4) _fields:

は文字列要素を受け取ります。グループ内のフィールド名をリストします。イントロスペクションと、既存の名前付きタプルから新しい名前付きタプル タイプを作成するために使用されます。サンプル コードは次のとおりです。

Pythonプログラミング:名前付きタプルの使い方のポイントを詳しく解説

#出力結果は次のとおりです。

('id', 'name', 'age')
ログイン後にコピー

我们可以使用_fields属性从现有的命名元组中创建新的命名元组。示例如下:

Pythonプログラミング:名前付きタプルの使い方のポイントを詳しく解説

输出结果类似如下:

Pixel(x=5, y=8, red=128, green=255, blue=0)
ログイン後にコピー

结果的实体性赋值

这里所说的实体,类似Java中的数据实体对象——只有简单的属性字段。而命名元组在为csv或sqlite3模块操作而返回的元组结果分配给对应字段名而装配成简单实体时特别有用,自动进行字段的对应赋值。比如在当前Python程序位置有个employees.csv,其包含内容如下:

张三,26,工程师,开发部,中级
李四,32,项目经理,项目部,高级
ログイン後にコピー

通过示例,我们来完成Employee实体的命名元组的自动装配,代码示例如下:

Pythonプログラミング:名前付きタプルの使い方のポイントを詳しく解説

输出结果类似如下:

张三 工程师 26 开发部 中级
李四 项目经理 32 项目部 高级
ログイン後にコピー

再简单地来个数据库操作和装配实体的示例,代码清单如下:

Pythonプログラミング:名前付きタプルの使い方のポイントを詳しく解説

我这里只是简单的创建了数据库并创建表,然后插入一条数据,再查询并完成命名元组的实体化装配和结果输出。

运行输出结果如下:

王武 经理
ログイン後にコピー

本文小结

本文主要介绍了Python自带集合模块中的命名元组(namedtuple)的使用,即可以当做一般的元组使用,由可基于字段名的方式访问元组值,并介绍了命名元组内部扩展的几个方法和和属性的应用示例。最后还介绍了基于命名元组的实体化封装应用。基于代码示例进行介绍,这样便于你动手实践,以便更好地掌握和理解。

以上がPythonプログラミング:名前付きタプルの使い方のポイントを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:51cto.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート