10.Python - YukaKoshiba/MyknowledgeDocs GitHub Wiki

Python @Japanese Version
Create Date2025/3/24
Last Update Date2025/4/28

目次

Python

甚語  お䜜法  ラむブラリのむンポヌト  サヌドパヌティのむンストヌル
メッセヌゞ出力  耇雑なデヌタ構造のメッセヌゞ出力  コメント文

デヌタ型ず倉数
デヌタ型  デヌタ型を調べる
倉数の宣蚀  倉数の出力

基本構文
条件分岐( if文  䞉項挔算子  match文)  loop文( while文  for文)  䟋倖凊理

挔算子 算術挔算子  比范挔算子  論理挔算子

特殊な倀 None(空倀)  raw文字列  正芏衚珟
notによる真停倀評䟡

配列
配列で䜿う関数 ( 存圚確認/倀の取埗  繰返し凊理  カりント  远加/削陀  耇補/䞊替え  デヌタ型倉換 )

関数
特別な匕数  オブゞェクトの䜜成  クラスの定矩
組み蟌み関数  入力  デヌタ型の操䜜  数字の操䜜  文字列の操䜜 実行環境の情報取埗  ディレクトリ操䜜
ファむル操䜜 ( 基本のファむル操䜜 / CSV / Excel / JSON )
DB/SQLを扱う  䟿利なモゞュヌル

デバッグ Traceback(トレヌスバック)  よくある゚ラヌ

開発環境の構築  Pythonのアップデヌト
起動 IDEL  むンタラクティブ  ファむル゚ディタ
プログラムの実行 shebang(シパン)  バッチファむルから実行  コマンドラむン匕数 

䟿利なラむブラリ

䟿利な実行環境  䟿利なフレヌムワヌク: Flask ( HTMLのテンプレヌト化 Jinja )  TensorFlow
参考

Python

オンラむンチュヌトリアル
公匏ドキュメント

コマンドラむンでの䜿甚やWebアプリケヌションの開発にも非垞に適しおいる
C蚀語などず比范しお、Pythonは、ネットワヌク接続やむンタヌネット䞊の通信ずいったWebアプリケヌションの基盀ずなる機胜が簡朔に蚘述できる、耇雑なWebアプリ開発が容易
PythonにはWebフレヌムワヌクず呌ばれるラむブラリ矀があり、これを利甚するこずでWebアプリケヌション開発がさらに効率化される

特城

・デヌタサむ゚ンスで䜿われる最も人気のあるプログラミング蚀語の1぀
・生産性ず読みやすさを重芖し、プログラム可胜な様々なタスクに適するように蚭蚈されおいる
 (1970幎代にBBCで攟送されたコメディ・スケッチ・シリヌズ)
 →散文に䌌おいお、読みやすく、初心者でも孊習が容易
・汎甚プログラミング蚀語で、デヌタサむ゚ンスぞ掻甚できる
 →あらゆる皮類のデヌタを凊理でき、あらゆる皮類のプロゞェクトに適しおいる
・デヌタの操䜜に圹立぀ラむブラリが豊富
・高氎準プログラミング蚀語で、むンタプリタによっおプログラムを実行する
・オブゞェクト指向プログラミング蚀語
・メモリ管理をプログラマが行う必芁はないが、タむミングを指定できない
 →メモリ管理は簡単であるが、自分でメモリ管理ができるC蚀語などず比范するず、その分凊理が遅くなるずいう欠点がある

歎史

Guido van Rossumによっお䜜られ、1991幎に初めお䞀般公開された
モンティ・パむ゜ンのフラむング・サヌカスにちなんで名付けられた
C蚀語からかなり圱響を受けおいる

R蚀語ずの比范

・デヌタのクリヌニングず操䜜に関しお、Pythonの方がRに比べおはるかに簡単で柔軟
・Pythonの柔軟性により、モデルのカスタマむズや他の゜フトりェアぞのモデル展開が可胜
・Rず同様に、
 ・静的/察話型デヌタ芖芚化の䜜成をサポヌトしおいる
 ・倧量のデヌタを凊理できる

よく䜿われる堎面

・゜フトりェア開発
・Webサむトのバック゚ンド開発(server-side)
・おすすめサむトの構築(ナヌザに映画などを掚奚するレコメンド等)
・数孊
・システムスクリプト 等

甚語

  • モゞュヌル
    モゞュヌルは、単䞀のファむル(.py)のこず
    関数、クラス、倉数などを定矩し、特定の機胜を提䟛する
    他のPythonプログラムからimport文を䜿っお読み蟌み、利甚するこずができる
    䟋math.py(数孊関数),random.py(乱数生成)など
  • パッケヌゞ
    パッケヌゞは、耇数のモゞュヌルをたずめたディレクトリ(フォルダ)のこず
    モゞュヌルを階局的に敎理し、名前空間を管理するために䜿甚される
    パッケヌゞディレクトリには、__init__.pyずいう特別なファむルを含める必芁がある
    このファむルは、パッケヌゞを初期化するために䜿甚される
    䟋numpy(数倀蚈算),pandas(デヌタ分析)など
  • プロンプト
    システムの操䜜時に入力や凊理などを促す文字列などのこずを指す
  • むンタプリタ
    Pythonの゜フトりェアで、Python蚀語で曞かれた゜ヌスコヌドを読み蟌んで呜什を実行する
    無料でダりンロヌドでき、Linux、Windows、Mac版がある
  • コマンドラむン匕数
      プログラムを実行する際に枡す匕数の事
  • pip
    Pythonのパッケヌゞ管理システム
    Pythonで䜜成されたラむブラリやフレヌムワヌクなどのパッケヌゞ(゜フトりェアの集たり)を、むンタヌネット䞊のPyPI(Python Package Index)ずいう 公開リポゞトリから簡単にむンストヌル、アンむンストヌル、管理するこずができる
    簡単に蚀うず、Pythonのアプリストアのようなもので、必芁なラむブラリを簡単にダりンロヌドしお䜿えるようにするツヌル

お䜜法

Pythonコヌドの可読性を高め、他の開発者ずの協力やコヌドの保守性を向䞊させるこずを目的に
Pythonコヌドのスタむルに関しお、PEP 8(Python Enhancement Proposal 8)ず呌ばれる公匏なガむドラむンがある
むンデント、行の長さ、空癜の䜿甚、呜名芏則、コメントの曞き方など、幅広いコヌディング芏則を定めおいる
詳现は、公匏サむトを参照のこず

  • 拡匵子は、.py
  • むンデントでブロックの認識をする
    スペヌスでは無く、必ずTabキヌで字䞋げをするこず
  • 倉数宣蚀時に、デヌタ型の指定が䞍芁だが、初期化は必芁
  • 文字列の倧文字ず小文字は区別する
  • 文末に;(セミコロン)など、文末を区切る甚語は䞍芁
  • 関数などブロックの区切りに{ }(䞭括匧)は䜿甚せず、:(コロン)を䜿甚する
  • メモリ管理をプログラマが行う必芁はない
  • むンタプリタによっおプログラムを実行する
    ゜ヌスコヌドを倉曎の床、プログラム実行前にコンパむルを行う必芁がない
  • 文法ずしおは、main関数が䞍芁
    ただし、関数の呌び出しを明瀺的に瀺すため、慣習ずしお、main関数を定矩するこずが倚い
  • 倉数名に予玄語(print,def等)は利甚できない
  • 倚くのプログラミング蚀語は䜍眮匕数(Positional Arguments)のため、関数の匕数の順番が決たっおいるが、
    Pythonでは名前付き匕数(Named Parameters/Keyword Arguments)が䜿えるこずで匕数の順番を芚える必芁が無い
    →コヌドの可読性ず柔軟性を向䞊させるための䟿利な機胜

慣習ずしおのずしおのmain関数の定矩
※あくたで関数の関係性ず開始地点を明瀺的に瀺すためのもののため、名称は"main"でなくおも良い


def main():
    func()

def func(): pint("Hello, World!")

終了ステヌタス

Pythonでは、C蚀語のように、プログラム終了時に必ず終了ステヌトメントを返华する必芁は無い
しかし、慣習ずしお、正垞終了時には0、プログラムが異垞終了した際には、0以倖の数を付䞎する
こうしおおくこずで、゚ラヌ発生時にどこでシステムが匷制終了したのかがわかり、保守性の向䞊に繋がる


import sys
if len(sys.argv) != 2:
    print("Missing command-line argument")
    sys.exit(1) # record 1

print(f"hello, {sys.argv[1]}") sys.exit(0) # record 0

終了ステヌトを取埗したい堎合は、eco $?実行する
詳现は、プログラミング 終了ステヌト参照のこず

ラむブラリのむンポヌト

倖郚ラむブラリ(モゞュヌル)のむンポヌト

䞀般的にfrom <ラむブラリ名>で行う


# Import all of modules in PIL library
from PIL

ラむブラリのモゞュヌルを遞択したい堎合は、from <ラむブラリ名> import <モゞュヌル名>,<モゞュヌル名>,...で行う


# Import only Image and ImageFilter modules in PIL library
from PIL import Image, ImageFilterhe
自䜜ラむブラリ(モゞュヌル)のむンポヌト

基本的には、倖郚ラむブラリをむンポヌトする際ず曞き方は同じ

・参照元ず参照先のPythonファむルが同じディレクトリに存圚する堎合

# モゞュヌルを限定しない import Pythonファむル名 #モゞュヌルを限定する from Pythonファむル名 import モゞュヌル名

・参照元ず参照先のPythonファむルが違うディレクトリに存圚する堎合は、
䞊蚘のコヌドに以䞋のコヌドを远加する

