{"id":4477,"date":"2015-05-04T16:15:55","date_gmt":"2015-05-04T13:15:55","guid":{"rendered":"http:\/\/www.webcodegeeks.com\/?p=4477"},"modified":"2015-05-04T12:00:36","modified_gmt":"2015-05-04T09:00:36","slug":"explicit-currying-python","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/","title":{"rendered":"Explicit Currying in Python"},"content":{"rendered":"<p>Last week, I talked about currying a little bit, and I\u2019ve been thinking about how one could do in languages that don\u2019t have it built in. It can be done in Java, but the type of even a two-parameter function would be something like <code>Function&lt;Integer, Function&lt;Integer, Integer&gt;&gt;<\/code>, which is bad enough. Imagine 3- or 4-parameter functions.<\/p>\n<p>There\u2019s also the fact that calling curried functions doesn\u2019t look good. Calling the two-parameter function with both parameters would look something like <code>func.apply(1).apply(2)<\/code>. This isn\u2019t what we want. At worst, we want to be stuck with <code>func(1)(2)<\/code>, but that\u2019s not possible in Java. At best, we want to be able to choose <code>func(1)(2)<\/code> (calling it with the first argument at one point in time and using the second one later) OR <code>func(1, 2)<\/code>, depending on our current need. It\u2019s possible to do so in python, so I\u2019m using that.<\/p>\n<h2>How it Can be Done<\/h2>\n<p>All of this is possible in python thanks to default arguments and nested functions. Let\u2019s check out the simplest case with two parameters again:<\/p>\n<pre class=\" brush:php\">def func(a, b=None):\r\n    def inner(b):\r\n        return a + b\r\n \r\n    if b is None:\r\n        return inner\r\n    else:\r\n        return inner(b)<\/pre>\n<p>In this example, you can see that the outer function has the potential to accept arguments for both of the parameters, making the last one default to None. Inside, the curried-to function is defined to take only the second argument. After that, it checks to see if something was given for <code>b<\/code>, and if there has been, it calls the inner function with <code>b<\/code> (<code>a<\/code> is provided through closures). If something wasn\u2019t given for <code>b<\/code>, it simply returns the inner function so that it can be called and provided with <code>b<\/code> later.<\/p>\n<h2>Going Bigger<\/h2>\n<p>From the previous example, you can probably derive how additional parameters can be added, but I\u2019ll provide you with an additional example with three parameters:<\/p>\n<pre class=\" brush:php\">def func(a, b=None, c=None):\r\n    def inner1(b, c=None):\r\n        def inner2(c):\r\n            return a + b + c\r\n \r\n        if c is None:\r\n            return inner2\r\n        else:\r\n            return inner2(c)\r\n \r\n    if b is None:\r\n        return inner1\r\n    else:\r\n        return inner1(b, c)<\/pre>\n<p>There are a few things to note here. First off, you might be surprised that you don\u2019t have to make a distinction between <code>b<\/code> being given but not <code>c<\/code> and both <code>b<\/code> and <code>c<\/code> being given. My first instinct was that you would have to check that, but you don\u2019t. Why not? Because <code>inner1<\/code> checks <code>c<\/code> and decides whether <code>inner2<\/code> needs to be returned or called.<\/p>\n<h2>Restrictions<\/h2>\n<p>There are some severe limitations to setting up functions to be curried like this. The first is that you functionally only get a fixed-length set of position-based parameters. No <code>*args<\/code> (except as the very last parameter and no <code>**kwargs<\/code>. You also don\u2019t even get to truly use default arguments, since their use for currying would clash with their intended use. There may be a few cases that work as exceptions, but they would require extra thought and workarounds to accomplish.<\/p>\n<p>You\u2019ll also want to very carefully document the use of these curried functions so that people will understand how they work and how to use them.<\/p>\n<h2>Alternative Defaults<\/h2>\n<p>There may come a time when you want to be able to accept None as a valid argument. In such a case, you could create a dummy object to represent when a value isn\u2019t provided. For example:<\/p>\n<pre class=\" brush:php\">class _NotGiven():\r\n    pass\r\n \r\nNotGiven = _NotGiven()<\/pre>\n<p>You have your hidden class (hidden so that people don\u2019t foolishly make instances of it) and a \u201cconstant\u201d instance of the class that can be used (more explanation as to why in a little bit).<\/p>\n<p>With this in place, you could rewrite the first example like this:<\/p>\n<pre class=\" brush:php\">def func(a, b=NotGiven):\r\n    def inner(b):\r\n        return a + b\r\n \r\n    if b is NotGiven:\r\n        return inner\r\n    else:\r\n        return inner(b)<\/pre>\n<p>You see, using the \u201cconstant\u201d of <code>NotGiven<\/code> instead of always making an instance of <code>_NotGiven<\/code> allows us to reduce memory used by object creation as well as allowing the checks to read more fluently. i.e. \u201cif b is not given\u201d as opposed to \u201cif is instance b not given\u201d that you would get with <code>if isinstance(b, _NotGiven):<\/code>.<\/p>\n<h2>Pros and Cons<\/h2>\n<p><b>Cons<\/b><\/p>\n<p>Generally, you\u2019ll want to actually avoid using this technique. Largely, it is not a worthwhile exercise. Being that it\u2019s an explicit implementation of currying, it is more complicated to read and write than it should generally be. There are also not a lot of cases of functions being partially called, even with the relatively simple <code>partial<\/code> function provided with python. Even then, though, using <code>partial<\/code> isn\u2019t a bad idea.<\/p>\n<p><b>Pros<\/b><\/p>\n<p>BUT, there may be times when you know that a function will be used partially, and only sometimes. If you know a function is going to be used partially ALL the time, you simplify its definition, taking out the later parameters on the outermost function and skipping the check, returning the inner function automatically. A big upshot to these curried functions over <code>partial<\/code> is the ability to read it in usage. In the rare instance that it is usable, writing explicitly curriable functions might be a life saver. Keep them as a tool in your back pocket: rarely used, but ready and waiting for the chance to be used every once in a while.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/programmingideaswithjake.wordpress.com\/2015\/04\/25\/explicit-currying-in-python\/\">Explicit Currying in Python<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/wcg\/\">WCG partner<\/a> Jacob Zimmerman at the <a href=\"http:\/\/programmingideaswithjake.wordpress.com\/\">Programming Ideas With Jake<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Last week, I talked about currying a little bit, and I\u2019ve been thinking about how one could do in languages that don\u2019t have it built in. It can be done in Java, but the type of even a two-parameter function would be something like Function&lt;Integer, Function&lt;Integer, Integer&gt;&gt;, which is bad enough. Imagine 3- or 4-parameter &hellip;<\/p>\n","protected":false},"author":51,"featured_media":1651,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[53],"tags":[],"class_list":["post-4477","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Explicit Currying in Python - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"Last week, I talked about currying a little bit, and I\u2019ve been thinking about how one could do in languages that don\u2019t have it built in. It can be done in\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Explicit Currying in Python - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"Last week, I talked about currying a little bit, and I\u2019ve been thinking about how one could do in languages that don\u2019t have it built in. It can be done in\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-04T13:15:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jacob Zimmerman\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/jacobz_20\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jacob Zimmerman\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/\"},\"author\":{\"name\":\"Jacob Zimmerman\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/f54a53cfb8523f4ef6012aa63f075c39\"},\"headline\":\"Explicit Currying in Python\",\"datePublished\":\"2015-05-04T13:15:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/\"},\"wordCount\":810,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"articleSection\":[\"Python\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/\",\"name\":\"Explicit Currying in Python - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"datePublished\":\"2015-05-04T13:15:55+00:00\",\"description\":\"Last week, I talked about currying a little bit, and I\u2019ve been thinking about how one could do in languages that don\u2019t have it built in. It can be done in\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Explicit Currying in Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/f54a53cfb8523f4ef6012aa63f075c39\",\"name\":\"Jacob Zimmerman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g\",\"caption\":\"Jacob Zimmerman\"},\"description\":\"Jacob is a certified Java programmer (level 1) and Python enthusiast. He loves to solve large problems with programming and considers himself pretty good at design.\",\"sameAs\":[\"https:\/\/programmingideaswithjake.wordpress.com\/\",\"https:\/\/x.com\/https:\/\/twitter.com\/jacobz_20\"],\"url\":\"https:\/\/www.webcodegeeks.com\/author\/jacob-zimmerman\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Explicit Currying in Python - Web Code Geeks - 2026","description":"Last week, I talked about currying a little bit, and I\u2019ve been thinking about how one could do in languages that don\u2019t have it built in. It can be done in","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/","og_locale":"en_US","og_type":"article","og_title":"Explicit Currying in Python - Web Code Geeks - 2026","og_description":"Last week, I talked about currying a little bit, and I\u2019ve been thinking about how one could do in languages that don\u2019t have it built in. It can be done in","og_url":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2015-05-04T13:15:55+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","type":"image\/jpeg"}],"author":"Jacob Zimmerman","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/jacobz_20","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Jacob Zimmerman","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/"},"author":{"name":"Jacob Zimmerman","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/f54a53cfb8523f4ef6012aa63f075c39"},"headline":"Explicit Currying in Python","datePublished":"2015-05-04T13:15:55+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/"},"wordCount":810,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","articleSection":["Python"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/","url":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/","name":"Explicit Currying in Python - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","datePublished":"2015-05-04T13:15:55+00:00","description":"Last week, I talked about currying a little bit, and I\u2019ve been thinking about how one could do in languages that don\u2019t have it built in. It can be done in","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/11\/python-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/python\/explicit-currying-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/www.webcodegeeks.com\/category\/python\/"},{"@type":"ListItem","position":3,"name":"Explicit Currying in Python"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/f54a53cfb8523f4ef6012aa63f075c39","name":"Jacob Zimmerman","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g","caption":"Jacob Zimmerman"},"description":"Jacob is a certified Java programmer (level 1) and Python enthusiast. He loves to solve large problems with programming and considers himself pretty good at design.","sameAs":["https:\/\/programmingideaswithjake.wordpress.com\/","https:\/\/x.com\/https:\/\/twitter.com\/jacobz_20"],"url":"https:\/\/www.webcodegeeks.com\/author\/jacob-zimmerman\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/4477","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/51"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=4477"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/4477\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/1651"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=4477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=4477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=4477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}