-
Pythonのstr()とrepr()の違いとは?使い分けのポイントを徹底解説
Pythonのstr()とrepr()は、どちらもオブジェクトを文字列として表現するためのメソッドです。一見すると同じ役割を果たしているように見えますが、実は両者には重要な違いが存在します。 Pythonの組み込み関数str(x)(xは任意のオブジェクト)を呼び出したとき、内部で何が起こっているのか考えたことはありますか?実はstr(x)の戻り値は2つの特殊メソッドによって決まります。まず__str__が優先的に呼ばれ、定義されていない場合には__repr__がフォールバックとして使用される仕組みです。 公式ドキュメントでの定義 まず、Pythonの公式ドキュメントがこれらの関数について何を説
-
Pythonの文字列テンプレートクラス(string.Template)の使い方を徹底解説
Pythonのstring.Templateクラスは、シンプルなテンプレート文字列を作成するための機能です。Python 2.4で初めて導入されました。テンプレートは、コンストラクタにテンプレート文字列を引数として渡すことで生成します。従来の%記号を使う文字列フォーマット演算子とは異なり、Templateオブジェクトではドル記号($)をプレースホルダーの目印として使用する点が特徴です。Templateクラスの主なメソッドTemplateクラスには、テンプレートから文字列を生成するためのメソッドが用意されています。string.Template(template) ― コンストラクタです。テンプ
-
Pythonの除算演算子とは?「/」と「//」の違いを徹底解説
はじめに:式のデータ型は引数で決まる一般に、式のデータ型は引数の型によって決まります。このルールはほとんどの演算子に共通しており、たとえば2つの整数を足し合わせれば、結果も整数になるのが自然です。しかし、除算の場合には話が少し複雑になります。開発者の間で2つの異なる期待が存在するからです。除算によって正確な浮動小数点数(float)を得たいケースもあれば、小数点以下を切り捨てた整数の結果を求めたいケースもあるのです。Python 2における「/」演算子の挙動従来のPythonでは、除算演算子「/」の振る舞いは引数の型だけに依存していました。たとえばPython 2.7では、20 / 7 は両方
-
Pythonのクラス変数(静的変数)とは?定義方法とアクセス方法を徹底解説
Pythonでは、クラス内のメソッドの外側で宣言された変数を「クラス変数」または「静的変数」と呼びます。クラス変数はクラス自体に属し、すべてのインスタンス間で共有される点が大きな特徴です。クラス変数はクラス名を通じて参照するのが基本ですが、インスタンス経由でも読み取ることができます。ただし、インスタンス経由で代入を行うと、そのインスタンス固有の属性が新しく作られるため注意が必要です。例1:クラス変数を使ったカウント管理以下は、クラス変数とインスタンス変数の違いを示すサンプルプログラムです。class Fruits(object): count = 0 def __init__(
-
Pythonでセットのすべての順列を生成する3つの方法
数学において、集合のすべての要素を何らかの順序や並びに配置すること、また、すでに順序付けられた集合の要素を並べ替えることを順列(パーミュテーション)と呼びます。 Pythonでは、いくつかの異なる手法を使って順列を生成できます。本記事では、代表的な3つの方法をコード例とともにわかりやすく紹介します。 方法1:itertoolsモジュールを使う Pythonには、順列や組み合わせを扱うための専用モジュール itertools が標準で用意されています。最もシンプルで推奨される方法です。 モジュールのインポート >>> import itertools >>>
-
Pythonで%演算子を使った文字列フォーマットの基本と使い方
Pythonでは、文字列を整形(フォーマット)するために複数の方法が用意されています。主な方法は以下の3つです。% 演算子を使う方法{} (formatメソッドやf文字列)を使う方法Template文字列を使う方法この記事では、その中でも「%」を使った文字列フォーマットについて詳しく解説します。文字列フォーマットの2つの方式Pythonの文字列フォーマットには、大きく分けて以下の2つの方式があります。文字列フォーマット式:C言語のprintfスタイルに基づいた方法(%演算子)文字列フォーマットメソッド呼び出し:Python 2.6以降で利用可能なstr.format()メソッドなど%フォーマッ
-
Pythonの文字列に対する論理演算子(and・or)の挙動と使い方
Pythonでは、論理演算子 and と or を文字列に対しても適用できます。空文字列()はブール値として False と評価されます。まずは、この2つの論理演算子がそれぞれどのような動作をするのかを確認しましょう。 and演算子・or演算子の基本動作 and 演算子は、式の中に偽(falsy)と評価される値があれば最初のその値を返し、すべて真(truthy)であれば最後の値を返します。 一方、or 演算子は、式の中に真(truthy)と評価される値があれば最初のその値を返し、すべて偽(falsy)であれば最後の値を返します。 演算結果 x and yx が偽なら x、そうでなければ
-
【Python】行・列ソート済み行列に含まれる負の数を効率的にカウントする方法
この記事では、行方向・列方向にソートされた行列(row-wise and column-wise sorted matrix)に含まれる負の数を、計算量の少ない最適なアルゴリズムでカウントするPythonプログラムを紹介します。 行・列ソート済み行列とは 「行・列ソート済み配列」とは、任意の位置にある値が、同じ行の右隣の値、および同じ列の下の値と比較して小さいか等しい(昇順になっている)行列のことです。つまり、左から右へ、上から下へと向かって値が増えていく構造を持っています。 例:行列Mの場合 M = [[-40, -12, 1, 5], [-35, -2, 5, 15],
-
Pythonでクラス変数を変更する方法:インスタンス変数との違いと正しい書き方
Pythonのオブジェクト指向プログラミングでは、変数を「クラスレベル」または「インスタンスレベル」で定義できます。変数とは、プログラム内で扱う値を表す記号にすぎません。クラスレベルで定義された変数はクラス変数、インスタンス(オブジェクト)レベルで定義された変数はインスタンス変数と呼ばれます。両者の違いは、以下のシンプルな例で確認してみましょう。クラス変数とインスタンス変数の基本例# Sharkクラスの定義 class Shark: animal_type = fish # クラス変数 def __init__(self, name, age): self.
-
Pythonのfunctools.partialで学ぶ部分関数(部分適用)の基本と活用術
誰もが再利用しやすいコードを書きたいと思うものです。そんなときに覚えておくと便利なのが「部分関数(Partial Function)」です。部分関数を使うと、複数の引数を持つ関数から、引数の一部をあらかじめ固定した、より少ない引数で呼び出せる新しい関数を簡単に作り出せます。 functools.partialとは? Pythonでは、標準ライブラリのfunctoolsモジュールに含まれるpartial()を使うことで、部分適用(部分的な関数適用)を実現できます。 以下は、operatorモジュールのadd関数と組み合わせたシンプルな例です。 >>> from functo
-
Python入門:リストスライスとリスト内包表記の基本を徹底解説
この記事では、Pythonにおけるリストスライス(list slicing)とリスト内包表記(list comprehension)について、初心者にもわかりやすく解説します。リストスライスとは?「スライス」という言葉は、文字通り「何かを小さく切り分ける」という意味です。リストスライスとは、元のリストから一部分だけを取り出す処理のことを指します。どこから切り出すか(開始位置)、どこで止めるか(終了位置)、どの間隔で切り出すか(ステップ数)を自由に指定できるのが特徴です。リスト内包表記とは?リスト内包表記は、既存のリストをもとに新しいリストを生成するための記法です。forループや条件式を1行にま
-
PythonでWebからファイルをダウンロードする方法|requestsライブラリの使い方を徹底解説
Pythonには、urllibやrequestsなど、Webからファイルをダウンロードするためのさまざまなモジュールが用意されています。本記事では、その中でも定番のrequestsライブラリを使用して、URLから効率的にファイルをダウンロードする方法を、ステップごとにわかりやすく解説します。 requestsライブラリでファイルをダウンロードする基本手順 1. モジュールをインポートする import requests 2. ダウンロード対象のURLを指定する url = https://www.facebook.com/favicon.ico r = requests.get(url, al
-
PythonとSeleniumでWhatsAppチャットボットを作る方法
はじめに この記事では、Pythonを使ってWhatsAppのチャットボットを作成する方法を解説します。TwitterやFacebook向けの一般的なチャットボットとは異なり、WhatsAppは運営ポリシーの関係上、プラットフォーム上で直接ボットを動かすことができません。 しかし、SeleniumというPythonの強力なパッケージを使えば、ブラウザの操作を自動化することでこれを実現できます。Seleniumを利用すれば、ブラウザ経由で「WhatsApp Web」を自由に操作できるのです。 必要なもの 準備が必要なのは、主に以下の3点です。 1. Selenium Seleniumはpip
-
【初心者向け】PythonとBeautifulSoupでWebスクレイピングを始める方法
BeautifulSoupは、Pythonのbs4モジュールに含まれるクラスです。HTMLやXMLドキュメントを解析(パース)することを主な目的として設計されており、Webスクレイピングを行う際に最も広く使われているライブラリの一つです。この記事では、bs4のインストール方法から、実際にリンクを抽出するサンプルコードまで、初心者にもわかりやすく解説します。bs4(BeautifulSoup)のインストール方法bs4はpipを使えば簡単にインストールできます。コマンドライン(ターミナル)で以下のコマンドを実行してください。pip install bs4コマンドを実行すると、ターミナルには以下のよ
-
Pythonで扱える整数の最大値はいくつ?int型の上限を徹底解説
Pythonで整数を扱う際、「最大でどのくらいの値まで表現できるのか」と疑問に思ったことはありませんか?結論から言うと、Python 3では整数(int型)に明示的な上限は存在しません。C/C++のlong型のような固定精度の制約がなく、理論上は無限の精度で整数を扱えます。ただし、実際にはメモリやアドレス空間の大きさが事実上の上限となります。この記事では、Python 2とPython 3における整数の最大値の扱いの違いについて、具体例とともに詳しく解説します。Python 2の場合:int型からlong型への自動切り替えPython 2では、整数がint型の上限(sys.maxint)を超え
-
Pythonで関数から複数の値を返す5つの方法【タプル・辞書・クラス・リスト・ジェネレータ】
Pythonの関数は、複数の値を一度に返すことができます。返された値はそのまま変数に格納でき、関数が返せるのは1つの変数だけとは限りません。0個、1個、2個、それ以上の値でも自由に返せます。実は、この「複数の値を返せる」という性質はPythonの標準的な機能です。C++やJavaなど、多くの他のプログラミング言語では利用できない便利な特徴といえます。関数から複数の値を返すには、目的に応じてタプル、リスト、辞書などのオブジェクトを活用します。本記事では、代表的な5つの方法をコード例とともにわかりやすく解説します。方法1:タプル(tuple)を使うdef func(x): y0 = x +
-
Pythonのyieldとreturnの違いとは?使い分けのポイントを徹底解説
結論から言うと、プログラムの制御がreturn文に到達すると、その時点で関数の実行は終了し、それ以降のステートメントは実行されません。一方、yieldの場合は、制御がyield文に到達するとプログラムの実行が一時停止し、後から関数内の残りの処理を続きとして実行できるのが大きな特徴です。以下では、両者の動作について詳しく見ていきましょう。yieldとは関数内でyield文を使用すると、その関数は「ジェネレータ関数」となり、forループなどの反復処理で利用できるようになります。関数が実行されてyield文が評価されると、その直後に指定された値が呼び出し元のループへ返されます。そして次にループが回る
-
Pythonで2つの変数を1行で入れ替える(スワップする)方法
この記事では、Pythonを使って2つの変数をたった1行で入れ替える(スワップする)方法を解説します。多くのプログラミング言語では一時的な変数が必要になりますが、Pythonなら驚くほどシンプルに実現できます。基本的な書き方Pythonで変数を交換する標準的な方法は以下の通りです。>>> a = 20; b = 30>>> a20>>> b30>>> # 変数を1行で入れ替える>>> a, b = b, a>>> a30>>> b20上記のコードを実行すると、a と b
-
Pythonで単一変数と複数変数を出力する方法|Python 2.xと3.xの違いを徹底解説
この記事では、Pythonの異なる2つのバージョン(Python 2.7とPython 3.6)を使って、単一変数および複数変数の出力方法をそれぞれ確認していきます。バージョンによってprintの書き方が大きく異なるため、その違いをコード例とともに見ていきましょう。 Python 2.7の場合 単一変数の出力 >>> #Python 2.7 >>> #単一変数の出力 >>> print 27 27 >>> print "Rahul" Rahul >>> #括弧を付けても単一変数とし
-
Pythonにインクリメント・デクリメント演算子はない?その理由と正しい使い方
Pythonにインクリメント・デクリメント演算子は存在しない Pythonには、C言語などでおなじみの単項インクリメント演算子(++)やデクリメント演算子(--)が用意されていません。代わりに、値を1つ増やす場合は a += 1 を、1つ減らす場合は a -= 1 を使用します。 a += 1 # 値を1増やす(インクリメント) a -= 1 # 値を1減らす(デクリメント) これはPythonの設計思想によるものです。「同じことを実現する方法は1つに絞る」というZen of Python(Pythonの禅)の原則に沿い、複数の記法をあえて許容していません。 基本的な使用例 >>