{"id":994,"date":"2020-11-09T04:46:37","date_gmt":"2020-11-09T04:46:37","guid":{"rendered":"https:\/\/www.pythontutorial.net\/?page_id=994"},"modified":"2025-03-27T14:07:50","modified_gmt":"2025-03-27T14:07:50","slug":"python-namedtuple","status":"publish","type":"page","link":"https:\/\/www.pythontutorial.net\/advanced-python\/python-namedtuple\/","title":{"rendered":"Python NamedTuple"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you&#8217;ll learn how to use the Python <code>namedtuple<\/code> function to create named tuples.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='introduction-to-python-named-tuples'>Introduction to Python named tuples <a href=\"#introduction-to-python-named-tuples\" class=\"anchor\" id=\"introduction-to-python-named-tuples\" title=\"Anchor for Introduction to Python named tuples\">#<\/a><\/h2>\n\n\n\n<p>The following shows a <a href=\"https:\/\/www.pythontutorial.net\/python-basics\/python-tuples\/\">tuple<\/a> that has two elements:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">point = (<span class=\"hljs-number\">100<\/span>,<span class=\"hljs-number\">200<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>point<\/code> tuple represents a 2D point whose x-coordinate is <code>100<\/code> and y-coordinate is <code>200<\/code>.<\/p>\n\n\n\n<p>To get the x-coordinate and y-coordinate, you can use the following syntax:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">x = point&#91;<span class=\"hljs-number\">0<\/span>]\ny = point&#91;<span class=\"hljs-number\">1<\/span>]<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This code works fine. However, it&#8217;s not so obvious.<\/p>\n\n\n\n<p>When you look at the <code>point[0]<\/code>, you need to know its implicitly meaning which doesn&#8217;t mention in the code.<\/p>\n\n\n\n<p>To make the code more clear, you might want to use a <a href=\"https:\/\/www.pythontutorial.net\/python-oop\/python-class\/\">class<\/a>. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Point2D<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span><span class=\"hljs-params\">(self, x, y)<\/span>:<\/span>\n        self.x = x\n        self.y = y\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>And you can create a new instance of the <code>Point2D<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">a = Point2D(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">200<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Also, you can access x-coordinate and y-coordinate attributes:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">print(a.x)\nprint(a.y)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>To compare if two points are the same, you need to implement the <code>__eq__<\/code> method:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Point2D<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span><span class=\"hljs-params\">(self, x, y)<\/span>:<\/span>\n        self.x = x\n        self.y = y\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__eq__<\/span><span class=\"hljs-params\">(self, other)<\/span>:<\/span>\n        <span class=\"hljs-keyword\">if<\/span> isinstance(other, Point2D):\n            <span class=\"hljs-keyword\">return<\/span> self.x == other.x <span class=\"hljs-keyword\">and<\/span> self.y == other.y\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">False<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>__eq__<\/code> method checks if a point is an instance of the <code>Point2D<\/code> class and returns <code>True<\/code> if both x-coordinate and y-coordinate are equal.<\/p>\n\n\n\n<p>The following shows how to compare two instances of the <code>Point2D<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Point2D<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span><span class=\"hljs-params\">(self, x, y)<\/span>:<\/span>\n        self.x = x\n        self.y = y\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__eq__<\/span><span class=\"hljs-params\">(self, other)<\/span>:<\/span>\n        <span class=\"hljs-keyword\">if<\/span> isinstance(other, Point2D):\n            <span class=\"hljs-keyword\">return<\/span> self.x == other.x <span class=\"hljs-keyword\">and<\/span> self.y == other.y\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">False<\/span>\n\n\na = Point2D(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">200<\/span>)\nb = Point2D(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">200<\/span>)\n\nprint(a <span class=\"hljs-keyword\">is<\/span> b)  <span class=\"hljs-comment\"># False<\/span>\nprint(a == b)  <span class=\"hljs-comment\"># true<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><a href=\"https:\/\/www.pythontutorial.net\/playground\/?q=Y2xhc3MgUG9pbnQyRDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KToKICAgICAgICBzZWxmLnggPSB4CiAgICAgICAgc2VsZi55ID0geQoKICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFBvaW50MkQpOgogICAgICAgICAgICByZXR1cm4gc2VsZi54ID09IG90aGVyLnggYW5kIHNlbGYueSA9PSBvdGhlci55CiAgICAgICAgcmV0dXJuIEZhbHNlCgoKYSA9IFBvaW50MkQoMTAwLCAyMDApCmIgPSBQb2ludDJEKDEwMCwgMjAwKQoKcHJpbnQoYSBpcyBiKSAgIyBGYWxzZQpwcmludChhID09IGIpICAjIHRydWU%3D\" target=\"_blank\" rel=\"noreferrer noopener\">Try it<\/a><\/p>\n\n\n\n<p>The <code>Point2D<\/code> might work as you expected. However, you need to write a lot of code.<\/p>\n\n\n\n<p>To combine the simplicity of a tuple and the obvious of a class, you can use a named tuple:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"620\" height=\"74\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2020\/11\/Python-NamedTuples.png\" alt=\"\" class=\"wp-image-998\" srcset=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2020\/11\/Python-NamedTuples.png 620w, https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2020\/11\/Python-NamedTuples-300x36.png 300w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/figure>\n\n\n\n<p>Named tuples allow you to create tuples and assign meaningful names to the positions of the tuple&#8217;s elements.<\/p>\n\n\n\n<p>Technically, a named tuple is a subclass of <code>tuple<\/code>. On top of that, it adds property names to the positional elements.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='creating-named-tuple-classes'>Creating named tuple classes <a href=\"#creating-named-tuple-classes\" class=\"anchor\" id=\"creating-named-tuple-classes\" title=\"Anchor for Creating named tuple classes\">#<\/a><\/h2>\n\n\n\n<p>To create a named tuple class, you need to the <code>namedtuple<\/code> function of the <code>collections<\/code> standard library.<\/p>\n\n\n\n<p>The <code>namedtuple<\/code> is a function that returns a new named tuple class. In other words, the <code>namedtuple()<\/code> is a class factory.<\/p>\n\n\n\n<p>To use the <code>namedtuple<\/code> function, you need to import it from the <code>collections<\/code> module first:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">from<\/span> collections <span class=\"hljs-keyword\">import<\/span> namedtuple<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>namedtuple<\/code> function accepts the following arguments to generate a class:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A class name that specifies the name of the named tuple class.<\/li>\n\n\n\n<li>A sequence of field names that correspond to the elements of tuples. The field names must be valid variable names except that they cannot start with an underscore (<code>_<\/code>).<\/li>\n<\/ul>\n\n\n\n<p>For example, the following uses the <code>namedtuple<\/code> function to create the <code>Point2D<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">Point2D = namedtuple(<span class=\"hljs-string\">'Point2D'<\/span>,&#91;<span class=\"hljs-string\">'x'<\/span>,<span class=\"hljs-string\">'y'<\/span>])<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The namedtuple also can accept fields names as:<\/p>\n\n\n\n<p>1) A tuple of string:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">Point2D = namedtuple(<span class=\"hljs-string\">'Point2D'<\/span>,(<span class=\"hljs-string\">'x'<\/span>,<span class=\"hljs-string\">'y'<\/span>))<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>2) Or a single string with field names separated by commas:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">Point2D = namedtuple(<span class=\"hljs-string\">'Point2D'<\/span>,(<span class=\"hljs-string\">'x, y'<\/span>))<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>3) Or a single string with field names separated by whitespaces<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">Point2D = namedtuple(<span class=\"hljs-string\">'Point2D'<\/span>,<span class=\"hljs-string\">'x y'<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='instantiating-named-tuples'>Instantiating named tuples <a href=\"#instantiating-named-tuples\" class=\"anchor\" id=\"instantiating-named-tuples\" title=\"Anchor for Instantiating named tuples\">#<\/a><\/h2>\n\n\n\n<p>The <code>Point2D<\/code> is a class, which is a <a href=\"https:\/\/www.pythontutorial.net\/python-oop\/python-inheritance\/\">subclass<\/a> of the <code>tuple<\/code>. And you can create new instances of the <code>Point2D<\/code> class like you do with a regular class. For example:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">point = Point2D(100, 200)<\/code><\/span><\/pre>\n\n\n<p>Or you can use the keyword arguments:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">point = Point2D(x=<span class=\"hljs-number\">100<\/span>, y=<span class=\"hljs-number\">200<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"202\" height=\"117\" src=\"https:\/\/www.pythontutorial.net\/wp-content\/uploads\/2020\/11\/Python-NamedTuple-Example.png\" alt=\"\" class=\"wp-image-1000\"\/><\/figure>\n<\/div>\n\n\n<p>The <code>point<\/code> object is an instance of the <code>Point2D<\/code> class. Therefore, it&#8217;s an instance of the <code>tuple<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">print(isinstance(point, Point2D))  <span class=\"hljs-comment\"># True<\/span>\nprint(isinstance(point, tuple))  <span class=\"hljs-comment\"># True<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='accessing-data-of-a-named-tuple'>Accessing data of a named tuple <a href=\"#accessing-data-of-a-named-tuple\" class=\"anchor\" id=\"accessing-data-of-a-named-tuple\" title=\"Anchor for Accessing data of a named tuple\">#<\/a><\/h2>\n\n\n\n<p>A named tuple is a regular tuple. Therefore, you can apply all tuple operations on a named tuple.<\/p>\n\n\n\n<p>To access data in a named tuple, you can use:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Slicing<\/li>\n\n\n\n<li>Unpacking<\/li>\n\n\n\n<li>Indexing<\/li>\n\n\n\n<li>and iterating<\/li>\n<\/ul>\n\n\n\n<p>For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> collections <span class=\"hljs-keyword\">import<\/span> namedtuple\n\nPoint2D = namedtuple(<span class=\"hljs-string\">'Point2D'<\/span>,&#91;<span class=\"hljs-string\">'x'<\/span>,<span class=\"hljs-string\">'y'<\/span>])\npoint = Point2D(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">200<\/span>)\n\n<span class=\"hljs-comment\"># unpacking<\/span>\nx, y = point\nprint(<span class=\"hljs-string\">f'(<span class=\"hljs-subst\">{x}<\/span>, <span class=\"hljs-subst\">{y}<\/span>)'<\/span>)  <span class=\"hljs-comment\"># (100, 200)<\/span>\n\n<span class=\"hljs-comment\"># indexing<\/span>\nx = point&#91;<span class=\"hljs-number\">0<\/span>]\ny = point&#91;<span class=\"hljs-number\">1<\/span>]\nprint(<span class=\"hljs-string\">f'(<span class=\"hljs-subst\">{x}<\/span>, <span class=\"hljs-subst\">{y}<\/span>)'<\/span>)  <span class=\"hljs-comment\"># (100, 200)<\/span>\n\n<span class=\"hljs-comment\"># iterating<\/span>\n\n<span class=\"hljs-keyword\">for<\/span> coordinate <span class=\"hljs-keyword\">in<\/span> point:\n    print(coordinate)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><a href=\"https:\/\/www.pythontutorial.net\/playground\/?q=ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQoKUG9pbnQyRCA9IG5hbWVkdHVwbGUoJ1BvaW50MkQnLFsneCcsJ3knXSkKcG9pbnQgPSBQb2ludDJEKDEwMCwgMjAwKQoKIyB1bnBhY2tpbmcKeCwgeSA9IHBvaW50CnByaW50KGYnKHt4fSwge3l9KScpICAjICgxMDAsIDIwMCkKCiMgaW5kZXhpbmcKeCA9IHBvaW50WzBdCnkgPSBwb2ludFsxXQpwcmludChmJyh7eH0sIHt5fSknKSAgIyAoMTAwLCAyMDApCgojIGl0ZXJhdGluZwoKZm9yIGNvb3JkaW5hdGUgaW4gcG9pbnQ6CiAgICBwcmludChjb29yZGluYXRlKQ%3D%3D\" target=\"_blank\" rel=\"noreferrer noopener\">Try it<\/a><\/p>\n\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">200<\/span>)\n(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">200<\/span>)\n<span class=\"hljs-number\">100<\/span>\n<span class=\"hljs-number\">200<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='the-rename-argument-of-the-namedtuple-function'>The rename argument of the namedtuple function <a href=\"#the-rename-argument-of-the-namedtuple-function\" class=\"anchor\" id=\"the-rename-argument-of-the-namedtuple-function\" title=\"Anchor for The rename argument of the namedtuple function\">#<\/a><\/h2>\n\n\n\n<p>The <code>namedtuple<\/code> function accepts the <code>rename<\/code> the keyword-only argument that allows you to rename invalid field names.<\/p>\n\n\n\n<p>The following results in an error because the field name <code>_radius<\/code> starts with an underscore (<code>_<\/code>):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> collections <span class=\"hljs-keyword\">import<\/span> namedtuple\n\nCircle = namedtuple(\n    <span class=\"hljs-string\">'Circle'<\/span>,\n    <span class=\"hljs-string\">'center_x, center_y, _radius'<\/span>\n)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>However, when you use the <code>rename<\/code> argument, the <code>namedtuple<\/code> function automatically renames the <code>_radius<\/code> to a valid field name. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> collections <span class=\"hljs-keyword\">import<\/span> namedtuple\n\nCircle = namedtuple(\n    <span class=\"hljs-string\">'Circle'<\/span>,\n    <span class=\"hljs-string\">'center_x, center_y, _radius'<\/span>,\n    rename=<span class=\"hljs-literal\">True<\/span>\n)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>To find field names of a named tuple, you can use the <code>_fields<\/code> class property. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> collections <span class=\"hljs-keyword\">import<\/span> namedtuple\n\nCircle = namedtuple(\n    <span class=\"hljs-string\">'Circle'<\/span>,\n    <span class=\"hljs-string\">'center_x, center_y, _radius'<\/span>,\n    rename=<span class=\"hljs-literal\">True<\/span>\n)\n\nprint(Circle._fields)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><a href=\"https:\/\/www.pythontutorial.net\/playground\/?q=ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQoKQ2lyY2xlID0gbmFtZWR0dXBsZSgKICAgICdDaXJjbGUnLAogICAgJ2NlbnRlcl94LCBjZW50ZXJfeSwgX3JhZGl1cycsCiAgICByZW5hbWU9VHJ1ZQopCgpwcmludChDaXJjbGUuX2ZpZWxkcyk%3D\" target=\"_blank\" rel=\"noreferrer noopener\">Try it<\/a><\/p>\n\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">(<span class=\"hljs-string\">'center_x'<\/span>, <span class=\"hljs-string\">'center_y'<\/span>, <span class=\"hljs-string\">'_2'<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example, the <code>namedtuple<\/code> function changes the <code>_radius<\/code> field to <code>_2<\/code> automatically.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='additional-python-functions-of-named-tuples'>Additional Python functions of named tuples <a href=\"#additional-python-functions-of-named-tuples\" class=\"anchor\" id=\"additional-python-functions-of-named-tuples\" title=\"Anchor for Additional Python functions of named tuples\">#<\/a><\/h2>\n\n\n\n<p>Named tuples provide some useful functions out of the box. For example, you can use the equal operator (<code>==<\/code>) to compare two named tuple instances:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">a = Point2D(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">200<\/span>)\nb = Point2D(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">200<\/span>)\n\nprint(a == b)  <span class=\"hljs-comment\"># True<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><a href=\"https:\/\/www.pythontutorial.net\/playground\/?q=YSA9IFBvaW50MkQoMTAwLCAyMDApCmIgPSBQb2ludDJEKDEwMCwgMjAwKQoKcHJpbnQoYSA9PSBiKSAgIyBUcnVl\" target=\"_blank\" rel=\"noreferrer noopener\">Try it<\/a><\/p>\n\n\n\n<p>If you use the class, you need to implement the <code>__eq__<\/code> to get this function.<\/p>\n\n\n\n<p>Also, you can get the string representation of a named tuple:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">print(a)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">Point2D(x=<span class=\"hljs-number\">100<\/span>, y=<span class=\"hljs-number\">200<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-23\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Again, if you use the class, you need to implement <code>__rep__<\/code> method.<\/p>\n\n\n\n<p>Since a named tuple is a tuple, you can apply any function that is relevant to a regular tuple to a named tuple. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">print(max(a))  <span class=\"hljs-comment\"># 200<\/span>\nprint(min(a))  <span class=\"hljs-comment\"># 100<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-24\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='summary'>Summary <a href=\"#summary\" class=\"anchor\" id=\"summary\" title=\"Anchor for Summary\">#<\/a><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Named tuples are tuples whose element positions have meaningful names.<\/li>\n\n\n\n<li>Use the <code>namedtuple<\/code> function of the <code>collections<\/code> standard library to create a named tuple class.<\/li>\n\n\n\n<li>Named tuples are immutable.<\/li>\n<\/ul>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Was this tutorial helpful ?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"994\"\n\t\t\t\tdata-post-url=\"https:\/\/www.pythontutorial.net\/advanced-python\/python-namedtuple\/\"\n\t\t\t\tdata-post-title=\"Python NamedTuple\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"994\"\n\t\t\t\tdata-post-url=\"https:\/\/www.pythontutorial.net\/advanced-python\/python-namedtuple\/\"\n\t\t\t\tdata-post-title=\"Python NamedTuple\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\t\t\t<input type=\"button\" name=\"wth-submit\" class=\"wth-btn wth-btn-submit\" id=\"wth-submit\" \/>\n\t\t\t<input type=\"button\" class=\"wth-btn wth-btn-cancel\" value=\"Cancel\" \/>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In this tutorial, you&#8217;ll learn how to use the Python namedtuple function to create named tuples.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":757,"menu_order":13,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-994","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/comments?post=994"}],"version-history":[{"count":1,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/994\/revisions"}],"predecessor-version":[{"id":7120,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/994\/revisions\/7120"}],"up":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/757"}],"wp:attachment":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/media?parent=994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}