Pythonのタプル開梱と命名ノート004タプル
以下は、私はすべてが共有するために、「Pythonがスムーズ」の後、今出て、私はあなたにPythonの学習を支援したいと考えて勉強個人的なメモです。
マイクロチャンネル公共番号:技術古いディンゴ、ID:TechDing、ので、しばらくお待ち最初に発表されました。
この章の知識内のデータ:
タプルを開梱する変数割当に適用される異なる変数内の位置に応じてそれぞれ一対一のタプル要素を割り当てることで、関数パラメータの割り当ては、タプルと他の機会の特定要素の位置の値を取得します。
namedtuple:_asdictにより、同じ名前のdictを介してアクセスすることができるようにオブジェクトのシーケンス記憶、要素の値は、変更することができない()は、クラス属性、メソッドを行い作用する、のdictに変換されます。
1.タプル開梱
括弧によって示される形態、タプル、および括弧で囲まれたリスト内のリストPythonでタプルとリストの同様タプル、タプルの要素は変更することができないことを除いて、それはしばしば(として不変のリストと呼ばれます) ]表現。
:タプルをアンパックするような、異なる変数へのタプル内の位置に応じた要素の1つにそれぞれを割り当てることです
tupleA=(10,20.5)
first,second=tupleA # 对二元素元组拆包
print(first) # 10
print(second) # 20.5
a,b,c,d=('A',20.15,2019,'10:15:14') # 多元素元组的拆包
print(a) # A
print(b) # 20.15
print(c) # 2019
print(d) # 10:15:14
上記は単純な代入を開梱に適用され、ない目新しことを追加した場合。実際には、開梱は、多くの場合など、関数にパラメータの割り当てのために使用されます。
def func1(a,b):
print('a: ',a,'b: ',b)
tupleA=(10,20.5)
func1(*tupleA) # 拆包后作为函数的参数,a: 10 b: 20.5
別のアンパックシナリオは、特定の機能がタプルを返すことで、開梱我々はする必要があり、例えば:
def func2(x):
return (x,x*2,x*x)
data1,data2,data3=func2(3)
print(data1) # 3
print(data2) # 6
print(data3) # 9
開梱、およびいくつかの要素は、私たちが必要とするものではありませんその後、_使用する、代わりにプレースホルダを使用すると、プレースホルダを表し、*より多くのプレースホルダを表し
data1,_,data3=func2(3) # 用_代表一个变量
print(data1) # 3
data1,*rest=func2(3)
print(data1) # 3
print(rest) # [6,9]
ネストされたタプルは、定義によりタプルは、その通常およびアンパックアンパックタプルが同様のタプルに含まれています。
areas=[('hubei','wuhan',1200,(150,260)),
('hunan','changsha',3600,(100,200)),
('shandong','jinan',800,(260,180))]
for province,city,data1,(data2,data3) in areas:
print('P:{}, C:{}, data2:{},data3:{}'.format(province,city,data2,data3))
2.名前タプル
タプルと同様タプル(namedtuple)と命名、配列オブジェクトを格納するために使用することができ、それはタプル要素の継続に加えて、このプロパティの値を変更できない、タプルよりも強力であり、そのような辞書のようにすることができるような独自の特徴は、あります名前によるアクセス要素の値だけでなく、()辞書は_asdictによって型に変換されます。
名前付きタプルはタプルとフィールド名とクラス名を構築することができ、それが消費タプルメモリは同じです。
我々は単純なクラスを構築する必要がある場合は、オブジェクト指向の考え方では、いくつかの簡単な性質、ない具体的な方法を保存するために、我々は書くことができます。
class PersonCls:# 定义一个类,只有属性,没有具体的方法,用于存储某些属性值
def __init__(self,name,age,score):
self.name=name
self.age=age
self.score=score
def __repr__(self):
return 'PersonCls(name={},age={},score={})'.format(self.name,self.age,self.score)
PC1=PersonCls('Jack',20,85)
PC2=PersonCls('Rose',18,92)
print(PC1) # PersonCls(name=Jack,age=20,score=85)
print(PC2) # PersonCls(name=Rose,age=18,score=92)
print(PC1.age) # 20
print(PC2.score) # 92
このような文言は可能ですが、ないPythonのスタイルは、このような状況は、たとえば、内部のPythonで書かれ、namedtupleを行うことは完全に可能です:
from collections import namedtuple
Person=namedtuple('Person',['name', 'age', 'score']) # 构造一个namedtuple类
P1=Person('Jack',20,85) # 构建具体的实例,其赋值顺序要一一对应
P2=Person(age=18,name='Rose',score=92) # 如果指定变量名,顺序不用一一对应
print(P1) # Person(name='Jack', age=20, score=85)
print(P2) # Person(name='Rose', age=18, score=92)
print(P1.age) # 可以像dict一样通过属性名进行访问
print(P2.score) # 92
上記のPerson=namedtuple('Person',['name', 'age', 'score'])
プロパティを構築Personクラスに相当しない唯一のプロパティである方法、の「名前」、「時代」 、「スコア」、 シンプルなコードと、よりPythonの味。ためのメモリでは、それはクラスの定義よりも少なくなり、あなたは必要としない__dict__
プロパティはインスタンスを格納します。
タプルから継承されたプロパティへのタプルのほか、名前付き、独自のプロパティがありますが、最も一般的に使用されます_fields, _make(), _asdict()
。次のように:
# namedtuple专有属性:
from collections import namedtuple
Person=namedtuple('Person',['name', 'age', 'score'])
print(Person._fields) # ('name', 'age', 'score')
# _fields属性是一个包含这个类所有属性名称的tuple
person1=('zhangsan',25,59)
p1=Person._make(person1) # _make()接受一个可迭代对象生成一个实例
print(p1) # Person(name='zhangsan', age=25, score=59)
print(p1._asdict()) # OrderedDict([('name', 'zhangsan'), ('age', 25), ('score', 59)])
# _asdict()将实例的属性和值以OrderedDict的方式展示出来。
マイクロチャンネル公共番号:技術古いディンゴ、ID:TechDing、ので、しばらくお待ち最初に発表されました。
コードのすべてがにアップロードされている。この論文では、私のGitHub、ダウンロードして歓迎
参考文献:
- 「流暢パイソン」、ルチアーノRamalho(著)アンドラ、呉柯(翻訳)。