import sys sys.path.append('参照したファむルパス') # 参照元モゞュヌルが"/path/to/mymodule.py"に存圚する堎合 import sys sys.path.append('/path/to') import mymodule from mymodule import myfunction

サヌドパヌティのむンストヌル

以䞋2皮類の方法がある

1.pypiを利甚する
安党にダりンロヌドできるPythonモゞュヌルの無料ストア

2.pip/pip3利甚する
むンストヌル時pip install モゞュヌル名
アップデヌト時pip install -U モゞュヌル名
※Mac、Linuxの堎合、pipではなく、pip3を利甚する

メッセヌゞ出力

基本の曞き方



print(*objects, sep=' ', end='\n', file=None, flush=False)
ただ、名前付き匕数(匕数の順番関係なく蚘述できる)の為、シンプルな蚘述が可胜
※ここでの*は、C蚀語などの*ポむンタ挔算子ではない

sep
䜕も指定しなかった堎合、デフォルトでは' '(半角スペヌス)が蚭定される
耇数の文字列や倉数を出力する際に連結する倀を半角スペヌス以倖にしたい堎合は、
sep='-'などず区切りたい文字を指定するず倉曎できる
sep=''ず指定するず、区切りたい文字無しで出力される

end
䜕も指定しなかった堎合、デフォルトの'\n'(改行)で出力される
改行しお出力したくない堎合は、end=''ず指定するず、同じ行に出力される
それ以倖にも、自分の指定した曞匏で、出力するこずが可胜


print("hello, world")

# 文字列を連続しお出力し、-(ハむフン)で連結する
print("apple", "banana", "orange", sep="-")  

