<?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>typing</title>
	<atom:link href="https://techgrowup.net/tag/typing/feed/" rel="self" type="application/rss+xml" />
	<link>https://techgrowup.net</link>
	<description>エンジニアを強くする</description>
	<lastBuildDate>Fri, 03 Jan 2025 01:44:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://techgrowup.net/wp-content/uploads/2021/05/hp-icon-150x150.png</url>
	<title>typing</title>
	<link>https://techgrowup.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Python開発入門60 typingモジュールガイド！型アノテーションでコード品質を向上</title>
		<link>https://techgrowup.net/python-typing/</link>
					<comments>https://techgrowup.net/python-typing/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Fri, 03 Jan 2025 01:44:30 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[typing]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=2288</guid>

					<description><![CDATA[はじめに Pythonは動的型付け言語で、変数に型を明示する必要がありません。この柔軟性は便利ですが、プロジェクトが大規模になると、型の不一致や予期しないエラーが発生しやすくなります。 typingモジュールは、Pyth [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading"><strong>はじめに</strong></h1>



<p class="wp-block-paragraph">Pythonは動的型付け言語で、変数に型を明示する必要がありません。この柔軟性は便利ですが、プロジェクトが大規模になると、型の不一致や予期しないエラーが発生しやすくなります。</p>



<p class="wp-block-paragraph"><strong>typingモジュール</strong>は、Pythonコードに型を明示的にアノテートすることで、以下のようなメリットを提供します：</p>



<ul class="wp-block-list">
<li>コードの可読性向上</li>



<li>IDEや型チェッカー（mypyなど）の活用によるエラー検出</li>



<li>ドキュメントとしての役割</li>
</ul>



<p class="wp-block-paragraph">本記事では、typingモジュールの基本的な使い方から、実践的な活用方法までをわかりやすく解説します。</p>



<h2 class="wp-block-heading"><strong>typingモジュールとは</strong></h2>



<h3 class="wp-block-heading"><strong>typingモジュールの概要</strong></h3>



<p class="wp-block-paragraph"><strong>typingモジュール</strong>は、Python 3.5で導入された型ヒントを提供する標準モジュールです。型アノテーションを追加することで、コードの品質を向上させることができます。</p>



<h3 class="wp-block-heading"><strong>主な機能</strong></h3>



<ol class="wp-block-list">
<li><strong>基本型ヒント</strong>: 変数や関数の引数・戻り値に型を指定する。</li>



<li><strong>ジェネリック型</strong>: リストや辞書などのコンテナ型の中身を指定する。</li>



<li><strong>高度な型ヒント</strong>: ユニオン型、オプショナル型、カスタム型などをサポート</li>
</ol>



<h2 class="wp-block-heading"><strong>typingモジュールの基本的な使い方</strong></h2>



<h3 class="wp-block-heading"><strong>変数に型を指定する</strong></h3>



<p class="wp-block-paragraph">変数に型を指定する基本例を紹介します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="from typing import List

# 型アノテーションを追加
name: str = &quot;John&quot;
age: int = 25
scores: List[int] = [90, 85, 80]" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> typing </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> List</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 型アノテーションを追加</span></span>
<span class="line"><span style="color: #D4D4D4">name: </span><span style="color: #4EC9B0">str</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;John&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">age: </span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">25</span></span>
<span class="line"><span style="color: #D4D4D4">scores: List[</span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">] = [</span><span style="color: #B5CEA8">90</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">85</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">80</span><span style="color: #D4D4D4">]</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong>説明</strong></p>



<ul class="wp-block-list">
<li><strong><code>str</code></strong>: 文字列型。</li>



<li><strong><code>int</code></strong>: 整数型。</li>



<li><strong><code>List[int]</code></strong>: 整数型のリスト。</li>
</ul>



<h3 class="wp-block-heading"><strong>2. 関数の型アノテーション</strong></h3>



<p class="wp-block-paragraph">関数の引数と戻り値に型を指定します。</p>



<h6 class="wp-block-heading"><strong>例：型アノテーションを使った関数</strong></h6>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="from typing import List

def calculate_average(scores: List[int]) -&gt; float:
    return sum(scores) / len(scores)

# 使用例
average = calculate_average([90, 80, 85])
print(f&quot;平均点: {average}&quot;)" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> typing </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> List</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">calculate_average</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">scores</span><span style="color: #D4D4D4">: List[</span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">]) -&gt; </span><span style="color: #4EC9B0">float</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">sum</span><span style="color: #D4D4D4">(scores) / </span><span style="color: #DCDCAA">len</span><span style="color: #D4D4D4">(scores)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 使用例</span></span>
<span class="line"><span style="color: #D4D4D4">average = calculate_average([</span><span style="color: #B5CEA8">90</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">80</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">85</span><span style="color: #D4D4D4">])</span></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;平均点: </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">average</span><span style="color: #569CD6">}</span><span style="color: #CE9178">&quot;</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong>説明</strong></p>



<ul class="wp-block-list">
<li><strong><code>List[int]</code></strong>: 引数が整数型のリストであることを示す。</li>



<li><strong><code>-> float</code></strong>: 戻り値が浮動小数点数型であることを示す。</li>
</ul>



<h3 class="wp-block-heading"><strong>型チェッカーの活用</strong></h3>



<p class="wp-block-paragraph">型アノテーションは、IDEや型チェッカー（例：mypy）と連携して、コードの静的解析を可能にします。</p>



<h6 class="wp-block-heading"><strong>例：mypyでの型チェック</strong></h6>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="pip install mypy
mypy script.py" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">pip</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">install</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">mypy</span></span>
<span class="line"><span style="color: #DCDCAA">mypy</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">script.py</span></span></code></pre></div>



<h2 class="wp-block-heading"><strong>コンテナ型の利用</strong></h2>



<h3 class="wp-block-heading"><strong>ジェネリック型</strong></h3>



<p class="wp-block-paragraph">ジェネリック型を使って、コンテナ型の中身の型を指定します。</p>



<h6 class="wp-block-heading"><strong>例：ジェネリック型の使用</strong></h6>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="from typing import Dict, List

scores: Dict[str, int] = {&quot;John&quot;: 90, &quot;Alice&quot;: 85}
names: List[str] = [&quot;John&quot;, &quot;Alice&quot;]" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> typing </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> Dict, List</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">scores: Dict[</span><span style="color: #4EC9B0">str</span><span style="color: #D4D4D4">, </span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">] = {</span><span style="color: #CE9178">&quot;John&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #B5CEA8">90</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&quot;Alice&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #B5CEA8">85</span><span style="color: #D4D4D4">}</span></span>
<span class="line"><span style="color: #D4D4D4">names: List[</span><span style="color: #4EC9B0">str</span><span style="color: #D4D4D4">] = [</span><span style="color: #CE9178">&quot;John&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&quot;Alice&quot;</span><span style="color: #D4D4D4">]</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong>説明</strong></p>



<ul class="wp-block-list">
<li><strong><code>Dict[str, int]</code></strong>: キーが文字列型、値が整数型の辞書。</li>



<li><strong><code>List[str]</code></strong>: 文字列型のリスト。</li>
</ul>



<h3 class="wp-block-heading"><strong>Tuple型</strong></h3>



<p class="wp-block-paragraph">タプル型では、要素ごとに異なる型を指定できます。</p>



<h6 class="wp-block-heading"><strong>例：タプル型の使用</strong></h6>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="from typing import Tuple

person: Tuple[str, int] = (&quot;Alice&quot;, 30)" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> typing </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> Tuple</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">person: Tuple[</span><span style="color: #4EC9B0">str</span><span style="color: #D4D4D4">, </span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">] = (</span><span style="color: #CE9178">&quot;Alice&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">30</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<h2 class="wp-block-heading"><strong>高度な型ヒント</strong></h2>



<h3 class="wp-block-heading"><strong>Union型</strong></h3>



<p class="wp-block-paragraph">複数の型を受け入れる場合、<code>Union</code>を使用します。</p>



<h6 class="wp-block-heading"><strong>例：Union型の使用</strong></h6>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="from typing import Union

def add(x: Union[int, float], y: Union[int, float]) -&gt; float:
    return x + y

result = add(3, 4.5)
print(result)" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> typing </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> Union</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">add</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">: Union[</span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">, </span><span style="color: #4EC9B0">float</span><span style="color: #D4D4D4">], </span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4">: Union[</span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">, </span><span style="color: #4EC9B0">float</span><span style="color: #D4D4D4">]) -&gt; </span><span style="color: #4EC9B0">float</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> x + y</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">result = add(</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">4.5</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(result)</span></span></code></pre></div>



<h3 class="wp-block-heading"><strong>Optional型</strong></h3>



<p class="wp-block-paragraph">値が<code>None</code>になる可能性がある場合、<code>Optional</code>を使用します。</p>



<h6 class="wp-block-heading"><strong>例：Optional型の使用</strong></h6>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="from typing import Optional

def greet(name: Optional[str]) -&gt; str:
    if name:
        return f&quot;Hello, {name}!&quot;
    return &quot;Hello, World!&quot;

print(greet(&quot;Alice&quot;))
print(greet(None))" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> typing </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> Optional</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">greet</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">name</span><span style="color: #D4D4D4">: Optional[</span><span style="color: #4EC9B0">str</span><span style="color: #D4D4D4">]) -&gt; </span><span style="color: #4EC9B0">str</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> name:</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;Hello, </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">name</span><span style="color: #569CD6">}</span><span style="color: #CE9178">!&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Hello, World!&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(greet(</span><span style="color: #CE9178">&quot;Alice&quot;</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(greet(</span><span style="color: #569CD6">None</span><span style="color: #D4D4D4">))</span></span></code></pre></div>



<h3 class="wp-block-heading"><strong>Callable型</strong></h3>



<p class="wp-block-paragraph">関数を引数として受け取る場合、<code>Callable</code>を使用します。</p>



<h6 class="wp-block-heading"><strong>例：Callable型の使用</strong></h6>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="from typing import Callable

def execute(func: Callable[[int, int], int], x: int, y: int) -&gt; int:
    return func(x, y)

def add(x: int, y: int) -&gt; int:
    return x + y

result = execute(add, 3, 5)
print(result)" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> typing </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> Callable</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">execute</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">func</span><span style="color: #D4D4D4">: Callable[[</span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">, </span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">], </span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">], </span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">: </span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4">: </span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">) -&gt; </span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> func(x, y)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">add</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">: </span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4">: </span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">) -&gt; </span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> x + y</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">result = execute(add, </span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(result)</span></span></code></pre></div>



<h2 class="wp-block-heading"><strong>typingモジュールの活用例</strong></h2>



<h3 class="wp-block-heading"><strong>データクラスとの併用</strong></h3>



<p class="wp-block-paragraph">データクラスと組み合わせることで、型安全なクラスを作成できます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="from dataclasses import dataclass
from typing import List

@dataclass
class Student:
    name: str
    scores: List[int]

student = Student(name=&quot;Alice&quot;, scores=[90, 85, 88])
print(student)" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> dataclasses </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> dataclass</span></span>
<span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> typing </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> List</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">@dataclass</span></span>
<span class="line"><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Student</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    name: </span><span style="color: #4EC9B0">str</span></span>
<span class="line"><span style="color: #D4D4D4">    scores: List[</span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">]</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">student = Student(</span><span style="color: #9CDCFE">name</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;Alice&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">scores</span><span style="color: #D4D4D4">=[</span><span style="color: #B5CEA8">90</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">85</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">88</span><span style="color: #D4D4D4">])</span></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(student)</span></span></code></pre></div>



<h3 class="wp-block-heading"><strong>型エイリアスの使用</strong></h3>



<p class="wp-block-paragraph">長い型を簡略化するために、型エイリアスを使用します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="from typing import List

ScoreList = List[int]

def calculate_average(scores: ScoreList) -&gt; float:
    return sum(scores) / len(scores)" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> typing </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> List</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">ScoreList = List[</span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">]</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">calculate_average</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">scores</span><span style="color: #D4D4D4">: ScoreList) -&gt; </span><span style="color: #4EC9B0">float</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">sum</span><span style="color: #D4D4D4">(scores) / </span><span style="color: #DCDCAA">len</span><span style="color: #D4D4D4">(scores)</span></span></code></pre></div>



<h2 class="wp-block-heading"><strong>注意点</strong></h2>



<ol class="wp-block-list">
<li><strong>動的型付けとのバランス</strong><br>型アノテーションは必須ではありませんが、適切に使うことで開発効率を向上させます。</li>



<li><strong>型ヒントの範囲</strong><br>型ヒントは実行時に強制されないため、型チェッカーを活用して静的解析を行いましょう。</li>
</ol>



<h2 class="wp-block-heading"><strong>まとめ</strong></h2>



<p class="wp-block-paragraph">Pythonのtypingモジュールを活用することで、コードの品質や保守性を向上させることができます。本記事で紹介した基本的な型ヒントの使い方から応用例を参考に、プロジェクトでtypingを活用してみてください！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/python-typing/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
