【Python】本家ドキュメントリンク集

Pythonを勉強していて、何か分からなかった時、Googleで検索すればだいたいの情報は出てくると思いますが、とりあえず本家のページで確認して、正しい情報を知りたい!という事で、本家ページのリンク集です。

(随時更新予定です)

 

モジュール 概要
Python(日本語) Pythonのリファレンス、チュートリアルなど
math 数値の切り捨て、切り上げ、絶対値やSin, Cos, PI など
tkinter ウィンドウGUIのリファレンスチュートリアルなど
os 環境変数、ファイルパスの操作(ファイル名、ディレクトリの取得など)
matplotlib
データの可視化、数値データのグラフ表示、画像の表示など
numpy データ配列、乱数、FFT、行列演算など
PIL(pillow) 画像ファイルを開く、保存、画像データの変換など

【Python/os】カレントディレクトリの取得/設定

カレントディレクトリを取得/設定するにはosモジュールgetcwd() および chdir() を用います。

getcwd カレントディレクトリの取得
chdir カレントディレクトリの設定

 

以下に、カレントディレクトリの取得/設定を繰り返したサンプルを示します。

import os

# カレントディレクトリの取得
current = os.getcwd()
print(current)

# カレントディレクトリの設定(一つ上)
os.chdir("../")

# カレントディレクトリの取得
current = os.getcwd()
print(current)

# カレントディレクトリの設定(直接パスの指定)
os.chdir("c:\\Temp")

# カレントディレクトリの取得
current = os.getcwd()
print(current)

(実行結果)

【Python】リストの作成、追加、削除、挿入など

C#では、配列とリストは明確に別物なのですが、Pythonでは配列と言いながらリストの事を指している場合が多いようです。

Pythonには型宣言が無いので、C#で言うところのobjectクラスのリスト(List<object>)にイメージが近く、各要素には、数値や文字列などの、ごちゃまぜもできます。

以下のコード例は、上から順に実行した場合です。

リストの宣言

角カッコ([])で変数がリストである事を宣言します。

list_data = []

リストの初期化

角カッコ([])の中に要素をカンマ(,)で区切って初期化します。
各要素の型はごちゃまぜにできます。

list_data = [0, "abc", 2, 3, "def", 4]
print(list_data)

実行結果

[0, ‘abc’, 2, 3, ‘def’, 4]

要素の追加

append(追加する要素)で、リストの最後に要素が追加されます。

list_data.append(5)
print(list_data)

実行結果

[0, ‘abc’, 2, 3, ‘def’, 4, 5]

リストにリストを追加

元のリスト.extend(追加するリスト)で、元のリストに別のリストを追加し、追加されたリストは元のリストに格納されます

list_data = [0, 'abc', 2, 3, 'def', 4, 5]
list_ext  = ['ghi', 6, 7, 8, 9, 10, 11, 12]
list_data.extend(list_ext)
print(list_data)

実行結果

[0, ‘abc’, 2, 3, ‘def’, 4, 5, ‘ghi’, 6, 7, 8, 9, 10, 11, 12]

指定した要素のindex番号を取得

index(番号を取得する要素)で、要素のindex番号を取得します。
指定した要素が複数ある場合は、最初に見つけた要素のindex番号を取得します。

print(list_data.index('ghi'))

実行結果

7

要素の番号を指定して削除

del リスト[削除するindex番号]で、要素を削除します。

del list_data[list_data.index('ghi')]
print(list_data)

実行結果

[0, ‘abc’, 2, 3, ‘def’, 4, 5, 6, 7, 8, 9, 10, 11, 12]

要素の番号を指定して要素を抜き出す(削除する)

pop(削除する要素のindex番号)で、要素を削除し、削除した要素を返します。

ret = list_data.pop(1)
print(ret)
print(list_data)

実行結果

abc

[0, 2, 3, ‘def’, 4, 5]

要素を指定して削除

