CINXE.COM

Функции, директивы def, return Python с нуля до бесконечности

<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <link rel="stylesheet" href="/pyplanet_tmpl/fonts/style.css"> <link rel="stylesheet" href="/pyplanet_tmpl/css/new_style.css"> <title>Функции, директивы def, return Python с нуля до бесконечности</title> <meta name="description" content='Основы создания и использования функций в Python. Синтаксис, параметры, возврат значений и примеры.'> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon.png"> <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> <link rel="manifest" href="/site.webmanifest"> <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"> <meta name="msapplication-TileColor" content="#da532c"> <meta name="theme-color" content="#f5f5f5"> <script type="text/javascript" > (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(97429815, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); </script> <noscript><div><img src="https://mc.yandex.ru/watch/97429815" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <script>window.yaContextCb=window.yaContextCb||[]</script> <script src="https://yandex.ru/ads/system/context.js" async></script> </head> <body> <header> <div class="logo"><a href="/"><img src="/pyplanet_tmpl/img/python-3.png"></a></div> <div class="logo-letters"><a href="/">Pyplanet — Python с нуля до бесконечности</a></div> </header> <div class="category-menu"> <a href="/category/osnovy.html">Основы</a> <a href="/category/enhanced.html">Продвинутый</a> <a href="/category/guidebook.html">Справочник</a> <a href="/pages/tutorials.html">Руководства</a> <a href="/pages/books.html">Книги</a> <a href="/pages/courses.html">Курсы</a> </div> <div class="main-content"> <div class="content"> <article class="post"> <h1>Функции, директивы def, return</h1> <div class="text-block"> <div id="yandex_rtb_R-A-9079088-3" style="max-height: 10%"></div> <div id="content_top" style="display: none"> <a target="_blank" href="https://zallj.com/g/qqb62fps0r99b979a60661cec322b98fba714163/?erid=5jtCeReNwxHpfQTDve31wmc"> <img src="/pyplanet_tmpl/img/content_top.png"> </a> </div> <script> window.yaContextCb.push(() => { Ya.Context.AdvManager.render({ "blockId": "R-A-9079088-3", "renderTo": "yandex_rtb_R-A-9079088-3" }); }) setTimeout( function () { if (document.getElementById("yandex_rtb_R-A-9079088-3").clientHeight === 0) { document.getElementById("content_top").style.display = 'block'; } }, 500); </script> <p>Часто некоторый код нужно выполнить несколько раз. Либо мы хотим как-то изолировать некоторый код, и вызывать его в необходимом месте.</p> <p>Этого можно достичь написанием <strong>функции</strong>.</p> <p>Функция в python - объект, принимающий аргументы и возвращающий значение. Обычная функция определяется с помощью инструкции <strong>def</strong>.</p> <p>Определим простейшую функцию:</p> <div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y</span> </pre></div> <p>После инструкции <strong>def</strong> идёт <em>имя функции</em>. Можно воспринимать это как присвоение переменной. Теперь в рамках программы <tt class="docutils literal">add</tt> - это функция. Если после этого написать, например, <tt class="docutils literal">add = 5</tt>, то функция будет &quot;потеряна&quot;.</p> <p>Затем, в скобках, пишутся <strong>аргументы функции</strong>. У нашей функции 2 аргумента, которые внутри функции будут называться <tt class="docutils literal">x</tt> и <tt class="docutils literal">y</tt>.</p> <div class="note docutils container"> <p>Эти аргументы не имеют никакого отношения к переменным, которые будут в главной программе. То есть, можно вызывать функцию, называя извне аргументы не <tt class="docutils literal">x</tt> и <tt class="docutils literal">y</tt>, а по-другому:</p> <div class="highlight"><pre><span></span><span class="n">a</span> <span class="o">=</span> <span class="mi">1</span> <span class="n">b</span> <span class="o">=</span> <span class="mi">2</span> <span class="n">add</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span> </pre></div> </div> <p>Аргументов у Вашей функции может быть сколько угодно (или не быть вовсе).</p> <p>Инструкция <strong>return</strong> говорит, что нужно вернуть значение. В нашем случае функция возвращает сумму <tt class="docutils literal">x</tt> и <tt class="docutils literal">y</tt>.</p> <p>Внутри функции может быть какой угодно код, но, если мы хотим вернуть значение, мы обязаны написать <tt class="docutils literal">return ЧТО_ТО</tt>. Если этого не написать, то функция вернёт специальное значение <tt class="docutils literal">None</tt> (некоторый аналог <em>NULL</em> из других языков программирования).</p> <p>Код после достижения return внутри функции не выполняется.</p> <p>Внутри программы функция может быть вызвана. Например:</p> <div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y</span> <span class="nb">print</span><span class="p">(</span><span class="n">add</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span> <span class="c1"># Выведет 3</span> </pre></div> <div class="section" id="section-1"> <h2>Значения по умолчанию</h2> <p>Аргументы можно инициализировать значениями по умолчанию:</p> <div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y</span> </pre></div> <p>Тогда, если мы вызовем функцию <tt class="docutils literal">add(1)</tt>, то выведется 1, так как внутри функции <tt class="docutils literal">x = 1, y = 0</tt></p> </div> <div class="section" id="section-2"> <h2>Именованные аргументы</h2> <p>Функцию можно также вызвать с аргументами по их имени, а не позиции, например:</p> <div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y</span> <span class="nb">print</span><span class="p">(</span><span class="n">add</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">2</span><span class="p">))</span> <span class="c1"># Выведет 3</span> <span class="nb">print</span><span class="p">(</span><span class="n">add</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="mi">2</span><span class="p">))</span> <span class="c1"># Выведет 3</span> </pre></div> <p>Однако по имени можно передавать только последние аргументы. То есть, можно вызвать <tt class="docutils literal">add(1, y=2)</tt>, <tt class="docutils literal">add(1, 2)</tt>, <tt class="docutils literal">add(x=1, y=2)</tt>, но нельзя <tt class="docutils literal">add(2, x=1)</tt>.</p> </div> <div id="yandex_rtb_R-A-9079088-1" style="max-height: 25%"></div> <div id="content_bottom" style="display: none"> <a target="_blank" href="https://zallj.com/g/qqb62fps0r99b979a60661cec322b98fba714163/?erid=5jtCeReNwxHpfQTDve31wmc"> <img src="/pyplanet_tmpl/img/content_bottom.png"> </a> </div> <script> window.yaContextCb.push(() => { Ya.Context.AdvManager.render({ "blockId": "R-A-9079088-1", "renderTo": "yandex_rtb_R-A-9079088-1" }); }) setTimeout( function () { if (document.getElementById("yandex_rtb_R-A-9079088-3").clientHeight === 0) { document.getElementById("content_bottom").style.display = 'block'; } }, 1000); </script> <nav class="nav-cycle"> <div> <a href="/article/string-formatting.html">← Предыдущая часть</a> </div> <div> <a href="/category/osnovy.html">В категорию "Основы Python"</a> </div> <div> <a href="/article/lambda.html">Следующая часть →</a> </div> </nav> </div> </article> </div> <div class="sidebar"> <div class="sticky"> <div class="button-group"> <a target="_blank" href="https://t.me/pyplanet"><button class="telegram-button">✈ Telegram</button></a> <a target="_blank" href="https://www.tinkoff.ru/cf/6xIycbvJQF9"><button class="tinkoff-button">❤️ Поддержать</button></a> <a target="_blank" href="https://forms.gle/Trx4h8zZwKyBpsyY6"><button class="ask-button">❓ Задать вопрос</button></a> </div> <div class="latest-articles"> <h3>Популярные статьи</h3> <div class="article"> <h4><a href="https://pyplanet.ru/article/range-object.html">Объект range</a></h4> <p>Изучение объекта range в Python. Создание последовательностей чисел, использование в циклах и примеры применения.</p> </div> <div class="article"> <h4><a href="https://pyplanet.ru/article/pep-0257.html">PEP 257 - соглашения для строк документации (docstrings)</a></h4> <p>Целью данного PEP является стандартизация структуры строк документации: что они должны содержать и что должны объяснять.</p> </div> <div class="article"> <h4><a href="https://pyplanet.ru/pages/courses-free.html">Бесплатные курсы Python</a></h4> <p>Обзор бесплатных курсов, обучающих видео по языку программирования Python</p> </div> </div> </div> </div> </div> <footer> <p>&copy; 2025 <a href="https://pyplanet.ru/">pyplanet - Python с нуля до бесконечности</a></p> </footer> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10