function.html 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
  6. <meta property="og:title" content="Function Objects" />
  7. <meta property="og:type" content="website" />
  8. <meta property="og:url" content="https://docs.python.org/3/c-api/function.html" />
  9. <meta property="og:site_name" content="Python documentation" />
  10. <meta property="og:description" content="There are a few functions specific to Python functions." />
  11. <meta property="og:image" content="https://docs.python.org/3/_static/og-image.png" />
  12. <meta property="og:image:alt" content="Python documentation" />
  13. <meta name="description" content="There are a few functions specific to Python functions." />
  14. <meta property="og:image:width" content="200" />
  15. <meta property="og:image:height" content="200" />
  16. <meta name="theme-color" content="#3776ab" />
  17. <title>Function Objects &#8212; Python 3.12.0 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
  18. <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
  19. <link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?digest=b37c26da2f7529d09fe70b41c4b2133fe4931a90" />
  20. <link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css" />
  21. <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
  22. <script src="../_static/jquery.js"></script>
  23. <script src="../_static/underscore.js"></script>
  24. <script src="../_static/doctools.js"></script>
  25. <script src="../_static/sidebar.js"></script>
  26. <link rel="search" type="application/opensearchdescription+xml"
  27. title="Search within Python 3.12.0 documentation"
  28. href="../_static/opensearch.xml"/>
  29. <link rel="author" title="About these documents" href="../about.html" />
  30. <link rel="index" title="Index" href="../genindex.html" />
  31. <link rel="search" title="Search" href="../search.html" />
  32. <link rel="copyright" title="Copyright" href="../copyright.html" />
  33. <link rel="next" title="Instance Method Objects" href="method.html" />
  34. <link rel="prev" title="Set Objects" href="set.html" />
  35. <link rel="canonical" href="https://docs.python.org/3/c-api/function.html" />
  36. <style>
  37. @media only screen {
  38. table.full-width-table {
  39. width: 100%;
  40. }
  41. }
  42. </style>
  43. <link rel="stylesheet" href="../_static/pydoctheme_dark.css" media="(prefers-color-scheme: dark)" id="pydoctheme_dark_css">
  44. <link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
  45. <script type="text/javascript" src="../_static/copybutton.js"></script>
  46. <script type="text/javascript" src="../_static/menu.js"></script>
  47. <script type="text/javascript" src="../_static/themetoggle.js"></script>
  48. </head>
  49. <body>
  50. <div class="mobile-nav">
  51. <input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
  52. aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
  53. <nav class="nav-content" role="navigation">
  54. <label for="menuToggler" class="toggler__label">
  55. <span></span>
  56. </label>
  57. <span class="nav-items-wrapper">
  58. <a href="https://www.python.org/" class="nav-logo">
  59. <img src="../_static/py.svg" alt="Logo"/>
  60. </a>
  61. <span class="version_switcher_placeholder"></span>
  62. <form role="search" class="search" action="../search.html" method="get">
  63. <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
  64. <path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
  65. </svg>
  66. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
  67. <input type="submit" value="Go"/>
  68. </form>
  69. </span>
  70. </nav>
  71. <div class="menu-wrapper">
  72. <nav class="menu" role="navigation" aria-label="main navigation">
  73. <div class="language_switcher_placeholder"></div>
  74. <label class="theme-selector-label">
  75. Theme
  76. <select class="theme-selector" oninput="activateTheme(this.value)">
  77. <option value="auto" selected>Auto</option>
  78. <option value="light">Light</option>
  79. <option value="dark">Dark</option>
  80. </select>
  81. </label>
  82. <div>
  83. <h4>Previous topic</h4>
  84. <p class="topless"><a href="set.html"
  85. title="previous chapter">Set Objects</a></p>
  86. </div>
  87. <div>
  88. <h4>Next topic</h4>
  89. <p class="topless"><a href="method.html"
  90. title="next chapter">Instance Method Objects</a></p>
  91. </div>
  92. <div role="note" aria-label="source link">
  93. <h3>This Page</h3>
  94. <ul class="this-page-menu">
  95. <li><a href="../bugs.html">Report a Bug</a></li>
  96. <li>
  97. <a href="https://github.com/python/cpython/blob/main/Doc/c-api/function.rst"
  98. rel="nofollow">Show Source
  99. </a>
  100. </li>
  101. </ul>
  102. </div>
  103. </nav>
  104. </div>
  105. </div>
  106. <div class="related" role="navigation" aria-label="related navigation">
  107. <h3>Navigation</h3>
  108. <ul>
  109. <li class="right" style="margin-right: 10px">
  110. <a href="../genindex.html" title="General Index"
  111. accesskey="I">index</a></li>
  112. <li class="right" >
  113. <a href="../py-modindex.html" title="Python Module Index"
  114. >modules</a> |</li>
  115. <li class="right" >
  116. <a href="method.html" title="Instance Method Objects"
  117. accesskey="N">next</a> |</li>
  118. <li class="right" >
  119. <a href="set.html" title="Set Objects"
  120. accesskey="P">previous</a> |</li>
  121. <li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
  122. <li><a href="https://www.python.org/">Python</a> &#187;</li>
  123. <li class="switchers">
  124. <div class="language_switcher_placeholder"></div>
  125. <div class="version_switcher_placeholder"></div>
  126. </li>
  127. <li>
  128. </li>
  129. <li id="cpython-language-and-version">
  130. <a href="../index.html">3.12.0 Documentation</a> &#187;
  131. </li>
  132. <li class="nav-item nav-item-1"><a href="index.html" >Python/C API Reference Manual</a> &#187;</li>
  133. <li class="nav-item nav-item-2"><a href="concrete.html" accesskey="U">Concrete Objects Layer</a> &#187;</li>
  134. <li class="nav-item nav-item-this"><a href="">Function Objects</a></li>
  135. <li class="right">
  136. <div class="inline-search" role="search">
  137. <form class="inline-search" action="../search.html" method="get">
  138. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
  139. <input type="submit" value="Go" />
  140. </form>
  141. </div>
  142. |
  143. </li>
  144. <li class="right">
  145. <label class="theme-selector-label">
  146. Theme
  147. <select class="theme-selector" oninput="activateTheme(this.value)">
  148. <option value="auto" selected>Auto</option>
  149. <option value="light">Light</option>
  150. <option value="dark">Dark</option>
  151. </select>
  152. </label> |</li>
  153. </ul>
  154. </div>
  155. <div class="document">
  156. <div class="documentwrapper">
  157. <div class="bodywrapper">
  158. <div class="body" role="main">
  159. <section id="function-objects">
  160. <span id="id1"></span><h1>Function Objects<a class="headerlink" href="#function-objects" title="Permalink to this headline">¶</a></h1>
  161. <p id="index-0">There are a few functions specific to Python functions.</p>
  162. <dl class="c type">
  163. <dt class="sig sig-object c" id="c.PyFunctionObject">
  164. <span class="k"><span class="pre">type</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyFunctionObject</span></span></span><a class="headerlink" href="#c.PyFunctionObject" title="Permalink to this definition">¶</a><br /></dt>
  165. <dd><p>The C structure used for functions.</p>
  166. </dd></dl>
  167. <dl class="c var">
  168. <dt class="sig sig-object c" id="c.PyFunction_Type">
  169. <a class="reference internal" href="type.html#c.PyTypeObject" title="PyTypeObject"><span class="n"><span class="pre">PyTypeObject</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_Type</span></span></span><a class="headerlink" href="#c.PyFunction_Type" title="Permalink to this definition">¶</a><br /></dt>
  170. <dd><p id="index-1">This is an instance of <a class="reference internal" href="type.html#c.PyTypeObject" title="PyTypeObject"><code class="xref c c-type docutils literal notranslate"><span class="pre">PyTypeObject</span></code></a> and represents the Python function
  171. type. It is exposed to Python programmers as <code class="docutils literal notranslate"><span class="pre">types.FunctionType</span></code>.</p>
  172. </dd></dl>
  173. <dl class="c function">
  174. <dt class="sig sig-object c" id="c.PyFunction_Check">
  175. <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_Check</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">o</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_Check" title="Permalink to this definition">¶</a><br /></dt>
  176. <dd><p>Return true if <em>o</em> is a function object (has type <a class="reference internal" href="#c.PyFunction_Type" title="PyFunction_Type"><code class="xref c c-data docutils literal notranslate"><span class="pre">PyFunction_Type</span></code></a>).
  177. The parameter must not be <code class="docutils literal notranslate"><span class="pre">NULL</span></code>. This function always succeeds.</p>
  178. </dd></dl>
  179. <dl class="c function">
  180. <dt class="sig sig-object c" id="c.PyFunction_New">
  181. <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_New</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">code</span></span>, <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">globals</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_New" title="Permalink to this definition">¶</a><br /></dt>
  182. <dd><em class="refcount">Return value: New reference.</em><p>Return a new function object associated with the code object <em>code</em>. <em>globals</em>
  183. must be a dictionary with the global variables accessible to the function.</p>
  184. <p>The function’s docstring and name are retrieved from the code object. <em>__module__</em>
  185. is retrieved from <em>globals</em>. The argument defaults, annotations and closure are
  186. set to <code class="docutils literal notranslate"><span class="pre">NULL</span></code>. <em>__qualname__</em> is set to the same value as the code object’s
  187. <code class="docutils literal notranslate"><span class="pre">co_qualname</span></code> field.</p>
  188. </dd></dl>
  189. <dl class="c function">
  190. <dt class="sig sig-object c" id="c.PyFunction_NewWithQualName">
  191. <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_NewWithQualName</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">code</span></span>, <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">globals</span></span>, <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">qualname</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_NewWithQualName" title="Permalink to this definition">¶</a><br /></dt>
  192. <dd><em class="refcount">Return value: New reference.</em><p>As <a class="reference internal" href="#c.PyFunction_New" title="PyFunction_New"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyFunction_New()</span></code></a>, but also allows setting the function object’s
  193. <code class="docutils literal notranslate"><span class="pre">__qualname__</span></code> attribute. <em>qualname</em> should be a unicode object or <code class="docutils literal notranslate"><span class="pre">NULL</span></code>;
  194. if <code class="docutils literal notranslate"><span class="pre">NULL</span></code>, the <code class="docutils literal notranslate"><span class="pre">__qualname__</span></code> attribute is set to the same value as the
  195. code object’s <code class="docutils literal notranslate"><span class="pre">co_qualname</span></code> field.</p>
  196. <div class="versionadded">
  197. <p><span class="versionmodified added">New in version 3.3.</span></p>
  198. </div>
  199. </dd></dl>
  200. <dl class="c function">
  201. <dt class="sig sig-object c" id="c.PyFunction_GetCode">
  202. <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_GetCode</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">op</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_GetCode" title="Permalink to this definition">¶</a><br /></dt>
  203. <dd><em class="refcount">Return value: Borrowed reference.</em><p>Return the code object associated with the function object <em>op</em>.</p>
  204. </dd></dl>
  205. <dl class="c function">
  206. <dt class="sig sig-object c" id="c.PyFunction_GetGlobals">
  207. <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_GetGlobals</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">op</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_GetGlobals" title="Permalink to this definition">¶</a><br /></dt>
  208. <dd><em class="refcount">Return value: Borrowed reference.</em><p>Return the globals dictionary associated with the function object <em>op</em>.</p>
  209. </dd></dl>
  210. <dl class="c function">
  211. <dt class="sig sig-object c" id="c.PyFunction_GetModule">
  212. <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_GetModule</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">op</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_GetModule" title="Permalink to this definition">¶</a><br /></dt>
  213. <dd><em class="refcount">Return value: Borrowed reference.</em><p>Return a <a class="reference internal" href="../glossary.html#term-borrowed-reference"><span class="xref std std-term">borrowed reference</span></a> to the <em>__module__</em> attribute of the
  214. function object <em>op</em>. It can be <em>NULL</em>.</p>
  215. <p>This is normally a string containing the module name, but can be set to any
  216. other object by Python code.</p>
  217. </dd></dl>
  218. <dl class="c function">
  219. <dt class="sig sig-object c" id="c.PyFunction_GetDefaults">
  220. <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_GetDefaults</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">op</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_GetDefaults" title="Permalink to this definition">¶</a><br /></dt>
  221. <dd><em class="refcount">Return value: Borrowed reference.</em><p>Return the argument default values of the function object <em>op</em>. This can be a
  222. tuple of arguments or <code class="docutils literal notranslate"><span class="pre">NULL</span></code>.</p>
  223. </dd></dl>
  224. <dl class="c function">
  225. <dt class="sig sig-object c" id="c.PyFunction_SetDefaults">
  226. <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_SetDefaults</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">op</span></span>, <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">defaults</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_SetDefaults" title="Permalink to this definition">¶</a><br /></dt>
  227. <dd><p>Set the argument default values for the function object <em>op</em>. <em>defaults</em> must be
  228. <code class="docutils literal notranslate"><span class="pre">Py_None</span></code> or a tuple.</p>
  229. <p>Raises <a class="reference internal" href="../library/exceptions.html#SystemError" title="SystemError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SystemError</span></code></a> and returns <code class="docutils literal notranslate"><span class="pre">-1</span></code> on failure.</p>
  230. </dd></dl>
  231. <dl class="c function">
  232. <dt class="sig sig-object c" id="c.PyFunction_SetVectorcall">
  233. <span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_SetVectorcall</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.PyFunctionObject" title="PyFunctionObject"><span class="n"><span class="pre">PyFunctionObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">func</span></span>, <a class="reference internal" href="call.html#c.vectorcallfunc" title="vectorcallfunc"><span class="n"><span class="pre">vectorcallfunc</span></span></a><span class="w"> </span><span class="n"><span class="pre">vectorcall</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_SetVectorcall" title="Permalink to this definition">¶</a><br /></dt>
  234. <dd><p>Set the vectorcall field of a given function object <em>func</em>.</p>
  235. <p>Warning: extensions using this API must preserve the behavior
  236. of the unaltered (default) vectorcall function!</p>
  237. <div class="versionadded">
  238. <p><span class="versionmodified added">New in version 3.12.</span></p>
  239. </div>
  240. </dd></dl>
  241. <dl class="c function">
  242. <dt class="sig sig-object c" id="c.PyFunction_GetClosure">
  243. <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_GetClosure</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">op</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_GetClosure" title="Permalink to this definition">¶</a><br /></dt>
  244. <dd><em class="refcount">Return value: Borrowed reference.</em><p>Return the closure associated with the function object <em>op</em>. This can be <code class="docutils literal notranslate"><span class="pre">NULL</span></code>
  245. or a tuple of cell objects.</p>
  246. </dd></dl>
  247. <dl class="c function">
  248. <dt class="sig sig-object c" id="c.PyFunction_SetClosure">
  249. <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_SetClosure</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">op</span></span>, <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">closure</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_SetClosure" title="Permalink to this definition">¶</a><br /></dt>
  250. <dd><p>Set the closure associated with the function object <em>op</em>. <em>closure</em> must be
  251. <code class="docutils literal notranslate"><span class="pre">Py_None</span></code> or a tuple of cell objects.</p>
  252. <p>Raises <a class="reference internal" href="../library/exceptions.html#SystemError" title="SystemError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SystemError</span></code></a> and returns <code class="docutils literal notranslate"><span class="pre">-1</span></code> on failure.</p>
  253. </dd></dl>
  254. <dl class="c function">
  255. <dt class="sig sig-object c" id="c.PyFunction_GetAnnotations">
  256. <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_GetAnnotations</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">op</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_GetAnnotations" title="Permalink to this definition">¶</a><br /></dt>
  257. <dd><em class="refcount">Return value: Borrowed reference.</em><p>Return the annotations of the function object <em>op</em>. This can be a
  258. mutable dictionary or <code class="docutils literal notranslate"><span class="pre">NULL</span></code>.</p>
  259. </dd></dl>
  260. <dl class="c function">
  261. <dt class="sig sig-object c" id="c.PyFunction_SetAnnotations">
  262. <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_SetAnnotations</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">op</span></span>, <a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">annotations</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_SetAnnotations" title="Permalink to this definition">¶</a><br /></dt>
  263. <dd><p>Set the annotations for the function object <em>op</em>. <em>annotations</em>
  264. must be a dictionary or <code class="docutils literal notranslate"><span class="pre">Py_None</span></code>.</p>
  265. <p>Raises <a class="reference internal" href="../library/exceptions.html#SystemError" title="SystemError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SystemError</span></code></a> and returns <code class="docutils literal notranslate"><span class="pre">-1</span></code> on failure.</p>
  266. </dd></dl>
  267. <dl class="c function">
  268. <dt class="sig sig-object c" id="c.PyFunction_AddWatcher">
  269. <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_AddWatcher</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#c.PyFunction_WatchCallback" title="PyFunction_WatchCallback"><span class="n"><span class="pre">PyFunction_WatchCallback</span></span></a><span class="w"> </span><span class="n"><span class="pre">callback</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_AddWatcher" title="Permalink to this definition">¶</a><br /></dt>
  270. <dd><p>Register <em>callback</em> as a function watcher for the current interpreter.
  271. Return an ID which may be passed to <a class="reference internal" href="#c.PyFunction_ClearWatcher" title="PyFunction_ClearWatcher"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyFunction_ClearWatcher()</span></code></a>.
  272. In case of error (e.g. no more watcher IDs available),
  273. return <code class="docutils literal notranslate"><span class="pre">-1</span></code> and set an exception.</p>
  274. <div class="versionadded">
  275. <p><span class="versionmodified added">New in version 3.12.</span></p>
  276. </div>
  277. </dd></dl>
  278. <dl class="c function">
  279. <dt class="sig sig-object c" id="c.PyFunction_ClearWatcher">
  280. <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_ClearWatcher</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="n"><span class="pre">watcher_id</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyFunction_ClearWatcher" title="Permalink to this definition">¶</a><br /></dt>
  281. <dd><p>Clear watcher identified by <em>watcher_id</em> previously returned from
  282. <a class="reference internal" href="#c.PyFunction_AddWatcher" title="PyFunction_AddWatcher"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyFunction_AddWatcher()</span></code></a> for the current interpreter.
  283. Return <code class="docutils literal notranslate"><span class="pre">0</span></code> on success, or <code class="docutils literal notranslate"><span class="pre">-1</span></code> and set an exception on error
  284. (e.g. if the given <em>watcher_id</em> was never registered.)</p>
  285. <div class="versionadded">
  286. <p><span class="versionmodified added">New in version 3.12.</span></p>
  287. </div>
  288. </dd></dl>
  289. <dl class="c type">
  290. <dt class="sig sig-object c" id="c.PyFunction_WatchEvent">
  291. <span class="k"><span class="pre">type</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_WatchEvent</span></span></span><a class="headerlink" href="#c.PyFunction_WatchEvent" title="Permalink to this definition">¶</a><br /></dt>
  292. <dd><p>Enumeration of possible function watcher events:
  293. - <code class="docutils literal notranslate"><span class="pre">PyFunction_EVENT_CREATE</span></code>
  294. - <code class="docutils literal notranslate"><span class="pre">PyFunction_EVENT_DESTROY</span></code>
  295. - <code class="docutils literal notranslate"><span class="pre">PyFunction_EVENT_MODIFY_CODE</span></code>
  296. - <code class="docutils literal notranslate"><span class="pre">PyFunction_EVENT_MODIFY_DEFAULTS</span></code>
  297. - <code class="docutils literal notranslate"><span class="pre">PyFunction_EVENT_MODIFY_KWDEFAULTS</span></code></p>
  298. <div class="versionadded">
  299. <p><span class="versionmodified added">New in version 3.12.</span></p>
  300. </div>
  301. </dd></dl>
  302. <dl class="c type">
  303. <dt class="sig sig-object c" id="c.PyFunction_WatchCallback">
  304. <span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyFunction_WatchCallback</span></span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">(</span></span><a class="reference internal" href="#c.PyFunction_WatchEvent" title="PyFunction_WatchEvent"><span class="n"><span class="pre">PyFunction_WatchEvent</span></span></a><span class="w"> </span><span class="n"><span class="pre">event</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#c.PyFunctionObject" title="PyFunctionObject"><span class="n"><span class="pre">PyFunctionObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">func</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">new_value</span></span><span class="p"><span class="pre">)</span></span><a class="headerlink" href="#c.PyFunction_WatchCallback" title="Permalink to this definition">¶</a><br /></dt>
  305. <dd><p>Type of a function watcher callback function.</p>
  306. <p>If <em>event</em> is <code class="docutils literal notranslate"><span class="pre">PyFunction_EVENT_CREATE</span></code> or <code class="docutils literal notranslate"><span class="pre">PyFunction_EVENT_DESTROY</span></code>
  307. then <em>new_value</em> will be <code class="docutils literal notranslate"><span class="pre">NULL</span></code>. Otherwise, <em>new_value</em> will hold a
  308. <a class="reference internal" href="../glossary.html#term-borrowed-reference"><span class="xref std std-term">borrowed reference</span></a> to the new value that is about to be stored in
  309. <em>func</em> for the attribute that is being modified.</p>
  310. <p>The callback may inspect but must not modify <em>func</em>; doing so could have
  311. unpredictable effects, including infinite recursion.</p>
  312. <p>If <em>event</em> is <code class="docutils literal notranslate"><span class="pre">PyFunction_EVENT_CREATE</span></code>, then the callback is invoked
  313. after <cite>func</cite> has been fully initialized. Otherwise, the callback is invoked
  314. before the modification to <em>func</em> takes place, so the prior state of <em>func</em>
  315. can be inspected. The runtime is permitted to optimize away the creation of
  316. function objects when possible. In such cases no event will be emitted.
  317. Although this creates the possibility of an observable difference of
  318. runtime behavior depending on optimization decisions, it does not change
  319. the semantics of the Python code being executed.</p>
  320. <p>If <em>event</em> is <code class="docutils literal notranslate"><span class="pre">PyFunction_EVENT_DESTROY</span></code>, Taking a reference in the
  321. callback to the about-to-be-destroyed function will resurrect it, preventing
  322. it from being freed at this time. When the resurrected object is destroyed
  323. later, any watcher callbacks active at that time will be called again.</p>
  324. <p>If the callback sets an exception, it must return <code class="docutils literal notranslate"><span class="pre">-1</span></code>; this exception will
  325. be printed as an unraisable exception using <a class="reference internal" href="exceptions.html#c.PyErr_WriteUnraisable" title="PyErr_WriteUnraisable"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyErr_WriteUnraisable()</span></code></a>.
  326. Otherwise it should return <code class="docutils literal notranslate"><span class="pre">0</span></code>.</p>
  327. <p>There may already be a pending exception set on entry to the callback. In
  328. this case, the callback should return <code class="docutils literal notranslate"><span class="pre">0</span></code> with the same exception still
  329. set. This means the callback may not call any other API that can set an
  330. exception unless it saves and clears the exception state first, and restores
  331. it before returning.</p>
  332. <div class="versionadded">
  333. <p><span class="versionmodified added">New in version 3.12.</span></p>
  334. </div>
  335. </dd></dl>
  336. </section>
  337. <div class="clearer"></div>
  338. </div>
  339. </div>
  340. </div>
  341. <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
  342. <div class="sphinxsidebarwrapper">
  343. <div>
  344. <h4>Previous topic</h4>
  345. <p class="topless"><a href="set.html"
  346. title="previous chapter">Set Objects</a></p>
  347. </div>
  348. <div>
  349. <h4>Next topic</h4>
  350. <p class="topless"><a href="method.html"
  351. title="next chapter">Instance Method Objects</a></p>
  352. </div>
  353. <div role="note" aria-label="source link">
  354. <h3>This Page</h3>
  355. <ul class="this-page-menu">
  356. <li><a href="../bugs.html">Report a Bug</a></li>
  357. <li>
  358. <a href="https://github.com/python/cpython/blob/main/Doc/c-api/function.rst"
  359. rel="nofollow">Show Source
  360. </a>
  361. </li>
  362. </ul>
  363. </div>
  364. </div>
  365. </div>
  366. <div class="clearer"></div>
  367. </div>
  368. <div class="related" role="navigation" aria-label="related navigation">
  369. <h3>Navigation</h3>
  370. <ul>
  371. <li class="right" style="margin-right: 10px">
  372. <a href="../genindex.html" title="General Index"
  373. >index</a></li>
  374. <li class="right" >
  375. <a href="../py-modindex.html" title="Python Module Index"
  376. >modules</a> |</li>
  377. <li class="right" >
  378. <a href="method.html" title="Instance Method Objects"
  379. >next</a> |</li>
  380. <li class="right" >
  381. <a href="set.html" title="Set Objects"
  382. >previous</a> |</li>
  383. <li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
  384. <li><a href="https://www.python.org/">Python</a> &#187;</li>
  385. <li class="switchers">
  386. <div class="language_switcher_placeholder"></div>
  387. <div class="version_switcher_placeholder"></div>
  388. </li>
  389. <li>
  390. </li>
  391. <li id="cpython-language-and-version">
  392. <a href="../index.html">3.12.0 Documentation</a> &#187;
  393. </li>
  394. <li class="nav-item nav-item-1"><a href="index.html" >Python/C API Reference Manual</a> &#187;</li>
  395. <li class="nav-item nav-item-2"><a href="concrete.html" >Concrete Objects Layer</a> &#187;</li>
  396. <li class="nav-item nav-item-this"><a href="">Function Objects</a></li>
  397. <li class="right">
  398. <div class="inline-search" role="search">
  399. <form class="inline-search" action="../search.html" method="get">
  400. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
  401. <input type="submit" value="Go" />
  402. </form>
  403. </div>
  404. |
  405. </li>
  406. <li class="right">
  407. <label class="theme-selector-label">
  408. Theme
  409. <select class="theme-selector" oninput="activateTheme(this.value)">
  410. <option value="auto" selected>Auto</option>
  411. <option value="light">Light</option>
  412. <option value="dark">Dark</option>
  413. </select>
  414. </label> |</li>
  415. </ul>
  416. </div>
  417. <div class="footer">
  418. &copy; <a href="../copyright.html">Copyright</a> 2001-2023, Python Software Foundation.
  419. <br />
  420. This page is licensed under the Python Software Foundation License Version 2.
  421. <br />
  422. Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
  423. <br />
  424. See <a href="/license.html">History and License</a> for more information.<br />
  425. <br />
  426. The Python Software Foundation is a non-profit corporation.
  427. <a href="https://www.python.org/psf/donations/">Please donate.</a>
  428. <br />
  429. <br />
  430. Last updated on Oct 02, 2023.
  431. <a href="/bugs.html">Found a bug</a>?
  432. <br />
  433. Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.5.0.
  434. </div>
  435. </body>
  436. </html>