'''(トリプルクオヌト)たたは''(ダブルクオヌト)で囲っお、文字列を蚘述するず、文字列の改行のたた出力するこずができる


print('''こんにちは。
         先日はありがずうございたした。
         たた、よろしくお願いしたす。''')
# Output こんにちは。 先日はありがずうございたした。 たた、よろしくお願いしたす。
耇雑なデヌタ構造のメッセヌゞ出力

耇雑なデヌタ構造(リスト、蟞曞など)を、人間が読みやすい圢匏で出力するさい、pprint(pretty print)モゞュヌルを䜿うず良い
特に、ネストされたデヌタ構造や非垞に倧きなデヌタ構造を扱う堎合に、
オブゞェクトをきれいに敎圢しお出力・衚瀺したり、
文字列(str型オブゞェクト)に倉換しお、倀を敎圢衚瀺でき、非垞に䟿利

pprintモゞュヌルの䟿利な機胜
むンデントネストされたデヌタ構造をむンデントで衚瀺するため、構造が分かりやすくなる
出力幅の制限出力幅を制限するこずで、長いリストや蟞曞が画面からはみ出すのを防ぐ
深さの制限ネストされたデヌタ構造の衚瀺する深さを制限するこずで、耇雑なデヌタ構造の䞀郚分だけを衚瀺できる
蟞曞の゜ヌト蟞曞のキヌを゜ヌトしお衚瀺するこずで、出力の順序を䞀定にできる

pprintモゞュヌルを䜿甚する堎面
・耇雑なデヌタ構造のデバッグ
・蚭定ファむルやAPIのレスポンスの衚瀺
・ログファむルの出力

基本の曞き方は以䞋の通り
object出力するオブゞェクト
stream出力先のファむルオブゞェクト(デフォルトは暙準出力)
indentむンデントのスペヌス数(デフォルトは1)
width出力幅(デフォルトは80文字)
depth出力する深さの制限(デフォルトはNone)
compact出力をできるだけコンパクトにするかどうか(デフォルトはFalse)
sort_dicts蟞曞のキヌを゜ヌトするかどうか(デフォルトはTrue)

pprint.pprint(object, *, stream=None, indent=1, width=80, depth=None, compact=False, sort_dicts=True)

import pprint

data = {
    "name": "倪郎",
    "age": 30,
    "address": {
        "city": "東京",
        "zip": "100-0001"
    },
    "skills": ["Python", "JavaScript", "C++"]
}

pprint.pprint(data)
# The example of output {'address': {'city': '東京', 'zip': '100-0001'}, 'age': 30, 'name': '倪郎', 'skills': ['Python', 'JavaScript', 'C++']}

コメント文


# Only one line of comment

"""
Multi-line comments
"""

デヌタ型ず倉数

デヌタ型

デヌタ型 説明 䟋
str 文字列型
'(シングルクオヌト)/"(ダブルクオヌト)で囲む
文字列に'を含む堎合は、"を利甚する
メモリの蚱す限り、無限に倀の範囲を取る
str="hello"
int (笊号付き)敎数型
float型ず型倉換無しで、等号比范(==)しおもTrueになる
Python3では、敎数の範囲に制限はない
メモリの蚱す限り任意の倀の範囲を取る
num = 1
complex 耇玠数型
float 倍粟床小数点型
int型ず型倉換無しで、等号比范(==)しおもTrueになる
num = 1.0
bool Booleean(True/False)
頭文字が倧文字でないず゚ラヌになる
list 耇数のデヌタを1぀の型にたずめお栌玍し、
それらのデヌタを簡単に管理/操䜜するデヌタ構造
・ミュヌタブル(远加,倉曎,削陀可胜) 芁玠の倉曎可胜
・シヌケンス型(耇数の芁玠を順番に䞊べお扱うデヌタ型)の1぀
・デヌタを[ ](倧括匧)で囲む
・耇数のデヌタを扱いたいずきは、[ ](倧括匧)の䞭に、{ }(䞭括匧)を入れる
      リストの䞭に蟞曞が入っおいる状態
・リストの䞭でルヌプを回し、倀を䜜成するこずも可胜
 ※項目名ず倀を䜕床も曞く為、コヌドの冗長性が高くなる
・線圢探玢アルゎリズムで動く(=怜玢効率が悪い)
     ・リストから倀を取り出したい時は、リスト名[むンデックス(添字))](数字)で指定する
      蟞曞型を持っおいる時は、リスト名[むンデックス(添字))]['Key']で指定する
基本のリスト型
num = [1,2,3,4,5] num[0] = 1 num[1] = 2 num[-1] = 5
リスト型の䞭に蟞曞型が入った倧芏暡デヌタ
people = [ {"name": "John", "number": "00001"}, {"name": "Tom", "number": "00002"}, {"name": "Kathy", "number": "00003"}, ] print(people[0]) # {"name": "John", "number": "00001"} print(people[0]['name']) # John
リスト内包衚蚘(繰り返し凊理を行いながらリストを䜜成する) nums = [x for x in range(500)]
tuple シヌケンス型(耇数の芁玠を順番に䞊べお扱うデヌタ型)の1぀
デヌタは()で囲たれ、むミミュヌタブル(远加,倉曎,削陀䞍可胜)
・タむムスタンプ等、倉曎䞍可にしたいデヌタに利甚する
 ディクショナリのキヌなどにも利甚される
・倉曎操䜜がかからない為、メモリ効率が良く、リストよりも凊理が若干早い
・芁玠が䞀぀しかない堎合は、末尟にカンマが必芁 →数匏の括匧ず芋分けるため
num=(1,2,3,4,5) num(1,)
range 数列
効率的な数倀シヌケンス生成に䜿甚
シヌケンス型(耇数の芁玠を順番に䞊べお扱うデヌタ型)の1぀
dict キヌず倀のペアを扱うデヌタ型
デヌタを{ }(䞭括匧)で囲む
・キヌずバリュヌを䜕床も曞く必芁が無く、冗長性が䜎い
・ハッシュ探玢アルゎリズムで動く(=怜玢効率が良い)
・存圚しないキヌを指定するず、KeyErrorが発生する
・リストの様な順序関係はなく、KeyでValueを取埗する
     ・倀を取り出す時は、蟞曞['key名']で指定する
my_cat = {'size':'fat','color':'gray','disposition':'lound'} my_cat['size'] = 'fat'
set 重耇のない芁玠の集たりを扱い

Pythonでは、他のプログラミング蚀語に存圚するlong型、double型は䜿えない

基本的にPythonでは、メモリが蚱す限り倀の範囲は自動で拡倧しおいくため、
䜕億桁ずいった膚倧な敎数倀を䜿甚しない限り、敎数オヌバヌフロヌは発生しない
たた、他の倀の範囲が限られおいるプログラミングに比べお、オヌバヌフロヌは発生しづらい
ただし、デフォルトのprint()で衚瀺される蚈算結果では、切り捚おによる圱響は無いように芋えるが、
50桁の蚈算結果を出力など、桁数によっおは切り捚おによる問題が発生する可胜性があるこずを念頭に眮いおおく必芁がある


x = int(input("x: ")) # 1
y = int(input("y: ")) # 3
z = x / y
print(z) # 0.3333333333333333

x = int(input("x: ")) # 1
y = int(input("y: ")) # 3
z = x / y
print(f"{z:.50f"}) # 0.3333333333333333...31482961624...
デヌタ型を調べる

type()関数を䜿甚しお、倉数のデヌタ型を確認できる


x = 10
print(type(x))  # <class 'int'>

倉数の宣蚀

Pythonでは、他のプログラミング蚀語のように、倉数宣蚀時にデヌタ型を明瀺的に指定する必芁はない
これは"動的型付け蚀語"ず呌ばれ、倉数のデヌタ型が実行時に自動的に決定される
ただし、倉数を初めお䜿甚する前に、䜕らかの倀を代入しお初期化する必芁がある
倉数名 = 倀で宣蚀する


num = 10;

耇数の倉数をたずめお宣蚀/初期化するこずもできる


x, y, z = 0, 0, 0
グロヌバル倉数の定矩

グロヌバル倉数の定矩方法の方法は、以䞋の2通りが存圚する

1.関数の倖で倉数を定矩する
ただし、関数内でグロヌバル倉数の倀を倉曎する堎合は、globalキヌワヌドを䜿甚する必芁がある

global_variable = 10

def my_function(): print(global_variable)

my_function() # Output:10

globalキヌワヌドを䜿甚する
この方法は、関数内でグロヌバル倉数を定矩できる
グロヌバル倉数の倀を倉曎する堎合にも、globalキヌワヌドが必芁
※同じ倉数名でglobalがない堎合は、別のロヌカル倉数ずしお扱う

def my_function(): global num = 10 print(num)

my_function() # Output:10

倉数の出力

print()を䜿甚した倉数の出力方法は、2皮類ある

1. +挔算子を利甚しお、文字列を連結する方法
・埓来の方法
・文字列ず組み合わせお出力する堎合、コヌドが冗長になるこずがある
・倉数の型が文字列以倖の堎合、文字列ず組み合わせるのに型の倉換が必芁になるこずがある

2. f文字列(f-strings)を利甚する方法
埓来のフォヌマット挔算子(%s,%d)などを利甚するこずも可胜だが、
Python 3.6以降以降導入されたf文字列(f-strings)の䜿甚が掚奚されおいる

基本的な䜿い方は、文字列の先頭にfたたはFを付けお蚘述し、
文字列の䞭に倉数を埋め蟌む堎合には、倉数を{倉数名}で囲む

メリット
・可読性が高い
・柔軟性が高い
・パフォヌマンス性が高い

print(f"user_id: {user_id}")

answer = input("What's your name? ")
# the way of using "+" operator
print("hello, " + answer)
# 
print("hello,", answer)
# 
print(f"hello, {answer}")

基本構文

条件分岐

if文

# Prompt user for integers
x = input("What's x? ")
y = input("What's y? ")
# Compare integers
if x < y:
    print("x is less than y")
elif x > y:
    print("x is greater than y")
else:
    print("x is equal to y")
䞉項挔算子

基本の曞き方は、[真の堎合の倀] if [条件匏] else [停の堎合の倀]
䞉項挔算子を䜿うず、if文をより短く蚘述するこずができる


letter = True if input().isalpha() else False
match文

他のプログラミング蚀語のSWITCH文のようなもの
基本の曞き方は、以䞋の通り
・耇数の倀を指定したい堎合は、|(パむプ)を䜿っお倀を区切る
・どの倀にも該圓しない堎合を指定したい時は、_(アンダヌスコア)を倀に指定する


match 条件を確認する倀/倉数: 
    case 倀1:
        return 戻り倀1 
    case 倀2: 
        return 戻り倀2 

match status:
    case 400:
        return "Bad request" 
    case 401 | 403 | 404: 
        return "Not allowed" 
    case 418: 
        return "Allowed" 
    case _: 
        return "Something else" 

loop文

while文

・即座にルヌプの条件匏を再評䟡したい時はcontinueを蚘述する
・ルヌプを抜けたい時は、breakを蚘述する


while name != "": 
    print('What's your name?') 
    name = input()
    if name == "" 
        print('Enter youe name.')
        continue
    else
        print('Hello, ' + name)
        break 
print('Good to see you.') 
for文

Pythonでは、range()関数を䜿甚しお、for文のルヌプをたわあすこずが倚い
埌述する[](リスト)を䜿った方法よりもメモリ効率が良く、
特に倧きな範囲の敎数を扱う堎合に有効

range()関数基本の曞き方は以䞋の通り
startからstop - 1たでの敎数のシヌケンスを、stepず぀増やしお生成する
匕数の数はオプションで倉えられる


range(start, stop, step)
range(start, stop)
range(stop)

for i in range(3):
  print("Hello!")

Pythonの慣習的な蚘法方法で、"_"を䜿っお曞く堎合がある
これはプログラマに察しお、この倉数は䜿甚しないこずを瀺す
→コヌドの可読性が向䞊し、䞍芁な倉数を䜿甚しないこずでメモリの䜿甚量の節玄にも繋がる


for _ in range(3):
  print("Hello!")

# for i in range(開始倀, 終了倀+1, 増分):
for i in range(0, 2, 1):
  print("Hello!")

たた、range()関数の䜿甚以倖に[](リスト)を䜿甚するこずもできる
range()関数ず比范しお、リストの芁玠数が増えるほど、メモリ消費量も増加する


for i in [0,1,2]:
  print("Hello!")

while文ず同様に、特定の条件が満たされ、for文のルヌプの途䞭で凊理を䞭断しおルヌプから抜け出したい時、breakを利甚する


fruits = ["apple", "banana", "orange", "grape"]
for fruit in fruits:
    if fruit == "orange":
        print("Found orange")
        break  # Interrupt the loop when it finds the orange.
    print(fruit)

list = [
    {'key1': 'value1', 'key2': 'value2'},
    {'key1': 'another value', 'key3': 123},
    {'key4': True}
]
for dictionary in list:
    key1 = dictionary['key1'] # value1, another value
    key2 = dictionary['key2'] # value2

䟋倖凊理

䟋倖凊理の詳现や皮類に関しおは、96.プログラミングを参照のこず


try:
    䟋倖をキャッチしたい凊理
except:
    tryで䟋倖が発生した時に実行する凊理
# 捕捉する䟋倖の皮類を指定したい堎合(オプション)
except 䟋倖ハンドラ: 
    tryで指定した特定の䟋倖が発生した時のみ実行する凊理
# 補足した䟋倖を倉数に栌玍しお詳现情報を取埗する(オプション)
except 䟋倖ハンドラ as 倉数名:
    tryで指定した特定の䟋倖が発生した時のみ実行する凊理
# try実行埌に必ず行いたい凊理がある堎合(オプション)
finally:
    tryで䟋倖発生の有無関係なく、必ず実行する凊理 
# 䟋倖が発生しなかった際に実行したい凊理がある堎合(オプション)
else: ※オプション 
    tryで䟋倖が発生しなかった堎合に実行する凊理

try:
    print(x) 
except:
    print("Something went wrong") 
Except ZeroDivisionError as e: 
    print(f"Something went wrong: {e}") 
finally:
    print("The 'try except' is finished") 
else:
    print("Nothing went wrong") 

挔算子

算術挔算子

䞊から順に蚈算凊理が実行される優先床

挔算子 説明 䜿い方
** 环乗 10 ** 2 →100
* 乗算
文字列,リストぞ利甚可胜
3 * 2 →6
'3' * 2 →'333'
/ 陀算 3 / 2
// 敎数陀算(2぀の数倀の商の敎数郚分) 11 % 2 →5
% 剰䜙(䜙りを蚈算) 22 % 8 →6
+ 加算
文字列,リストぞ利甚可胜
3 + 2 # 5
'3' + '2' →'32'
- 枛算 3 - 2

比范挔算子

挔算子 説明 䜿い方
== 等しい
※=(代入挔算子)ずは別物
10 == 10 # true
!= 等しくない 10 != 5 # true
>/>= より倧きい/以䞊 10 > 5 # true 10 >= 5 # true
<= 未満/以䞋 10 < 5 # false 10 <= 11 # true
in メンバヌシップテスト挔算子
ある倀がシヌケンス(リスト,タプル,文字列など)䞭に
存圚するか刀定する
     # Prompt user to agree      s = input("Do you agree? ")

     # Check whether agreed      if s in ["y", "yes"]:      print("Agreed.")      elif s in ["n", "no"]:      print("Not agreed.")   

論理挔算子

bool型(True/False)が返华される

挔算子 説明 䜿い方
and 論理積 (10 > 5) and (5 < 10)
or 論理積 (10 > 5) or (5 < 10)
not 吊定 not (10 > 5)

特殊な倀

None

他のプログラミング蚀語では、空倀(NULL,䜕もない)は、PythonではNoneを利甚する
''やスペヌスずは、別の扱い

return None

Noneを拟いたい堎合は、以䞋2通りの方法で指定できる

if 倉数 == None:

より厳密にチェックをしたい時は、is Noneを扱う

if 倉数 is None:
notによる真停倀評䟡

論理挔算子および存圚確認以倖に、notには、倉数の倀を評䟡する䜿い方がある


if not 倉数名:
  # 凊理を蚘述

停(False)ず評䟡される倀:
False, None, 0(数倀型のれロ),
空のシヌケンス("", [], (), {})

この曞き方だず、Noneず空文字("")の䞡方の確認ができる
if 倉数名 is None:たたはif 倉数名 == None:
倉数がNoneであるこずの確認は出来るが、空文字("")の確認はできない
if 倉数名 = ""
倉数が空文字("")であるこずの確認は出来るが、Noneの確認はできない

# 論理挔算子
a = True
print(not a)  # 出力: False
# 存圚確認
my_list = [1, 2, 3]
print(1 not in my_list)  # 出力: False
print(4 not in my_list)  # 出力: True

raw文字列

r'文字列'文字列の䞭の゚スケヌプ文字を無芖しお文字列ずしお扱う
print(r'That is Calol\'s cat')
→"That is Calol\'s cat"ず、゚スケヌプされずに出力される

正芏衚珟

Pythonで正芏衚珟を䜿甚するには、reモゞュヌルを利甚する
この䞭には、正芏衚珟パタヌンにマッチする文字列を怜玢したり、眮換したりするなど
党おの正芏衚珟関数が甚意されおる

re.compile(pattern)関数
正芏衚珟パタヌンをコンパむルし、コンパむルされたパタヌンオブゞェクトを埌で再利甚できるようにする


import re
pattern = re.compile(r"\d{3}-\d{4}") 

re.search(pattern, string)関数

文字列stringの䞭から、正芏衚珟パタヌンpatternに䞀臎する郚分文字列の最初にマッチするマッチオブゞェクトを返す
マッチする郚分文字列がない堎合は、Noneを返す


import re

text = "My address is [email protected] です。" pattern = r"([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+).([a-zA-Z]{2,})" # pattern of mail address match = re.search(pattern, text)

if match: print("Email address found:", match.group()) print("User name:", match.group(1)) print("Domain name:", match.group(2)) print("Top level domain:" match.group(3)) print("Starting point:", match.start()) print("End point:", match.end()) print("Range:", match.span()) else: print("No matched")

group()マッチした文字列党䜓たたは特定の郚分文字列を返す
start()マッチした郚分文字列の開始䜍眮を返す
end()マッチした郚分文字列の終了䜍眮を返す
span()マッチした郚分文字列の開始䜍眮ず終了䜍眮のタプルを返す

re.findall(pattern, string)関数
文字列stringの䞭から、正芏衚珟パタヌンpatternに䞀臎する郚分文字列をすべお探し出し、それらの郚分文字列をリストずしお返す


import re
text = "私の電話番号は03-1234-5678で、友達の電話番号は090-9876-5432です。"
pattern = r"\d{2,4}-\d{2,4}-\d{4}"  # 電話番号のパタヌン

phone_numbers = re.findall(pattern, text) print(phone_numbers) # outpuy:['03-1234-5678', '090-9876-5432']

re.split(pattern, string)関数
文章を正芏衚珟を䜿っお耇数の区切り文字の分割できる
正芏衚珟パタヌンに䞀臎するすべおの郚分文字列をリストずしお返す
分割された郚分文字列のリストを返す


import re
# Count up number of sentence 
def count_sentences(text): 
    sentences = re.split(r'[.!?]', text) 
    return len(sentences) 

この他にも様々な関数が理解されおいる
re.match(pattern, string)文字列の先頭がパタヌンにマッチするかどうかを刀定する
re.finditer(pattern, string)文字列党䜓からパタヌンにマッチする郚分をすべお怜玢し、むテレヌタずしお返す
re.sub(pattern, repl, string)文字列内のパタヌンにマッチする郚分を眮換

pattern.match(string)re.match()ず同様だが、コンパむル枈みのパタヌンオブゞェクトを䜿甚する
re.の郚分をpattern.で、コンパむル枈みのパタヌンオブゞェクトを䜿甚するこずができる

配列

Pythonで配列ず蚀うず、以䞋3぀のデヌタ構造指す

list
Pythonで最も䞀般的に䜿甚される配列のようなデヌタ構造
順序付けられた芁玠のコレクションであり、異なるデヌタ型(敎数,文字列,オブゞェクトなど)を混圚させるこずができる
動的にサむズを倉曎でき、芁玠の远加や削陀がarrayず比范するず容易
メモリ䞊での配眮も連続しおいるずは限らない
デヌタの䞊び替えや、履歎管理、統蚈凊理などに利甚できる

my_list = [1, "hello", 3.14]

NumPy array
数倀蚈算を効率的に行うためのラむブラリで、科孊技術蚈算やデヌタ分析などで広く䜿甚される
同じデヌタ型の芁玠を持぀倚次元の配列であり、高速な数倀挔算を可胜にする
リストよりもメモリ効率が良く、数倀挔算のパフォヌマンスに優れおいる

import numpy as np

my_array = np.array([1, 2, 3, 4, 5]) print(my_array)

array
・同じ型の芁玠が連続したメモリ領域に栌玍されるデヌタ構造を指す
 CやJAVAなど、埓来のプログラミング蚀語の配列に1番近い
・リストよりもメモリ効率が良いが、NumPy配列ほどの柔軟性や機胜はない import array

my_array = array.array('i', [1, 2, 3, 4, 5]) # 'i'は敎数型を衚す型コヌド print(my_array)

配列で䜿う関数

シヌケンス型デヌタ構造(リスト,蟞曞,タプル,文字列,バむト列)に察しお䜿甚できる䟿利な関数

存圚確認/倀の取埗

キヌ/倀の存圚確認のみ
配列、リスト、蟞曞などに察しお䜿甚できる
蟞曞型でキヌが存圚しない時は、KeyErrorが発生する
→安党に倀を取埗したい堎合は、get()メ゜ッドを䜿ったほうが良い

基本の曞き方
'怜玢したい倀' in リスト名 '怜玢したい倀' not in リスト名
蟞曞型の曞き方 #キヌの存圚を確認する '怜玢したいキヌ' in 蟞曞名 #倀の存圚を確認する '怜玢したいキヌ' in 蟞曞名.values()
'Hello' in 'Hello Woerld!' # True

listN=['Hello','GoodMorning','Bye'] 
'Hello' in listN # True
'Hello' not in listN # False

my_dict = {'a': 1, 'b': 2, 'c': 3} 
print('b' in my_dict) # True 
print(2 in my_dict) # False 
print(2 in my_dict.values()) # True 

倀取埗(存圚確認を含む)
リスト,蟞曞,タプル,文字列,バむト列に察しお䜿甚できる
基本の曞き方は、 リスト名等[index]
※スラむス(長さ)で指定も可胜
蟞曞型では、芁玠番号ではなく、キヌを指定する
キヌが存圚しない時は、KeyErrorが発生する
→安党に倀を取埗したい堎合は、get()メ゜ッドを䜿ったほうが良い


num=[1,2,3,4,5] 
num(0)=1 
num(0:3)=[1,4] 
num(:3)=[1,2,3] # スラむス 

my_dict = {'apple': 1, 'banana': 2, 'orange': 3} 
# キヌ'apple'に察応する倀を取埗 
apple_value = my_dict['apple'] 
print(apple_value)  # 1 
# キヌ'banana'に察応する倀を取埗 
banana_value = my_dict['banana'] 
print(banana_value)  # 2 

倀取埗(存圚確認を含む)
蟞曞型に察しおのみ䜿甚でき、蟞曞型のvalue(倀)取埗する
倀が存圚しなくおも、゚ラヌになるこず無く、Noneたたは指定した倀を返华する
基本の曞き方は、 get(key名,デヌタが存圚しなかった際に返す倀)


my_dict = {'apple': 1, 'banana': 2, 'orange': 3} 
# キヌ'apple'に察応する倀を取埗 
apple_value = my_dict.get('apple') 
print(apple_value)  # 1 
# 存圚しないキヌ'grape'を指定 
grape_value = my_dict.get('grape') 
print(grape_value)  # None 
# デフォルト倀を指定 
grape_value = my_dict.get('grape', 0) 
print(grape_value)  # 0 

倀取埗ず倀のセット(存圚確認を含む)
蟞曞型に察しおのみ䜿甚でき、蟞曞型のvalue(倀)取埗する
蟞曞に指定の倀が存圚しない時に倀をセットする
基本の曞き方は、蟞曞名.setdefault(key,value)

spam.setdefault('color','black')

キヌを党お取埗する
蟞曞型に察しおのみ䜿甚でき、蟞曞型のkeyを党お取埗する
基本の曞き方は、蟞曞名.key()

my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
keys = my_dict.keys()
print(keys) # ['apple', 'banana', 'orange']
for key in my_dict.keys():
    print(key) # apple # banana # orange
if 'grape' in my_dict.keys():
    print("No matched.") 
繰り返し凊理

䞀般的な取埗方法
リスト,蟞曞,タプル,文字列,バむト列に察しお利甚できる
※蟞曞型は、キヌたたは倀のどちらか䞀方のみ
 →䞡方䞀尟に取埗したい堎合は、items()メ゜ッドを䜿甚する

基本の曞き方は、
for i in range(len(リスト名等)): # 凊理を蚘述
※range(len(リスト名))をリスト名だけでも同じ凊理ができるが、len()関数を䜿うのが䞀般的


num =  [1, 2, 3, 4, 5]  
for i in range(len(fruits)): 
    print(f"index{i}: { num[i]}") 

my_dict = {'apple': 1, 'banana': 2, 'orange': 3} 
for key in my_dict: # 蟞曞のキヌのみ取埗 
    print(key) 
for value in my_dict.values(): # 蟞曞の倀のみ取埗 
    print(value)

蟞曞型でキヌず倀のペアを同時に取埗したい時
※蟞曞型のみ䜿甚可胜


my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
for key, value in my_dict.items():
print(key, value) 
カりント

芁玠やリストの合蚈倀を求める
※芁玠が党お数倀であるこずが前提


scores = [72, 73, 33]
average = sum(scores) / len(scores)

芁玠の長さをカりント


num = [1,2,3,4,5] 
len(num) = 5 

芁玠の出珟回数をカりント
Counterオブゞェクトは簡単に芁玠の出珟頻床をカりントできる䞀方で、
メモリを䜿甚するため倧芏暡なデヌタセットの堎合、メモリ䜿甚量に泚意する必芁がある


import csv
from collections import Counter
# Open CSV file
with open("favorites.csv", "r") as file:
    reader = csv.DictReader(file)
    # Counts
    counts = Counter()
    # Iterate over CSV file, counting favorites
    for row in reader:
        favorite = row["language"]
        counts[favorite] += 1
# Print counts
for favorite, count in counts.most_common():
    print(f"{favorite}: {count}")

most_common(n)メ゜ッドは、芁玠ずその出珟頻床をタプルずしお栌玍したリストを返す
匕数nを指定するず出珟頻床の高い䞊䜍n個の芁玠のみが返され、匕数を省略した堎合、すべおの芁玠が返される
出珟頻床が同じ芁玠は、出珟順に䞊べられる

远加/削陀

リストの芁玠を远加
末尟に远加リスト名.append('リストぞ远加したい倀')
指定したむンデックスに远加リスト名.insert(むンデックス,'リストぞ远加したい倀')


listN.append('GoodNight') 
listN.insert(1,'GoodNight') 

蟞曞型に芁玠を远加する
以䞋2の方法があり、update()メ゜ッドを䜿うず、耇数のキヌず倀をたずめお远加できる


my_dict = {'a': 1, 'b': 2}
my_dict['c'] = 3
print(my_dict)  # {'a': 1, 'b': 2, 'c': 3}

my_dict.update({'d': 4, 'e': 5}) print(my_dict) # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

芁玠を削陀する
リストの倀だけがわかっおいる堎合は、remove() ※蟞曞型には䜿えない
リストのむンデックスがわかっおいる堎合は、delを利甚する
基本の曞き方は、
リスト名.remove('削陀したい倀')
※同じ倀が耇数あっおも、最初に芋぀かった倀だけ削陀される
del リスト名[indexたたはkey]


listN=['Hello','GoodMorning','Bye']
listN.remove('Hello')
→listN=['GoodMorning','Bye']

listN=['Hello','GoodMorning','Bye'] 
del listN[0]
→listN=['GoodMorning','Bye']
耇補/䞊び替え

䞊び替え
基本の曞き方は、sorted(リスト名等, reverse = True/False)
Reverseで昇順(True)/降順(False)を指定できる
※デフォルトはTrue


numbers = [3, 1, 4, 1, 5, 9, 2, 6] 
sorted_numbers_desc = sorted(numbers, reverse = True) 
print(sorted_numbers_desc)  # [9, 6, 5, 4, 3, 2, 1, 1] 

my_dict = {'apple': 1, 'banana': 2, 'orange': 3, 'peach': 4} 
sorted_keys = sorted(my_dict.keys()) 
print(sorted_keys) # ['apple', 'banana', 'peach', 'orange'] 

配列の耇補
リストや蟞曞型など、むミュヌタブルなオブゞェクトに䜿甚できる
新しいオブゞェクトの䜜成し、芁玠を耇補する


耇補リスト名 = copy.deepcopy(コピヌしたい元のリスト名) 

配列の参照コピヌ
リストや蟞曞型など、むミュヌタブルなオブゞェクトに䜿甚できる
新しいオブゞェクトの䜜成するが、芁玠は参照するだけ
コピヌ元/先の芁玠どちらかを倉曎するず、もう䞀方も倉曎される


ist1 = [1,2,3,4,5] # コピヌ元
list2 = list1
list2 = copy.copy(list1)
デヌタ型倉換

リスト型ぞ倉換

tuple(my_dict.items())

タプル型ぞ倉換

my_list = list((1, 2, 3))

蟞曞型ぞ倉換
※(key, vlaue)のペアで構成されおいる必芁がある

dict = dict([('a', 1), ('b', 2)])

関数

関数の䜜成は、def 倉数名(匕数):で䜜成する
匕数ずreturnは、オプション
Pythonは{ }(䞭括匧)ではなく、むンデントでブロックを認識するため、関数内の凊理を蚘述する行は必ずTabキヌでむンデントを入れるこず

たた、呌び出し時は、関数名(匕数)で呌び出す


# create function
def isPositive(num):
  return (num > 0)
# call created function
number = -5;
if (isPositive(number)):
  print(f "{number} is positive.")
else:
  print(f "{number} is negative.")

戻り倀を耇数セットする


def 関数名(匕数あれば):
    # 凊理を蚘述
    return [戻り倀1 , 戻り倀2]

倉数1, 倉数2 = 関数名(匕数あれば) 

以䞋の様にセットされお出力される
・倉数1 → 戻り倀1
・倉数2 → 戻り倀2


def input_player_letter(): 
    # プレむダヌに OかXかを遞んでもらう 
    # プレヌダヌの駒が先、コンピュヌタヌの駒が埌のリストを返す 
    letter = '' 
    while not (letter == 'X' or letter == 'O'): 
        print('O=先手、X=埌手、どちらにしたすか (O or X)') 
        letter = input().upper() 
    # [プレヌダヌの駒, コンピュヌタヌの駒]ずいうリストを返す 
    if letter == 'X': 
        return ['X', 'O'] 
    else: 
        return ['O', 'X'] 
player_letter, computer_letter = input_player_letter() 

Pythonは、オブゞェクト指向プログラミング蚀語であるため、メ゜ッドチェヌンが可胜
関数を連鎖的に実行する機胜

# The example in Python result = " hello world ".strip().capitalize().replace("World", "Python") # メ゜ッドチェヌン箇所 print(result) #出力: Hello Python

特別な匕数

*パラメヌタず**パラメヌタを䜿甚するず、Pythonの関数定矩においお、可倉長匕数を受け取るこずができる
関数が呌び出される際に、定矩された以倖の任意の数の匕数を柔軟に受け取るこずができる

*パラメヌタ

関数に䜍眮匕数ずしお枡された、䜙分な匕数をタプルずしお受け取る
䜍眮匕数ずは、関数呌び出しの際に、匕数の䜍眮に基づいおどのパラメヌタに察応するかが決たる匕数のこず
慣習ずしお、*argsずいうパラメヌタ名を䜿うが、パラメヌタ名は自由に蚭定出来る

def example_function(*args):
    print(f"argsの䞭身: {args}")
    for arg in args:
        print(arg)
example_function(1, "hello", 3.14)
# 出力:
# argsの䞭身: (1, 'hello', 3.14)
# 1
# hello
# 3.14
**パラメヌタ

関数にキヌワヌド匕数ずしお枡された、䜙分な匕数を蟞曞ずしお受け取る
キヌワヌド匕数ずは、関数呌び出しの際に、「キヌワヌド=倀」のように名前を指定しお枡される匕数のこず
慣習ずしお、関数定矩で**kwargsずいうパラメヌタ名を䜿うが、パラメヌタ名は自由に蚭定出来る

def another_example(**kwargs):
    print(f"kwargsの䞭身: {kwargs}")
    for key, value in kwargs.items():
        print(f"{key}: {value}")
another_example(name="Alice", age=30, city="New York")
# 出力:
# kwargsの䞭身: {'name': 'Alice', 'age': 30, 'city': 'New York'}
# name: Alice
# age: 30
# city: New York

オブゞェクトの䜜成

Pythonは、オブゞェクト指向プログラミングであるため、䜕か実装したいメ゜ッドがある堎合は、オブゞェクト(むンスタンス)を䜜成する必芁がある
䜜成したオブゞェクト(むンスタンス)のメ゜ッドにアクセスする際は、必ずobject.method()でアクセスをする

クラスの定矩
# Definition of class
class MyClass():
    # Definition of method
    def my_method(self):
        print("Hello from my_method!")
    # Definition of method
    def __init__(self, name, id):
        self.name = name
        self.id = id

selfずは、Pythonのクラス内で䜿甚される特別な倉数で、クラスのむンスタンス自身を参照する
むンスタンスの属性やメ゜ッドにアクセスする際に䜿甚する
selfがない堎合、メ゜ッドのどのむンスタンスの属性にアクセススべきか刀断ができなくなっおしたう


# Instantiate Object
myObject = MyClass()
# Call the method
myObject.my_method()  # 出力: Hello from my_method!

クラスからオブ゚ゞェクトをむンスタンス化するのは、同じプログラム内にあるクラスだけでなく、むンポヌトしたラむブラリを䜿甚するずきにも実行する

組み蟌み関数

入力
関数名 機胜 䟋文
input() ナヌザヌに文字列を入力させる
※string型ずしお倀が栌玍される

        answer = input("What's your name? ")
        print("hello, " + answer)
      
デヌタ型の操䜜
関数名 機胜 䟋文
type() デヌタ型の取埗 type(x)
→<class 'int'>
isinstance() 指定したデヌタ型である事の確認 x = 200 print(isinstance(x, int))
→True
str() string型ぞ倉換 str('3.14')
int() int型ぞ倉換 int('3.14')
float() float型ぞ倉換 float('3')
数字の操䜜
関数名 機胜 䟋文
isnumeric() 倀が数字かどうかを確認
Trueず刀定されるもの
数字(0-9),å…šè§’æ•°å­—
ロヌマ数字,分数,挢数字
Unicode 数倀文字
文字列.isnumeric()
isdigit() 倀が数字かどうかを確認
Trueず刀定されるもの
数字(0-9)
Unicode 数倀文字
文字列.isdigit()
isdecimal() 倀が数字かどうかを確認
10進数のみTrueを返す   
'123'.decimal() # True 'hello123'.isdecimal() # False
round() 四捚五入する
round(数倀, 桁数) 小数点以䞋の桁数を指定したい堎合は、
2番目の匕数を指定する   
print(round(3.14159, 2)) # 3.14/code> print(round(12345, -3)) # 12000
random() 浮動小数点数の乱数を生成 import random number1=random.random() # 0~1ので浮動小数点数の乱数が返っおくる
randint() 指定範囲内の乱数を生成
randint(範囲の開始点,範囲の終了点)
import randict integer1 =random.randint(1,10) # 110の範囲で生成された乱数が返っおくる
文字列の操䜜
文字列操䜜の䟿利な関数
関数名 機胜 䟋文
len() 文字数カりント
察象はstring型のみ
int型の数倀を返す
len('Hello') # 5 len(your_name')
startswith()
endswith()
指定した文字列から開始/終了の確認
倧文字ず小文字を区別する

s = "apple"
# 文字列がaたたはbで始たるか刀定
s.startswith(("a", "b")) # True
s.endswith('world') #False
        
upper()
lower()
倧/小文字ぞ倉換
文字列が倉換察象

spam = 'Hello world!' 
spam = spam.upper() # 'hello world!' 
spam = spam.lower() # 'HELLO WORLD!' 
        
islower()
isupper()
倀が党おが倧文字/小文字の確認

'HELLO'.isupper() # True 
'123hello'.islower() # False 
        
isalpha() 党お英文字であるこずの確認
※1文字以䞊

'hello'.isalpha() # True 
'hello123'.isalpha() # False 
        
isalnum() 英数字であるこずの確認
※1文字以䞊

'hello123'.isalmun() # True
'hello'.isalmun() # True
'123'.isalmun() # True
'a1b2あ3'.isalmun() # False
        
istitle() 倧文字小文字の文字列の確認

'This Is Title Case'.istitle() # True 
'This Is Title Case 123'.istitle() # True 
'This is title case'.istitle() # False 
'This Is NOT Title Case'.istitle() # False 
        
replace() 倀の倉換
'Hello, World!'.replace('H', 'J') # 'Jello, World!'
[](スラむス構文) 文字列の指定個所の切り出し
[開始:終了:ステップ]で指定する
終了-1たでが切り出される 最初の文字は、0
最埌の文字は、-1
埌ろからカりントしたい堎合は負数を蚭定する
::1は、文字列が反転する

'Hello world!' [1] # 'e' 
'Hello world!' [0:5] # 'Hello' 
'Hello world!' [:5] # 'Hello' 
'Hello world!' [3:] # 'lo world!' 
'Hello, World!'[-5:-2] # 'orl'
'Hello, World!'[::-1] # '!dlroW ,olleH'
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9][::2] # [0, 2, 4, 6, 8]
        
capitalize() 指定した最初の文字列を倧文字、
それ以降を党お小文字に倉換した
文字列をコピヌする

s = "helllo, World!" 
# Capitalize copy of string 
t = s.capitalize() 
# Print strings 
print(f"s: {s}") # helllo, World! 
print(f"t: {t}") # Helllo, world! 
        
join() 文字列の結合

'-'.join('There can be only one.'.split()) 
# output:'There-can-be-only-one.'
        
split() 文字列の分割
文字列.split(区切文字,分割回数)
区切り文字は分割埌削陀される
区切り文字未指定の堎合は、
スペヌス,改行,タブ改行,空癜文字列で分割し、
空癜文字列は分割埌に削陀される 単䞀の区切文字しか扱えない
→耇数の区切文字を䜿いたい時はre.split()

'MyABCnameABCisABCSimon'.split('ABC')
# output:['My', 'name', 'is', 'Simon']
        
rjust()/ljust()
center()
zfill()
指定した桁数に右/巊詰めで倀を埋める
指定した桁数に䞭倮寄せで倀を埋める
指定した桁数に0で倀を埋める
※空癜を埋める文字列は倉曎可胜

"abc".rjust(10) # output:'       abc' 
# 幅10で右寄せし、"*"で埋める 
"abc".rjust(10, "*") # output:'*******abc' 
    
isspace() スペヌス/タブ/改行のみの確認
' '.isspace() # True
strip()
rstrip()
lstrip()
空癜文字,スペヌス,タブの陀去
冒頭ず末尟/末尟だけ/冒頭だけ

spam ='     Hello World     ' 
spam.strip() # 'Hello World' 
Spam.rstrip() # '     Hello World' 
Spam.lstrip() # 'Hello World     ' 
    
pyperclip.copy(text) 枡された文字列をシステムのクリップボヌドにコピヌ

import pyperclip
pyperclip.copy(text)
    
pyperclip.paste() システムのクリップボヌドにコピヌされた
テキストを1぀の長い文字列ずしお返す
\n改行文字

import pyperclip
text = pyperclip.paste()
# 䟋)'日本の野鳥䞀芧\n犬の品皮\n猫の品皮\n家畜䞀芧' 
    
実行環境の情報取埗

sysモゞュヌルで、Pythonむンタプリタや実行環境に関する情報の取埗ができる
sysモゞュヌルのむンポヌトが必芁

import sys
関数名 機胜
sys.version
Pythonのバヌゞョン情報を取埗
sys.executable
Pythonむンタプリタの実行ファむルのパスを取埗
sys.platform
プラットフォヌム名を取埗(䟋:'win32','linux','darwin')
sys.path
モゞュヌル怜玢パスのリストを取埗
sys.modules
読み蟌たれたモゞュヌルの蟞曞を取埗
sys.exit(status)
プログラムを匷制終了
statusに終了ステヌタスを指定(通垞0は正垞終了)
sys.exc_info()
珟圚凊理䞭の䟋倖情報をタプルで取埗
(䟋倖の型,䟋倖オブゞェクト,トレヌスバックオブゞェクト)
sys.getfilesystemencoding()
ファむルシステムの゚ンコヌディングを取埗
ディレクトリ操䜜

osモゞュヌルのむンポヌトが必芁

import os
関数名 機胜
os.getcwd()
カレントワヌキングディレクトリ(珟圚䜜業䞭のディレクトリ)のパスを取埗
os.chdir('移動先ディレクトリ')
カレントディレクトリの倉曎
os.makedir()
新しいディレクトリ(フォルダ)の䜜成
指定パス䞭のフォルダが存圚しない堎合は、
最䞋局だけでなく、䞊䜍のフォルダたで新芏䜜成される
os.path.abspath(path)
匕数に枡したパスに絶察パスを返す
os.path.isabs(path)
匕数が絶察パスならTrue、盞察パスならFalseを返す
os.path.relpath(path, start)
startのパスからpathぞの盞察パスを返华する
※start未指定の堎合は、カレントディレクトリから
os.path.join()
OSに䟝存する区切り文字を党おのOSに察応するパスに倉換できる
※階局の区切りは、Wiindowsは\だが、LinusずMacの区切りは/
os.path.dirname(path)
最䞋局以倖の䞊䜍のパス名を取埗
os.path.basename(path)
最䞋局のプログラム名
os.path.split()
dirnameずbasenameを同時に取埗
os.path.exists(path)
指定したパスが存圚すればTrue、存圚しなければFalseを返す
os.path.isfile(path)
指定したパスが存圚し、それがフォルダであればTrueを返す
os.path.isdir(path)
指定したパスが存圚し、それがファむルであればTrueを返す
os.path.getsize(path)
パスで指定したファむルサむズ(byte)
os.listdir(path)
指定したパスのフォルダ内のファむル名ずフォルダ名のリスト䞀芧を返す
or.remove(path)
ファむルを削陀する
os.rmdir(path)
ディレクトリ(フォルダ)の削陀

ファむル操䜜

基本的なファむル操䜜(.txtなど)

1.ファむル開く/閉じる

以䞋2぀の方法がある

(1)open()・close()で行う方法
必ずclose()でファむルを閉じる必芁がある
基本の曞き方は、
open(ファむルパス, 読蟌モヌド) close()
指定したパスにファむルが存圚しない堎合は新芏䜜成される


file = open('ex.txt', 'r')
# 凊理を蚘述
file.close()

(2)with文で

ファむル操䜜終了埌に自動的にファむルを閉じられる
close()が必芁ない →ファむルの閉じ忘れによる゚ラヌが発生しない
基本の曞き方は、
with open(ファむルパス, 読蟌モヌド)

with open('ex.txt', 'r') as file:
  # 凊理を蚘述
# ファむルは自動的に閉じられる

読み蟌みモヌド
r:読蟌み w:曞蟌み a:远蚘 b:バむナリモヌド (+を付けるず䞡甚可胜)


2.ファむルの読蟌み

read()を䜿う
オプションずしお、()内で読み蟌み範囲を指定できる


with open('ex.txt', 'r') as file:
    content = file.read() # 党お読蟌み
    content = file.read(5) # 5行目たで読蟌み
    content = file.realline() # 1行目だけ読蟌み

3.ファむルの曞蟌み
write()を䜿う


with open('ex.txt', 'w') as file:
  file.write('Hello World!\n') # \n:改行
CSVファむル(.csv)

デヌタファむルがプログラムず同じディレクトリにある必芁がある
csvをむンポヌトする
倉な文字やカンマがあったら、自動的にそれらを゚スケヌプするこずができる

リストずしお読蟌む方法


import csv
# CSVファむルの読み蟌み
with open('data.csv', 'r') as file:
    reader = csv.reader(file)
    # Skip the heder line
    next(reader) # optional
    for row in reader:
        print(row) # All columns
        print(row[0]) # Only the first column

csv.reader(file)リスト型オブゞェクトずしお読み蟌む
next(reader)CSVファむルのヘッダヌ行を飛ばす ※オプション
rowにするず党おの列が出力され、row[i]で特定の列のみを出力できる
→列のむンデックスは、1番巊の最初の列を0ずし、右に向かっお1぀ず぀増分する


蟞曞ずしお読蟌む方法


import csv
# CSVファむルの読み蟌み
with open('data.csv', 'r') as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(row) # All datas with dictionary structure
        print(row['KeyName']) # Only the selecting key's value

csv.DictReader(file)蟞曞型オブゞェクトずしお読み蟌む
rowにするず党おのkeyが出力され、row['KeyName']で特定のキヌのみを出力できる
この方法では、CSVファむルのヘッダヌ情報はKeyずしお扱われ、readerはヘッダヌ情報を持たない為、next(reader)の蚘述は䞍芁



import csv
# CSVファむルの曞き蟌み
data = [
    ['name', 'age', 'ocupation'],
    ['Taro', 30, 'office worker'],
    ['Ketty', 25, 'student']
]
with open('data.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)

newline=''改行コヌドの自動倉換を防ぐために必芁
csv.writer(file)ファむルオブゞェクトをcsv.writerオブゞェクトに倉換する
writer.writerows(data)リストdataの内容をCSVファむルに曞き蟌む


䞊蚘のcsv.writerでは、リスト圢匏のデヌタをCSVファむルに曞き蟌むためのシンプルな方法を提䟛し、
csv.writerowは、dataをリストずしおCSVファむルに曞き蟌みを行う
→リスト内の芁玠の順序が、CSVファむル内の列の順序に察応し、線圢でしょりされる
※ヘッダヌ行が事前に存圚しない堎合、このコヌドはヘッダヌ行を远加しない

䞀方で、以䞋のようなcsv.DictWriterでは、蟞曞圢匏のデヌタをCSVファむルに曞き蟌む方法を提䟛し、
csv.writerowは、dataをずしおCSVファむルに曞き蟌みを行う
→蟞曞のキヌがCSVのヘッダヌに察応するため、デヌタの順序に関わらず正しく曞き蟌たれる
 よりスマヌトな凊理になる


import csv
data = [
    {'name': 'Raro', 'age': 30, 'Job': 'Worker'},
    {'name': 'Katty', 'age': 25, 'Job': 'Student'}
]

fieldnames = ['name', 'age', 'job']

with open('data.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()  # ヘッダヌを曞き蟌む
    for row in data:
        writer.writerow(row)

pandasモゞュヌルを利甚するず、より効率的な凊理を行うこずができる


import pandas as pd 
exam = pd.read_csv("exam.csv") 
# (行数,列数)を返す
exam.shape # (50,3) =50行3列のデヌタ 
# 指定ヘッダ䞭に含たれる䞀意の倀の数を返す
exam["student_id"].nuique # 10 =student_id列の䞀意の倀の数が10皮類
# 指定ヘッダ䞭に含たれる䞀意の倀を返す
exam["student_id"].uique # array([1,2,3,4,5,6,7,8,9,10])
# 指定したヘッダ䞭のNaNの倀の数を返す
sum(exam["student_id"].isna()) # NaN:欠損倀 
Excelファむル(.xlsx/.xls)

pandasをむンポヌトする
Excelファむルの内容をDataFrameずしお返す
sheet_name = Noneにするず、すべおのシヌトが蟞曞圢匏で返される


import pandas as pd
df = read_excel('ex.xlsx', sheet_name = 1) # 耇数シヌトがあればシヌト名を指定
JSONファむル(.json)

pandasをむンポヌトする
JSONファむルの内容をDataFrameずしお返す


import pandas as pd
df = pd.read_json('ex.json')

DB/SQLを扱う

Pythonには暙準でsqlite3ラむブラリが組み蟌たれおおり、軜量なデヌタベヌスであるSQLiteを扱うこずができる
これにより、手動でDBに接続し、ク゚リを実行する必芁がなくなる


import sqlite3
# Connect to database file (create file if it does not exist)
conn = sqlite3.connect('example.db')
# Create cursor
cursor = conn.cursor()
# Create a Table if needed
cursor.execute('''CREATE TABLE IF NOT EXISTS users
                  (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')
# Manipulate data
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)
# Commit the transaction
conn.commit()
# Disconnect the DB connection
conn.close()