remove(削除する要素)で、要素を削除します。
指定した要素が複数ある場合は、最初に見つけた要素を削除します。

list_data.remove("def")
print(list_data)

実行結果

[0, 2, 3, 4, 5]

要素の挿入

insert(挿入する場所のindex番号, 挿入する要素)で、要素を挿入します。

list_data.insert(1, 10)
print(list_data)

実行結果

[0, 10, 2, 3, 4, 5]

要素があるかどうか?

要素 in リストで、要素があれば True、なければ Falseが返ります。

print(10 in list_data)
print(11 in list_data)

実行結果

True
False

要素のindex番号を取得

index(番号を取得する要素)で、要素のindex番号を取得します。
指定した要素が複数ある場合は、最初に見つけた要素のindex番号を取得します。

print(list_data.index(10))

実行結果

1

リストの要素数を取得

len(リスト)で、要素の個数を取得します。

print(len(list_data))

実行結果

6

指定した要素の個数を取得

count(要素)で、リスト中の要素の個数を取得します。

list_data = [0, 1, "abc, 2, 3, "abc", 4, 5]
print(list_data.count("abc"))

実行結果

2

 

【Python】数値演算

Pythonにおいて、足し算、引き算、掛け算、割り算などの数値演算は、以下のようになります。

 

演算の種類 演算子 計算例 答え
足し算 + 2 + 3 5
引き算 7 – 4 3
掛け算 * 3 * 6 18
割り算 / 7 / 2 3.5
商(小数以下切り捨て) // 7 // 2 3
余り % 7 % 2 1
べき乗 ** 2 ** 8 256

 

特に、割り算は整数で割っても答えが小数で返されるのは、他のC言語やC#の仕様とは異なるので、注意が必要です。切り捨ての演算(//)も覚えておきたいところですね。

 

画像処理の場合、4の倍数の計算とかもよくやっているのですが、以下のような計算になります。

(計算例)638を超える4の倍数の値の計算

>>> (638 + 3) // 4 * 4
640

【Python】importとは?

Pythonを勉強し始めると、いきなり

import numpy as np

とかが出てきて、ナニコレ?ってなるのですが、C言語で言うところのヘッダファイル(*.h)のインクルードにイメージが近いと思います。

Pythonでは、import とすることでモジュール(ライブラリ)を使用できるようにしています。

 

書式的には

import 「モジュール名 もしくは Pythonファイル名の拡張子なし」 as 「代替名」

となります。

 

そのため、最初のプログラム例では、numpyモジュールを np として用いる宣言をしています。

(使用例)

import numpy as np

data = np.array([0,1,2])
print(data)

as以降の代替名の部分は無くても構いません。

import numpy

data = numpy.array([0,1,2])
print(data)

また、これとは別に、似た感じで

from matplotlib import pyplot

というのも登場しますが、この書式的には

from 「モジュール名」 import 「クラス名 もしくは 関数名」

となります。

そのため、上記の例では、 matplotlibモジュールの中からpyplotだけを用いる事を宣言しています。

【Python】Visual Studioのインデントを自動に設定する

Visual StudioでPythonのプログラムを書くとき、for文やif文など、インデントが必要な場合、改行しても自動でインデントしてくれないので、自動でインデントするための設定を行います。

 

設定方法は、Visual Studioのメニューから、ツール→オプションでオプション設定画面を開きます。

 

 

オプション画面の テキストエディター → Python → タブ を選択し、インデントスマート を選択し、OKボタンをクリックします。

これで、自動でインデントしてくれます。

C#erによるPython学習、C#とPythonの違い

2021年現在、仕事では 「C# + C言語のDLL」の開発がほとんどで、Pythonを使う機会が無いのですが、さすがに Python を勉強するか?と思っています。

しかし、C#脳でPythonを勉強していると、なんで、こうするの?と思う事がよくあります。

でも、私がVB6.0から→(C++/CLI)→C#に乗り換えた時もC#の何がいいの?とか思ってましたが、今はC#最高!になってます。(C++/CLIはやらなきゃ良かった。。)

Python最高!になる日は来るのだろうか??


(2021.5.22追記)

Pythonを集中的に勉強しだしてから半年たちましたが、ようやくPythonでもいいかも?と思えるようになってきました。最初の1か月ぐらいはPythonが嫌でしょうがなかったですけどねww

開発環境もVisual Studio2019であれば、デバッグなどはC#と同じようにステップ実行やウォッチなども使えるので便利です。Visual Studio Codeも使ってみましたが、コーディングはVS Codeの方がやりやすいように感じましたが、デバッグは慣れもあって、Visual Studioの方が良かったです。

Visual Studio2015も使いましたが、Pythonの環境を構築するのが難しくて断念しました。

Pythonを始めてモヤモヤポイントがGUIをどうするの?というのがあったのですが、tkinterを使うとC#と同じようなGUIを作る事ができます。

Pythonは処理時間が遅くない?という思いもありましたが、OpenCVやnumpyなどを使えば処理が遅い事は無いですし、C#でやっていた時のように重たい処理はC言語ライブラリを作成し、DllImportで関数を呼んでいたのと同じ様に、Pythonではctypesというモジュールを使うと、C言語ライブラリの関数を呼ぶ事が可能になります。

あとは、Pythonではフリーで使えるライブラリが圧倒的に多いので、目的に合ったライブラリが見つかれば、開発時間の短縮にもつながると思います。


 

以下は、C#から見たときのPythonの違いを書いています。

 

構文的な違い

  • 終端文字(;)が無い
  • if文やfor文などの中カッコ({})が無い代わりに、行の最後にコロン(:)を付けてインデントを揃える
  • クラスのNewがない。
    Newが無いので関数を呼んでいるのか?クラスをインスタンスしているのか?分かりづらい
  • クラスにprivate/publicが無い。基本、publicだが代替手法がある
  • オーバーロードがない。→デフォルト引数で代替できるところまで。
  • ラベルやボタンなどのC#で言うところのコントロールはPythonでは ウィジェット(widget)という
  • 特殊メソッドなるものがある

型宣言がない

int a = 123;
string b = "abc";
a = 123
b = "abc"

型が無いのに型違いでエラーになる事もあり、なかなか慣れません。。
とくに関数に変数を渡す時がわかりずらい。
型を調べるには type()関数を使うとできます。

a = 100
b = "abc"

print(type(a))
print(type(b))

# 型が XX かどうか?
if (type(a) is int):
  print("int型です")
elif (type(a) is float):
  print("float型です")
elif (type(a) is str):
  print("str型です")
else:
  print("その他の型です")

実行結果

<class ‘int’>

<class ‘str’>

int型です

型は、全てがC#でいうところのobject型に近い

 

行のコメント

// 一行のコメント
# 一行のコメント

行の先頭にシャープ(#)を付けます。

 

複数行のコメント

/*
複数行の
コメント
*/
"""
複数行の
コメント
"""

シングルクォーテーション(‘)を3つ(”’)もしくは ダブルクォーテーション(“)を3つ(”””‘)でコメントにしたい部分を囲います。

 

関数のコメント

/// <summary>
/// aとbを足す
/// </summary>
/// <param name="a">足す値a</param>
/// <param name="b">足す値b</param>
/// <returns></returns>
private static int Add(int a, int b)
{
    return a + b;
}

C#では、関数の上の行でスラッシュ(/)を3つ(///)書くと、XMLコメントのフォーマットが表示されるので、そこにコメントを記載します。

def add(a, b):
  """
  [概要]
  aとbを足したものを返す
  [パラメータ]
  a : 足す値a
  b : 足す値b
  [注釈]
  aとbは同じ型のこと
  """
  return a + b

関数名の行の下にインデントして、シングルクォーテーション(‘)を3つ(”’)もしくは ダブルクォーテーション(“)を3つ(”””‘)でコメントにしたい部分を囲います。

一般的なコメントの定型は分からないのですが、上記プログラムのように記載すると、開発環境によって、以下のように関数の説明が表示されます。

 

インクリメント/デクリメント

int i = 0;
i++;  // インクリメント
i--;  // デクリメント
i = 0
i += 1  # インクリメント
i -= 1  # デクリメント

値の代入は参照渡し?

まずは下記のサンプルをご覧ください。

a = 100
print(id(a))
a = 200
print(id(a))
b = a
print(id(b))

実行結果

10917664

10920864

10920864

id()関数はポインタ?みたいなのを取得できる関数がすが、上記の例では a に値を入れるたびに id が変わっています。さらに b に a を代入すると、a と b の id は等しくなります。

ただし、C#の参照渡し/値渡しの感覚とは少し異なるので注意が必要です。
どちらかというと、ポインタの値渡し(アドレスの値を渡す)と言った方が近いかもしれません。

 

まとめ

C#とPythonの違いは、当然ながら他にもたくさんありますが、個別にまとめたいと思います。

PythonはC#と比べて、処理は遅そうだし、画像の表示(フレームレート)も遅そうだし、GUIプログラムを作るのも大変そう。。と不安に思いながら勉強していてます。

Pythonの場合、処理をベタに書いている(クラスではない)例の紹介が多く、さらに、ほとんどがCUI(Character-based User Interface)なので、クラスでGUIなC#に慣れていると、どうしても抵抗があったのですが、GUIモジュールのTkinterをクラスで書き始めると、少しPythonの抵抗が薄れ始めています。

【Python】おすすめの開発環境は?

Pythonの始めるには、まずは開発環境を整える必要がありますが、Googleで調べると、いろいろと言葉が出てきて、何が何だか分からなくなります。(って、私はそうでした。)

 

Anaconda、Jupyter Notebook、Visual Source Code、PyCharmなどなど。。

 

Anacondaそのものが開発環境?とか思っていたレベルから始めたので、最初は大変でした。。

人によっても、おすすめしている開発環境が異なるので、何を信じたらいいか?分からなくなりますね。

おそらくは、人によって、Pythonをやる前の開発環境(OSや使用言語)が異なるために、おすすめも違ってくるのだと思いますが、WindowsでC#を使って開発をしていた身としては、以下の2つがおすすめ出来ると思っています。

 

Google Colaboratory

初めてPythonを触るなら、GoogleのColaboratoryがおすすめです。

 

Colaboratoryのページ(https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja)にアクセスさえすれば、開発環境のインストールなしに、Pythonプログラムを組む事が可能になります。

 

下の画像は、私がPythonを勉強する時に使っていた画面ですが、Pythonのコードとテキストを入れ込めるので、注意点などをテキストで書きながら、動作を確認してPythonを勉強しています。

自分なりのテキストを作るつもりで、Pythonの動作を確かめていくと、後から見直せるので、便利だと思います。

さらに、ファイルがクラウド上にあるので、会社や自宅など、場所、PCを問わず、見る事ができるのも助かります。

 

オプションで、犬とか猫を表示出来るのも、ちょっとかわいい。。

 

まず最初は、このページ↓がおススメです。

https://www.python.jp/train/index.html

 

Visual Studio

ColaboratoryでPythonをある程度、覚えて、アプリを作りたくなったら、Visual Studio がおすすめだと思います。

 

それは私がC#をやっていたからという理由もありますが、プログラムのデバッグをするときに、やっぱりステップ実行をしながら変数の値をウォッチを使いながら確認したり、関数の定義へ行ったり/戻ったり、ステップインなどをしたくなる訳です。

そうしたら、やっぱり使い慣れている Visual Studio が一番便利に感じます。

 

 

また、Visual Studio 2017以降では、Pythonの開発環境というウィンドウがあり、Pythonのバージョンごとに各種ライブラリが簡単に切り替えられるようになっており、ライブラリのインストール、更新、削除が非常に簡単です。(Visual Studio2015にもPython環境のウィンドウがありますが、使いにくいです。)

 

まとめ

今回は、Pythonの開発環境として、Googleの Colaboratory と Visual Studio がおすすめと言っていますが、私自身も、まだPythonの開発経験が浅いので、結局のところ本当に何がいいのか?もやもやしている部分もありますが、C#の次にPythonをやる分には、上の2つが入りやすかったです。

また、Pythonにはさまざまなモジュール(ライブライ)があって、何からやったらいいの?という疑問もあったのですが、私の場合、Visual Studioで、ウィンドウGUI用モジュールのtkinterを勉強し始めてから、理解が進んだ気がします。

https://imagingsolution.net/tag/tkinter/

PythonをVisual Studioでインストールする方法

PythonはこれまでAnacondaをインストールしてJupyter NotebookからPythonのプログラムを書いていたのですが、今までプログラムといえばIDEはVisual Studioを使っていた身としては、お手軽にステップ実行ができるJupyter Notebookは良いといえばいいのですが、インテリセンスが使えないのは、ものすごくつらい。。

 

ということで、Visual StudioからPythonを使えるように、Visual StudioへPythonをインストールしました。

 

まず、私の環境は

●Windows10(64bit)

●Visual Studio Community 2017

です。

 

Visual Studio 2017では、後から簡単にPythonなどのオプションを追加できるようになっているので、Visual Studio 2017をインストールした後からのPythonのインストール方法です。

 

まずは、スタートメニューからVisual Studio Installerを起動します。

 

Visual Studio Installerが起動したら、Visual Studio Community 2017 の変更をクリックします。

 

Python開発の右上のチェックを入れ、オプションを選択します。

実際にどれが必要か?詳しくはわかっていないのですが、とりあえずはこの↓設定にしました。

 

オプションのチェックを入れたら、変更をクリックします。

すると、Pythonのインストールが始まります。

 

これで、インストールは完了なので、実際にPythonを起動してみます。

ファイルメニューのファイル→新規作成→プロジェクトと選択し

 

テンプレートの中からPythonを選択し、Pythonアプリケーションを選択し、名前、場所、ソリューション名は適当に指定して、OKボタンをクリックします。

 

すると、こんな画面が開きます。

 

Python環境のウィンドウが表示されていない場合は、Visual Studioのメニューより、表示→その他ウィンドウ→Python環境と選択し、Python環境のウィンドウを表示してください。

このウィンドウはnumpyやpillowなどの各種モジュールをPythonのバージョンごとに管理するウィンドウで、モジュールインストールなどを簡単に行う事が可能になります。ただし、Visual Studio2017以降がおすすめです。

次に、使用するPythonの環境(バージョン)を選択し、概要の部分をクリックし、パッケージ(PyPI)を選択します。

すると、Python環境ごとにインストールされているモジュール一覧が表示されます。

もし、必要なモジュールが表示されていない(インストールされていない)場合は、PyPIとインストールされたパッケージの検索の部分にモジュールの名前を入力すると、XXXのインストールと表示されているので、その部分をクリックするだけで、モジュールがインストールされます。

これでVisual StudioでPython開発環境の構築は完了です。

試しにimportするのにimとキー入力してみると、インテリセンスもちゃんと表示してくれます。

 

さらにこんなコード↓では

 

C#とかと同じようにブレークポイントを置いて、ステップ実行をしてみると、ウォッチの機能もちゃんと動いてくれます。

 

従来のコマンドラインのPythonの入力も対話型ウィンドウを開くの部分をクリックすると

 

このような画面がVisual Studioの下の方にウィンドウが表示されるので、この部分にコードを入力してPythonを実行することもできます。

 

ちなみに、今回はVisual StudioからAnacondaをインストールしたので、スタートメニューからJupyter Notebookの利用も可能です。

 

やっぱりプログラムを組むのには、インテリセンスやステップ実行、ウォッチの機能は欲しいので、しばらくはVisual StudioからPythonをいじろうと思っています。

【Python】開発環境の構築

C#では開発環境といえば、ほぼ一択でVisual Studioなので、Visual Studioを入れれば、それで済む話なのですが、Pythonの場合、IDE(開発環境)もいくつかあるので、素人の私からすると、結局、何をインストールすればいいの?

と、思ってしまうのですが、素人なら、まずはAnacondaを入れておけ!

という意見が多かったので、素直にそれに従うことにしました。

 

そもそもAnacondaって何?

というところから始まってしまうのですが、このAnacondaは言語(Python)や開発環境、各種ライブラリが一つのパッケージになっており、Anacondaさえ入れてしまえば、とりあえずはPythonのプログラムが組めるようになります。

開発環境(IDE)も比較的、情報の多いJupyter NotebookもAnacondaに含まれます。

 

まずは、Anacondaの入手先は、GoogleでAnacondaと検索すれば出てきますが、下記リンク先となります。

 

https://www.continuum.io/downloads

 

上記リンクをクリックすると、Anacondaのダウンロードページへと行き、私のPCはWindows10の64bitなので、下図の赤く囲った部分をクリックするとファイルのダウンロードが始まります。

 

 

クリックするとメールアドレスを登録するような画面が表示されますが、ここは NO THANKSで大丈夫でした。

 

 

ファイルは、私がダウンロードした時点では

 

Anaconda3-4.3.1-Windows-x86_64.exe

 

というファイル名でしたので、これをダブルクリックして、Pythonのインストールを開始します。

 

基本的には出てくる画面の初期状態のまま、次へ進んでいけば大丈夫です。

 

Nextをクリック

 

I Agree をクリック

 

Nextをクリック

 

インストール先を指定し、Nextをクリックするのですが、指定したフォルダに日本語(全角文字)が含まれると良くないらしいので注意

 

Installをクリック

 

 

これでインストールが開始されますが、私のPCでインストール時間は約30分かかりました…

 

インストールが終わったらNextをクリック

 

ここで、Finishを押せば終了ですが、

Learn more about Anaconda Cloud

のチェックは外しておいて大丈夫かも。。

ちなみに、チェックを入れてFinishをクリックすると、こんなページ↓が表示されます。

https://anaconda.org/

 

次に、とりあえずの目標だったPythonの開発環境であるJupyter Notebookを起動するには、スタートメニューから

 

Anaconda3(64-bit)

Jupyter Notebook

 

をクリックすると、Jupyter Notebookがブラウザで表示されます。

 

上図はユーザーのドキュメントフォルダ(C:\Users\ユーザー名)のフォルダ内のファイルが表示されています。

 

Pythonはじめました

最近は、画像処理やデータ処理の専門家でなくてもAIだのDeep Learningだの言う時代になり、少なくとも言葉だけはDeep Learningが流行っている実感はとてもします。

 

GoogleやAmazon、自動運転などの業界で、すでに実用レベルなのはわかるのですが、本当にそんなに実用されてる?

私の回りで、仕事としてDeep Learningなどをやっている人は少ないような気がしています。

 

とはいうものの、何も知らないでDeep LearningやAIという言葉を語るのもしゃくなので、まずは勉強するか!

ということで、Deep Learningのライブラリでほとんど使われているPythonを一からの勉強です。

 

私のスキルレベルとしては、Pythonは少しずつ勉強しているものの、ほとんど素人。

C#や画像処理、OpenCV、数学なんかは、少しは勉強したつもりだけど、Deep Learningって、何しているの??

という状態です。

 

そのため、しばらく書くてあろうPythonの記事は、個人的な備忘録の意味合いが強くなると思いますが、アドバイス等ありましたら、コメント頂けると幸いです。