Nametuple में संकेत टाइप करें


127

निम्नलिखित कोड पर विचार करें:

from collections import namedtuple
point = namedtuple("Point", ("x:int", "y:int"))

ऊपर दिया गया कोड केवल यह प्रदर्शित करने का एक तरीका है कि मैं क्या हासिल करने की कोशिश कर रहा हूं। मैं namedtupleटाइप संकेत के साथ बनाना चाहते हैं ।

क्या आप किसी भी सुंदर तरीके से जानते हैं कि परिणाम कैसे प्राप्त करना है?


2
इसके अलावा, py3.7 से शुरू करने के लिए आपके पास डेटाकॉल विकल्प: docs.python.org/3/library/dataclasses.html
— JohnE

जवाबों:


151

3.6 के बाद से टाइप्ड टपल के लिए पसंदीदा सिंटैक्स है

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int = 1  # Set default value

Point(3)  # -> Point(x=3, y=1)

Python 3.7 से आरंभ करें , उपयोग करने पर विचार करें dataclasses(आपका आईडीई अभी तक स्थैतिक प्रकार की जाँच के लिए उनका समर्थन नहीं कर सकता है):

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int = 1  # Set default value

Point(3)  # -> Point(x=3, y=1)

12
@JohnE; ओपी ने विशेष रूप से नामित ट्यूल के लिए कहा। हां, नामांकित टुपल्स के कई उपयोग के मामलों को डेटा कक्षाओं द्वारा बेहतर ढंग से परोसा जाएगा। लेकिन उत्कृष्ट को उद्धृत करने के लिए क्यों नामांकित नहीं हैं : यदि आप हर तरह से नामों के साथ एक टुपल चाहते हैं: एक नेमप्ले के लिए जाएं
— वोल्फगैंग Kuehn

1
डिटैचेलेस का उपयोग करना, परिणामी वस्तु को फिर से बनाना संभव नहीं है, जैसे कि आप एक टपल
— VARAK

6
एक टप्पर अपरिवर्तनीय है। एक डाटाकैश नहीं है (डिफ़ॉल्ट रूप से) इसमें जमे हुए झंडे होते हैं जो टपल के व्यवहार के करीब पहुंच जाते हैं। बस ऐसा कुछ जिसके बारे में अवगत होना चाहिए।
— शालू

103

आप उपयोग कर सकते हैं typing.NamedTuple

डॉक्स से

संस्करण लिखे गए की namedtuple।

>>> import typing
>>> Point = typing.NamedTuple("Point", [('x', int), ('y', int)])

यह केवल पायथन 3.5 में मौजूद है


मैं इसे इस तरह की घोषणा की: GeoPoint = NamedTuple('GeoPoint', [('longitude', float), ('latitude', float)])तो मैं कोशिश भू = GeoPoint (** डेटा) जहां डाटा है जरूरत कुंजी और मूल्यों की जा रही युक्त dict decimal.Decimal, और नाव के लिए कोई डाली होता है; (कोई typerror या तो :( :( तो कैसे इस typing.NamedTupleकाम करता है देखते हैं? सार .github.com / andilabs / 15002176b2bda786b9037077fa06cc71
— andilabs

8
@ कंडी टाइपिंग लागू या लागू नहीं होती है, afaik।
— भार्गव राव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.