カヌ゜ルSQLク゚リを実行し、結果を凊理するためのオブゞェクト

Pythonには、さたざたな皮類のデヌタベヌスず連携するためのサヌドパヌティラむブラリが倚数存圚する
代衚的なラむブラリずしおは、以䞋のようなものがある
MySQLmysql-connector-python, PyMySQL
PostgreSQLpsycopg2
Oraclecx_Oracle

䟿利なモゞュヌル

暙準でむンストヌルされない為、初回利甚時にむンストヌルする必芁がある

モゞュヌル 説明
Numpy 様々な次元の数倀デヌタを配列に効率的に保存できる
pyreverse Pythonでクラス図を䜜成するためのツヌル
pylintをむンストヌルするず、䞀緒にpyreverseがむンストヌルされる
Graphviz AT&T研究所が開発したオヌプン゜ヌスのアプリ
元々は専甚のDOT蚀語を䜿っおグラフ構造を描画するツヌル
(グラフ構造:耇数のノヌド同士を接続するこずで構成される図)
応甚範囲は広く、テキストを様々なデヌタ構造を衚珟したり、手順曞を䜜ったり、家系図などを衚珟できる
むンストヌラ
参考
SciPy 統蚈操䜜を実行できる
Pandas デヌタのロヌド.クリヌニング,操䜜を効率的に実行できる
Matplotlib・Seaborn 散垃図からヒヌトマップに至るたで、デヌタ芖芚化を䜜成する為のさたざたな関数を提䟛する
Altair ナヌザがむンタラクティブでアニメヌション化された芖芚化できる
scikit-learn 機械孊習を実行するための優れたツヌルを提䟛する

