<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>「partial」タグの記事一覧Python Tech</title>
	<atom:link href="https://tech.nkhn37.net/tag/partial/feed/" rel="self" type="application/rss+xml" />
	<link>https://tech.nkhn37.net</link>
	<description>Python学習サイト</description>
	<lastBuildDate>Sat, 01 Nov 2025 09:16:46 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://tech.nkhn37.net/wp-content/uploads/2021/01/cropped-lion-normal-clear-1-32x32.png</url>
	<title>「partial」タグの記事一覧Python Tech</title>
	<link>https://tech.nkhn37.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Python】partial関数の使い方の基本 ~関数の部分適用~</title>
		<link>https://tech.nkhn37.net/python-partial-basic/</link>
					<comments>https://tech.nkhn37.net/python-partial-basic/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Fri, 25 Aug 2023 20:00:00 +0000</pubDate>
				<category><![CDATA[functools]]></category>
		<category><![CDATA[partial]]></category>
		<category><![CDATA[クロージャ]]></category>
		<category><![CDATA[部分適用]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=8813</guid>

					<description><![CDATA[Python で partial 関数を使って関数の部分適用をする方法を解説します。 partial 関数で関数の部分適用をする partial 関数は、関数と引数の値を受け取ることで関数の部分適用をすることができる関数 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Python で <span class="marker"><strong><code>partial</code> 関数を使って関数の部分適用をする方法</strong></span>を解説します。</p>



<h2 class="wp-block-heading jinr-heading d--bold"><code>partial</code> 関数で関数の部分適用をする</h2>



<p class="wp-block-paragraph"><span class="marker"><strong><code>partial</code></strong></span> 関数は、関数と引数の値を受け取ることで関数の部分適用をすることができる関数です。<code>partial</code> 関数は、<span class="marker"><strong><code>functools</code></strong></span> モジュールに含まれています。</p>



<p class="wp-block-paragraph">このように引数に関数を受け取る関数は<span class="marker"><strong>高階関数</strong></span>と言います。高階関数は、関数を操作するための強力なツールであり、関数の部分適用は、関数型プログラミング言語でも重要な概念です。</p>



<p class="wp-block-paragraph">Python はマルチパラダイムの言語と言われているため、厳密ではありませんが関数型のプログラミングスタイルもサポートしており、<code>partial</code> 関数が利用できます。</p>



<p class="wp-block-paragraph">本記事では、<span class="marker"><strong><code>partial</code> 関数を用いて関数の部分適用をする方法の基本</strong></span>を紹介します。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph"><code>partial</code> 関数と同様に関数型プログラミングに関連のある関数として <code>map</code> 関数、<code>filter</code> 関数、<code>reduce</code> 関数があります。以下ページも参考にしてください。</p>



<ul class="wp-block-list jinr-list">
<li><a href="https://tech.nkhn37.net/python-map-basic/" target="_blank" rel="noreferrer noopener">map関数の使い方の基本 ~要素への関数適用~</a></li>



<li><a href="https://tech.nkhn37.net/python-filter-basic/" target="_blank" rel="noreferrer noopener">filter関数の使い方の基本 ~条件を満たす要素を抽出~</a></li>



<li><a href="https://tech.nkhn37.net/python-reduce-basic/" target="_blank" rel="noreferrer noopener">reduce関数の使い方の基本 ~要素の畳み込み~</a></li>
</ul>
</div>
		</div></section>



<h3 class="wp-block-heading jinr-heading d--bold">関数の部分適用とは</h3>



<p class="wp-block-paragraph">関数の<span class="marker"><strong>部分適用</strong></span>は、数学やプログラミングにおいて重要な概念です。部分適用は、ある関数に対して一部の引数を固定して新しい関数を作る手続きを言います。これにより関数をより柔軟に再利用したり、複雑な操作をシンプルに表現することができます。</p>



<p class="wp-block-paragraph">例として、以下のような数学の関数を考えます。</p>



<p class="wp-block-paragraph">\begin{eqnarray}<br>f(x, y) = x^{y}<br>\end{eqnarray}</p>



<p class="wp-block-paragraph">この関数は $x$ を $y$ 乗する関数で、Python でも組み込みの関数として <code>pow(x, y)</code> として計算することができます。ここで、$y=2$ と固定して新しい関数を作ることを考え、新しい関数を $g(x)$ とおくと以下のようになります。</p>



<p class="wp-block-paragraph">\begin{eqnarray}<br>g(x) = f(x, 2) = x^{2}<br>\end{eqnarray}</p>



<p class="wp-block-paragraph">このように元の関数 $f(x, y)$ の一部の引数を固定して新しい関数 $g(x)$ を作成するのが部分適用の基本的な考え方です。</p>



<p class="wp-block-paragraph">このような部分適用を実装する際に <code>partial</code> 関数を使用できます。以降で、具体的な <code>partial</code> 関数の使い方を説明します。</p>



<h3 class="wp-block-heading jinr-heading d--bold"><code>partial</code> 関数の基本的な使い方</h3>



<p class="wp-block-paragraph"><span class="marker"><strong><code>partial</code></strong></span> 関数の基本的な構文は以下のようになります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from functools import partial

partial_func = partial(関数, 引数=値)</pre>



<p class="wp-block-paragraph"><code>partial</code> 関数は、<code>functools</code> モジュール内にあるためインポートが必要です。</p>



<p class="wp-block-paragraph"><code>partial</code> 関数は、対象の関数と固定したい引数とその値を指定します。返却値は、引数を指定した値で固定した関数であり、以降の処理で関数として使用できます。</p>



<h4 class="wp-block-heading jinr-heading d--bold">基本的な使い方</h4>



<p class="wp-block-paragraph">部分適用の説明で使用した $f(x, y) = x^{y}$ で $y$ を固定する例をつかって、<code>partial</code> 関数の使い方を見ていきましょう。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from functools import partial

# pow(base, exp)においてexp=2に固定する
pow2 = partial(pow, exp=2)
# 4 ** 2 = 16
print(pow2(4))
# 5 ** 2 = 25
print(pow2(5))

# pow(base, exp)においてexp=3に固定する
pow3 = partial(pow, exp=3)
# 4 ** 3 = 64
print(pow3(4))
# 5 ** 3 = 125
print(pow3(5))</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
16
25
64
125</pre>



<p class="wp-block-paragraph">関数として、Python の組み込みである <code>pow(base, exp)</code> を使用しています。</p>



<p class="wp-block-paragraph"><code>partial</code> 関数の呼び出しでは「<code>pow2 = partial(pow, exp=2)</code>」というように関数 <code>pow</code> と固定する <code>exp</code> 引数の値を指定しています。ここで<span class="marker"><strong>ポイントは、関数を渡す際に <code>()</code> がない</strong></span>ことです。関数は <code>pow(4, 2)</code> のように <code>()</code> で引数を指定すると関数を実行することを意味しますが、<code>()</code> がない場合は関数そのものを表します。<code>partial</code> 関数は、受け取った <code>pow</code> を関数の内部処理で使用します。</p>



<p class="wp-block-paragraph">返却値の <code>pow2</code> は、そのものが引数<code>exp=2</code>に固定した <code>pow</code> 関数となっています。そのため、<code>pow2(4)</code> は「$4^2=16$」、<code>pow2(5)</code> は「$5^2=25$」となります。</p>



<p class="wp-block-paragraph"><code>partial</code> 関数の便利なところは 3 乗の関数を作ろうと思ったら「<code>pow3 = partial(pow, exp=3)</code>」と簡単に作れることです。この場合は、<code>pow3(4)</code> は「$4^3=64$」、<code>pow3(5)</code> は「$5^3=125$」となります。</p>



<p class="wp-block-paragraph">今回は、組み込み関数の <code>pow</code> を例にしましたが独自に作った関数でも同様のことがができます。このように <code>partial</code> 関数で、関数の部分適用を簡単に実現できます。</p>



<h4 class="wp-block-heading jinr-heading d--bold">部分適用とクロージャ</h4>



<p class="wp-block-paragraph">部分適用と似た概念として<span class="marker"><strong>クロージャ</strong></span>があります。部分適用とクロージャは、関数の振る舞いを変更するための技術としてよく聞きますが、それぞれ異なるコンセプトです。</p>



<p class="wp-block-paragraph">クロージャは、関数の外部スコープの変数を参照し、その変数の値を保持する関数のことを言います。例えば、外部の関数スコープで定義された変数を内部の関数で使用する場合は、内部関数はクロージャとして振舞うことになります。</p>



<p class="wp-block-paragraph">一方で、部分適用は関数のいくつかの引数を固定し、新しい関数を生成する手法のことを指します。この新しい関数は固定されていない引数のみ受け取って動作します。</p>



<p class="wp-block-paragraph">クロージャの場合は、以下のようなコード例となります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">def make_pow(factor):
    # my_powという内部関数は、外部関数のfactor引数を参照する
    def my_pow(x):
        return x ** factor
    return my_pow


pow2 = make_pow(2)

# 4 ** 2 = 16
print(pow2(4))
# 5 ** 2 = 25
print(pow2(5))</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
16
25</pre>



<p class="wp-block-paragraph">上記例では、<code>make_pow</code> 関数の中に内部関数として <code>my_pow</code> という関数を作成しています。この時、内部関数である <code>my_pow</code> 関数は外部関数の <code>factor</code> 引数を参照しており、<code>make_pow</code> 関数は戻り値として、<code>factor</code> を保持する <code>my_pow</code> 関数を返却します。</p>



<p class="wp-block-paragraph"><code>partial</code> を使用した部分適用と上記例で示したクロージャは同じような動作をすることが分かりますが、実装方法や背後にある概念が異なっています。</p>



<p class="wp-block-paragraph">部分適用は関数の引数の一部を固定することを主な目的とする一方で、クロージャは外部関数の変数を内部関数が参照・保持する機能を持っています。</p>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph">Python で <span class="marker"><strong><code>partial</code> 関数を使って関数の部分適用をする方法</strong></span>を解説しました。</p>



<p class="wp-block-paragraph"><code>partial</code> 関数は、関数と固定する引数の値を受け取ることで関数の部分適用をすることができる関数です。<code>partial</code> 関数は、<code>functools</code> モジュールに含まれています。</p>



<p class="wp-block-paragraph">この記事では、<code>partial</code> 関数を使って関数の部分適用をする例を紹介しました。<code>partial</code> 関数は、関数をより柔軟に再利用したり、複雑な操作をシンプルに表現したりする際に非常に便利な関数のため、使い方を理解しておくようにしましょう。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/python-tech-sample-source/tree/main/python-libraries/functools/partial" target="_blank" rel="noreferrer noopener">GitHub</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/python-partial-basic/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: tech.nkhn37.net @ 2026-06-14 08:24:29 by W3 Total Cache
-->