プログラムを書くとき、解決すべき問題が銀行システム(取引、金利)、Webアプリケーション(ルート、テンプレート、レスポンス)など、特定の領域、いわゆるドメインに属することがよくあります。 PythonやJavaのような汎用プログラミング言語(GPL)でもこれらの問題は解決できますが、コードが詳細かつ繰り返しの多いものになりがちです。そこで DSL(ドメイン固有言語)を使用します。 DSL — ドメイン固有言語 ドメイン固有言語は、特定のドメインに特化したプログラミング仕様言語です。Python、C++、Javaのような汎用言語(GPL)とは異なります。主に2タイプあります: 外部 DSL —
メモリリークは、プログラムがメモリ割り当てを正しく管理できないことで発生し、利用可能メモリが減少し、プログラムの低速化やクラッシュを招く可能性があります。 Pythonではメモリ管理は一般的にインタプリタが担当しますが、メモリリーク は特に長時間実行アプリケーションで依然として発生し得ます。Pythonにおける メモリリークの診断と修正 には、メモリ割り当ての仕組みを理解し、問題領域を特定し、適切な解決策を適用することが含まれます。 Pythonにおけるメモリリークの原因 Pythonのメモリリークは、オブジェクトが参照され管理される方法に関連するいくつかの原因から生じます。主な原因は以下の通
Pythonにおける メタプログラミング とは、自分自身を知り、操作可能なコードを書くプラクティスを指します。メタクラスはPythonにおけるメタプログラミングの強力なツールで、クラスの作成と振る舞いをカスタマイズできます。メタクラスを使用すると、動的コード生成とリフレクションを通じて、より柔軟で効率的なプログラムを作成できます。 Pythonの メタプログラミング には、デコレータとメタクラスなどの技法が含まれます。このチュートリアルでは、動的コード生成とリフレクションを探索することで、メタクラスを用いたメタプログラミング について学びます。 メタクラスの定義 Pythonのメタプログラミン
スレッド間通信とは、Pythonのマルチスレッドプログラム内でスレッド間の通信と同期を可能にするプロセスを指します。 一般的に、Pythonのスレッドはプロセス内で同じメモリ空間を共有するため、共有変数、オブジェクト、threading モジュールが提供する特殊な同期プリミティブを通じてデータを交換し、活動を調整できます。 スレッド間通信を容易にするため、threading モジュールは Lock、Event、Condition、Semaphore などの同期プリミティブを提供します。このチュートリアルでは、EventオブジェクトとConditionオブジェクトを使用したスレッド間通信の方法を
Pythonの組み込み type() 関数は、オブジェクトが属するクラスを返します。Pythonでは、組み込みクラスもユーザー定義クラスも、どちらも type クラスのオブジェクトです。 例 class myclass: def __init__(self): self.myvar=10 return obj = myclass() print (class of int, type(int)) print (class of list, type(list)) print (class of dict, type(dict)) print (class of myclass, type(m
Pythonでのファイルのリネームと削除 Pythonでは、os モジュールの組み込み関数を使用してファイルのリネームと削除が可能です。これらの操作は、ファイルシステム内でのファイル管理において重要です。このチュートリアルでは、これらのアクションをステップバイステップで解説します。 Pythonでのファイルリネーム Pythonでファイルをリネームするには、os.rename() 関数を使用します。この関数は2つの引数を取ります:現在のファイル名と新しいファイル名。 構文 Pythonの rename() 関数の基本構文は以下の通りです: os.rename(current_file_nam
拡張モジュールの概要 C、C++、Javaなどのコンパイル言語で記述したコードは、別のPythonスクリプトに統合またはインポートできます。このコードは「拡張」と呼ばれます。 Python拡張モジュールは、通常のCライブラリに過ぎません。Unixマシンでは通常.so(共有オブジェクト)で終わり、Windowsマシンでは通常.dll(動的リンクライブラリ)を見かけます。 拡張記述の前提条件 拡張の記述を開始するには、Pythonヘッダーファイルが必要です。 Unixマシンでは、通常python2.5-devなどの開発者向けパッケージのインストールが必要 Windowsユーザーは、バイナリPy
Python GUI開発の選択肢 Pythonはグラフィカルユーザーインターフェース(GUI)開発のためのさまざまなオプションを提供します。最も重要なものは以下の通りです。 Tkinter - Pythonに同梱されているTk GUIツールキットへのPythonインターフェース。この章でこのオプションを扱います。 wxPython - wxWindows用のオープンソースPythonインターフェース https://wxpython.org JPython - JavaへのPython移植で、ローカルマシン上のJavaクラスライブラリへのシームレスなアクセスをPythonスクリプトに提供 h
XMLとは XMLは、オペレーティングシステムや開発言語に関係なく、他のアプリケーションから読み取れるアプリケーションを開発できる、ポータブルでオープンソースの言語です。 XMLの定義 Extensible Markup Language(XML)は、HTMLやSGMLによく似たマークアップ言語です。World Wide Web Consortium(W3C)によって勧告され、オープンスタンダードとして利用可能です。 XMLは、SQLベースのバックボーンを必要とせずに、少量から中量のデータを追跡するのに非常に有用です。 XMLパーサーアーキテクチャとAPI Python標準ライブラリは、X
スレッドとは 複数のスレッドを実行することは、複数の異なるプログラムを同時に実行することに似ていますが、以下の利点があります。 プロセス内の複数のスレッドはメインスレッドと同じデータ空間を共有するため、別プロセスの場合よりも簡単に情報を共有したり、互いに通信したりできます。 スレッドは軽量プロセスと呼ばれることもあり、多くのメモリオーバーヘッドを必要としません。プロセスよりも安価です。 スレッドには開始、実行シーケンス、結論があります。自身のコンテキスト内で現在どこを実行しているかを追跡する命令ポインタを持ちます。 プリエンプト(割り込み)される可能性がある 一時的に保留(スリープとも呼
SMTPとは Simple Mail Transfer Protocol(SMTP)は、メールの送信とメールサーバー間のメールルーティングを処理するプロトコルです。 Pythonはsmtplibモジュールを提供しており、SMTPクライアントセッションオブジェクトを定義しています。これを使用して、SMTPまたはESMTPリスナーデーモンを持つ任意のインターネットマシンにメールを送信できます。 SMTPオブジェクトの作成 後にメール送信に使用できるSMTPオブジェクトを作成する簡単な構文: import smtplib smtpObj = smtplib.SMTP([host[, port[,
ソケットとは ソケットは双方向通信チャネルのエンドポイントです。ソケットはプロセス内、同一マシン上のプロセス間、異なる大陸のプロセス間で通信できます。 ソケットは、Unixドメインソケット、TCP、UDPなど、さまざまなチャネルタイプで実装できます。socketライブラリは、一般的なトランスポートを処理するための特定のクラスと、残りを処理するための汎用インターフェースを提供します。 ソケットには独自の用語があります: No.用語と説明 1ドメイン - トランスポートメカニズムとして使用されるプロトコルファミリ。AF_INET、PF_INET、PF_UNIX、PF_X25などの定数 2
Python DB-APIとは データベースインターフェースのPython標準はPython DB-APIです。ほとんどのPythonデータベースインターフェースはこの標準に準拠しています。 アプリケーションに適したデータベースを選択できます。Python Database APIは以下のような幅広いデータベースサーバーをサポートしています。 GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 利用可能なPythonデータベースインターフェースの一覧: Python
正規表現とは 正規表現は、特殊な構文をパターンとして保持し、他の文字列や文字列セットとのマッチングや検索を支援する特殊な文字シーケンスです。正規表現はUNIXの世界で広く使用されています。 Pythonのreモジュールは、Perlライクな正規表現を完全にサポートしています。正規表現のコンパイルや使用中にエラーが発生した場合、reモジュールはre.error例外を発生させます。 正規表現を扱う2つの重要な関数を説明しますが、まず最初に:正規表現で使用すると特殊な意味を持つさまざまな文字があります。正規表現を扱う際の混乱を避けるため、Raw Strings(rexpression)を使用します。
OOP用語の概要 クラス - オブジェクトのユーザー定義プロトタイプ。そのクラスのオブジェクトを特徴づける属性のセットを定義。属性はデータメンバ(クラス変数とインスタンス変数)とメソッドで、ドット記法でアクセス クラス変数 - クラスのすべてのインスタンスで共有される変数。クラス内でメソッドの外側に定義。インスタンス変数ほど頻繁には使用されない データメンバ - クラスとそのオブジェクトに関連付けられたデータを保持するクラス変数またはインスタンス変数 関数オーバーロード - 特定の関数に複数の振る舞いを割り当てること。実行される操作は関与するオブジェクトや引数の型によって異なる インスタンス
概要 Pythonは、プログラム内の予期しないエラーを処理し、デバッグ機能を追加するための2つの重要な機能を提供します。 例外処理 - このチュートリアルで説明。Pythonで利用可能な標準例外の一覧: 標準例外 アサーション - 「Pythonのアサーション」チュートリアルで説明 標準例外の一覧 No.例外名と説明 1Exception - すべての例外の基底クラス 2StopIteration - イテレータのnext()メソッドがオブジェクトを指さないときに発生 3SystemExit - sys.exit()関数によって発生 4StandardError - StopIt
画面への出力 出力を生成する最も簡単な方法は、print文を使用することです。カンマで区切られたゼロ個以上の式を渡すことができます。この関数は、渡された式を文字列に変換し、標準出力に結果を書き込みます。 #!/usr/bin/python print(Python is really a great language,, isnt it?) これにより、標準画面に以下の結果が出力されます。 Python is really a great language, isnt it? キーボードからの入力 Pythonは、標準入力(デフォルトではキーボード)から1行のテキストを読み取るための2つの組
モジュールとは モジュールを使用すると、Pythonコードを論理的に整理できます。関連するコードをモジュールにグループ化することで、コードの理解と利用が容易になります。モジュールは、任意の名前の属性を持ち、それらをバインドおよび参照できるPythonオブジェクトです。 簡単に言うと、モジュールはPythonコードで構成されるファイルです。モジュールには関数、クラス、変数を定義でき、実行可能なコードを含めることもできます。 例 anameという名前のモジュールのPythonコードは、通常aname.pyというファイルに保存されます。以下は、support.pyというシンプルなモジュールの例です
関数とは、単一の関連するアクションを実行するために使用される、組織化され再利用可能なコードブロックです。関数は、アプリケーションのモジュール性を向上させ、高度なコード再利用を提供します。 ご存知の通り、Python には print() など多くの組み込み関数が用意されていますが、独自の関数を作成することもできます。これらは ユーザー定義関数 と呼ばれます。 関数の定義 必要な機能を提供するために関数を定義できます。Python で関数を定義するためのシンプルなルールは以下の通りです。 関数ブロックはキーワード def で始まり、その後に関数名と丸括弧(( ))が続きます。 入力パラメータま
Python プログラムは、日付と時刻をいくつかの方法で扱えます。日付フォーマット間の変換はコンピュータの一般的な作業です。Python の time モジュールと calendar モジュールは、日付と時刻の追跡に役立ちます。 ティック(Tick)とは 時間間隔は、秒単位の浮動小数点数で表されます。特定の時点は、1970 年 1 月 1 日 00:00:00(エポック)からの秒数で表現されます。 Python には time という一般的なモジュールがあり、時刻の操作や表現間の変換のための関数を提供します。関数 time.time() は、1970 年 1 月 1 日 00:00:00(エポ
Python