デバッグ

゚ラヌが発生した際には、トレヌスバックをよく読む
・䜕行目が゚ラヌになっおいるか蚘茉されおいる為、そこをデバックの察象ずする
・TypeErrorの行を党おコピヌしお怜玢する
 →゚ラヌに関する解決策や原因がわかる

Traceback(トレヌスバック)

プログラム実行䞭に゚ラヌ(䟋倖)が発生した際に、その゚ラヌが発生した箇所たでの関数呌び出しの履歎を衚瀺する機胜
゚ラヌの原因を特定し、デバッグを行う䞊で非垞に重芁な情報を提䟛する
トレヌスバックを泚意深く読むこずで、゚ラヌが発生した箇所ず、そこに至るたでのプログラムの実行経路を把握するこずができる

トレヌスバックの構成
トレヌスバックは、通垞、以䞋の情報を含んでいる
・゚ラヌの皮類TypeError,ValueError,NameErrorなど、発生した゚ラヌの皮類
・゚ラヌメッセヌゞ゚ラヌに関する詳现な説明
・ファむル名ず行番号゚ラヌが発生したファむル名ず行番号
・関数呌び出しの履歎゚ラヌが発生するたでの関数呌び出しの順序

トレヌスバックの衚瀺方法
Python では、゚ラヌが発生するず自動的にトレヌスバックが衚瀺される
たた、トレヌスバックを扱うモゞュヌルを利甚するず、より詳现な゚ラヌ情報を取埗できる
トレヌスバックを扱うモゞュヌル ・tracebackモゞュヌルトレヌスバック情報の取埗やフォヌマットを行う
・sysモゞュヌル暙準゚ラヌ出力ぞのトレヌスバックの出力や、䟋倖情報の取埗を行う ・loggingモゞュヌル゚ラヌ発生時のログにトレヌスバックを出力できる
 →プログラム実行䞭に発生した゚ラヌを蚘録し、埌から分析できる

よくある゚ラヌ

Pythonよくある゚ラヌ集
  • Pythonず3でバヌゞョンが違う
  • SyntaxError文法的゚ラヌ
  • EOL(文の末尟)文字列のクォヌト("たたは')の閉じ忘れ
  • IDEL起動時にre、その他必芁なモゞュヌルをむンポヌトしおいない

開発環境の構築

ダりンロヌドサむト

むンストヌル結果の確認
コマンドプロンプトで以䞋を入力しお、正しく結果が垰っおくればOK

python --version

倱敗する堎合は、Pythonをむンストヌルする際に、「Add Python 3.x to PATH」にチェックを入れ忘れた可胜性がある
最初にダりンロヌドしたファむルを再床開き、Uninstallの䞊、再床手順を実行するこず

Pythonのアップデヌト

コマンドプロンプトをシステム管理者ずしお起動し、以䞋のコマンドを実行する

pip install --upgrade pip

起動

IDELの起動

IDEL(Integrated Development and Learning Environment)
むンタラクティブ開発環境(察話型実行環境)

Windowsのアプリ怜玢からidleず入力し、アプリを実行するず起動する

むンタラクティブシェルの起動

特城
・呜什を1行ず぀すぐに実行される
・りィンドりに必ず>>>ずいうプロンプトが必ず衚瀺される

特城
・Pythonのプログラムを蚘茉するのみで、すぐに実行されない
 ファむルに名前を付けお保存し、それからプログラムを実行する
 →毎床むンタラクティブシェルに呜什をはじめから曞く必芁がなくなる
・りィンドりに>>>ずいうプロンプトが衚瀺されない

ファむル゚ディタの起動

IDELを起動し、むンタラクティブシェルのFile > New File

プログラムの実行

Python IDELでむンタラクティブシェルを実行する
実行方法実行内容を蚘茉し、Enterを抌す
制限事項
むンタラクティブシェルの為、1行ず぀実行される
→ 凊理をたずめお実行ができない

Python IDELでファむル゚ディタから実行する
実行方法Run > Run Module
制限事項コマンドラむン匕数を枡すこずができない

コマンドラむン/VS Code䞊で実行する
実行方法タヌミナル䞊でPyton Filename.py (コマンドラむン匕数)を実行する
メリット
・ブレヌクポむントの蚭定、倉数の監芖、ステップ実行が容易
・拡匵機胜が利甚でき、コヌド補完、リンティング、フォヌマットなど、開発効率を高める機胜が充実しおいる
制限事項IDLEやむンタラクティブシェルよりも重たい

shebang(シパン)

Unixç³»OSシステムにおいお、スクリプトファむルの実行時にどのむンタプリタを䜿甚するかをカヌネルに指瀺するためのもの
Pythonスクリプトを盎接実行可胜にするための特別な蚘述
※シバン自䜓は、Python特有ではなく、他のスクリプト蚀語でも利甚される
スクリプトファむルの先頭行に#!で始たる行を蚘述するこずで、OSに察しおどのむンタプリタでスクリプトを実行するかを指瀺できる
メリット
・Pythonむンタプリタのパスを指定する為、耇数のPythonバヌゞョンがむンストヌルされおいる環境でも、適切なバヌゞョンでスクリプトを実行できる
・python script.pyのように明瀺的にむンタプリタを指定しなくおも、./script.pyのようにスクリプトファむルを盎接実行できるようになる

曞き方
#!/usr/bin/python3
Unixç³»OS(Linux,Macなど)では、䞊蚘のようにむンタプリタのパスを盎接蚘述するのが䞀般的
※python3が/usr/bin/にあるこずを前提ずした曞き方
ただし、環境によっおはPythonのパスが異なる堎合があるため、移怍性を高めるために、
envコマンドでpython3を怜玢できるよう
#!/usr/bin/env python3ず蚘述する堎合もある

Windowsでは基本的にゞバンは無芖される
しかし、特定の環境(WSLなど)や、Python Launcher for Windowsを䜿甚するこずで、シバンを解釈しおPythonスクリプトを実行できる
その際は、#! python3ず蚘述する

バッチファむル(.bat)から実行

バッチファむルを利甚するず、IDLEを起動せずに、コマンドラむンからPythonスクリプトを簡単に実行できるようになる
たた、耇数のコマンドをたずめお実行できる

方法:
1.py.exeのパスを確認する
py.exeは、WindowsでPythonスクリプトを実行するためのランチャヌ
通垞は、Pythonのむンストヌルディレクトリに存圚する
AnacondaなどのPythonディストリビュヌションを䜿甚しおいる堎合は、パスが異なる堎合がある
Anaconda環境では、py.exeは存圚しないため、Anaconda環境のpython.exeぞのパスを蚘述する必芁がある
2.バッチファむルを䜜成する
テキスト゚ディタで新しいファむルを䜜成し、".bat"ずいう拡匵子で保存
ファむルの内容は、以䞋の圢匏で蚘述する
@py.exe C:\(実行したいPythonスクリプトのパス).py
@は、コマンドの実行結果を画面に衚瀺しないようにするための蚘号
3.䜜成したバッチファむルをダブルクリックするず、Pythonスクリプトが実行される

[掚奚]バッチファむルを環境倉数PATHに登録しおおくず、コマンドプロンプトからファむル名を指定するだけでスクリプトを実行できるようになる

コマンドラむン匕数

枡し方

プログラム実行時に、以䞋の様に匕数を蚭定するず、コマンドラむン匕数を枡す事が出来る
コマンドラむンやIDEのタヌミナルで実行できる


# Execute python code
python fileName.py command-line arguments
受取り方

基本的な方法ずしお、sys.argvを䜿っおコマンドラむン匕数を取埗する方法がある
sysラむブラリのむンポヌトが必芁
※コマンドラむン匕数を蚭定した堎合は、"sys.argv"ずいう倉数に栌玍される


import sys
# When one or more command line arguments are passed
if len(sys.argv) > 1:
    for arg in sys.argv[1:]:
        print(arg)
else:
    print("No command line arguments.")

䟋えば、䞊蚘のコヌドに察し、python myScript.py arg1 arg2 arg3を実行するず、
arg1 arg2 arg3 ず出力される

C蚀語などず同様に、argv[]には以䞋の通り栌玍される
sys.argv[0]プログラム名
sys.argv[1以降]コマンドラむン匕数が順番に栌玍

sys.argvを䜿甚した方法は、最も基本的な方法であるが、耇雑な匕数凊理には向かず、型倉換やバリデヌションは自分で行う必芁がある
より耇雑な匕数凊理を行う堎合には、argparsを䜿っおひ、匕数を受取る

䟿利なラむブラリ

ラむブラリ名 説明
seaborn デヌタ可芖化ラむブラリ
統蚈的なグラフを簡単に䜜成できるツヌル
グラフ描画ラむブラリmatplotlibがベヌス

䟿利な実行環境

実行環境名 特城
Jupyter Jupyter.orgでむンストヌル等できる

䟿利なフレヌムワヌク

Flask

Pythonのサヌドパヌティのラむブラリで、軜量か぀機胜豊富なWebマむクロフレヌムワヌク
クラりドベヌスのむンフラストラクチャでリ゜ヌスが限られたCS50 IDEのような環境でも快適に動䜜する

HTMLでWebサむトを構築する堎合、静的なコンテンツしか衚瀺できないずいう倧きな制玄があるが、
PythonずFlaskを組み合わせるこずで、動的なWebサむトを簡単に䜜成できる

Flask documentation
利甚方法

Flaskを利甚するには、むンポヌトしお、Flaskアプリケヌションの実行が求められる
以䞋2぀のファむルが必ず必芁
・app.py
・requirement.txt

app.py


# Flaskのむンポヌト
from flask import Flask
# むンスタンスの䜜成(慣習ずしおこの曞き方をする)
app = Flask(__name__)
# Configure to use SQLite database
db = SQL("sqlite:///database_name.db")

@app.route("/home") def index(): name = request.args.get("name", "world") return render_template("index.html", name=name)

@app.route("/", methods=["GET", "POST"]) def index(): if request.method == "POST": month = request.form.get("month") if not month: return redirect("/") try: month = int(month) except ValueError: return redirect("/")

    # Insert data into database
    db.execute("INSERT INTO birthdays (name, month, day) VALUES('Tom', ?, 1)", month)
        return redirect("/")
else:
    birthdays = db.execute("SELECT * FROM birthdays")
        return render_template("index.html", birthdays = birthdays)

@app.route("/sample") def sample(): return '<!DOCTYPE html><html lang="en"><head><title>hello</title></head><body>You are in the sample page.</body></html>'

@app.route("/sample") def sample(): return "You are in the index page."

URLの䞀郚ずしお枡された数倀を読み取り、その数倀をWebペヌゞに衚瀺する

@app.route("/show/%lt;int:number&lt") def show(number): return f"You gave {number}."

if name == "main": app.run(debug=True)

__name__珟圚のモゞュヌル名を衚す
@app.route("/")デコレヌタずいう機胜を䜿った曞き方で、アクセスできた堎合は、盎䞋のindex()ずいう関数を実行する
※デコレヌタその盎䞋にある関数に察しお、特定の機胜や圹割を远加したり、関連付けたりするために䜿われる


<!DOCTYPE html>
<html lang="en">
    <head>
        <meta name="viewport" content="initial-scale=1, width=device-width">
        <title>hello</title>
    </head>
    <body>
        hello, {{ name }}

        <div class="section">
            <h2>All Birthdays</h2>
            <table>
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Birthday</th>
                 </tr>
            </thead>
            <tbody>
                {% for birthday in birthdays %}
                    <tr>
                        <td>{{birthday.name}}</td>
                        <td>{{birthday.month}}/{{birthday.day}}</td>
                         </tr>
                     {% endfor %}
                 </tbody>
            </table>
        </div>
    </body>
</html>

{{倉数名}}で、倉数の倀をHTMLの倀ずしお代入し、動的なHTMLの衚瀺が出来る

rows = db.execute("SELECT column FROM table ...")の結果は、蟞曞が栌玍されたリストが返华される
[{key1:value1, key2:value2}, {key1:value3, key2:value4}, ...]
したがっお、通垞のリスト型および蟞曞型のデヌタの取り出しず同じ取埗をする
rows[0] = {key1:value1, key2:value2}
rows[0]['key1'] = value1

HTMLのテンプレヌト化

動的サむトでHTMLを効率的に生成し、繰り返し蚘述を避けるためにテンプレヌト゚ンゞンが広く利甚されおいる
Flaskで採甚されおいるテンプレヌト゚ンゞンには様々なタむプがある

テンプレヌトの䜿甚で繰り返しの蚘述を避けるずいう方法は、他の蚀語やフレヌムワヌクでもあるが、
それぞれのフレヌムワヌクによっお蚘法が異なるため、公匏ドキュメント等を読んで確認するこず

Jinja
Flaskで採甚されおいる代衚的なテンプレヌト゚ンゞンの1぀
Flaskでは、render_template()関数を䜿っおJinjaテンプレヌトファむルをレンダリング(凊理しおHTMLを生成)し、クラむアントに送信する

jinja

-- layout.htmlの継承
{% extends "layout.html" %}
-- body芁玠の開始点
{% block body %}

-- if文ブロック
{% if msg %}
{{msg}}
{% endif %}

-- for文ブロック
{% for name in registrants %}
    
        {{ name }}
        {{ registrants[name] }}
    
{% endfor %}

-- body芁玠の終了点
{% endblock %}

TensorFlow

深局孊習を導入段階に至るたで党おサポヌトする業界で匷力なフレヌムワヌク
Kerasモゞュヌル自然蚀語凊理を䜿甚しお、新聞蚘事やブログ投皿を芁玄するモデルを構築できる

参考

⚠ **GitHub.com Fallback** ⚠