Python 3: print と return について(超基礎)
print()
とreturn
について
関数の定義でprint()
とreturn
どちらをつかうべきか?
print()
・・・表示するだけreturn
・・・戻り値を返す
>>> def print_hello(): ... print("hello") ... >>> print_hello() hello
>>> def return_hello(): ... return "hello" ... >>> return_hello() 'hello' >>> print(return_hello()) hello
ジェネレータ関数で理解を深める
- ジェネレータ関数では,
return
の代わりにyield
を用いる - ジェネレータ関数を定義して,イテレータのように値を次々を取り出せるオブジェクトを作ることができる
Question:range(10)
から奇数を返すodds
というジェネレータ関数を定義し,返された3番目の値を見つけて表示せよ.
odds()
を実行するとジェネレータ・オブジェクトであることが分かる.
>>> def odds(): ... for num in range(1, 10, 2): ... yield num ... >>> for count, number in enumerate(odds(), 1): ... if count == 3: ... print(number) ... break ... 5
odds2()
では,return
によってfor
文で現れる最初の値が返される.odds2()
はint
型であることが分かる
>>> def odds2(): ... for num in range(1, 10, 2): ... return num ... >>> odds2() 1 >>> odds2() 1 >>> for count, number in enumerate(odds2(), 1): ... if count == 3: ... print(number) ... break ... Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'int' object is not iterable
odds3()
ではprint()
によって1から10までの奇数が表示されるodds3()
はNoneType
型で,これはイテラブルでないのでエラーを吐く
>>> def odds3(): ... for num in range(1, 10, 2): ... print(num) ... >>> odds3() 1 3 5 7 9 >>> for count, number in enumerate(odds3(), 1): ... if count == 3: ... print(number) ... break ... 1 3 5 7 9 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'NoneType' object is not iterable
NoneType
とは?
>>> type(None) <class 'NoneType'>
NoneType
についてはまとめ中...
Python:文字列について(超基礎)
文字列について
- 文字の値は,文字列またはストリングという
- ダブルクォートまたはシングルクォートで囲って作る
- 例:
"文字列"
または'文字列'
- 例:
- 文字列の中に改行やタブを埋め込みたいときは,エスケープシークエンスを用いる
- 改行:
\n
- 水平タブ:
\t
- キャリッジリターン(一番前に移動):
\r
- ダブルクォート:
\"
- シングルクォート:
\'
- バックスラッシュ:
\\
- 改行:
- 複数行の文字列はクォートを3個続けて囲めば良い
"""文字列"""
または'''文字列'''
型の変換について
"大きさ12.3m"
のように文字列と数値を連結したいとき,+演算子ではエラーが起きるstr()
を用いて数値を文字列に型変換すれば良い
>>> num = 12.3 >>> a = "大きさ" + str(num) + "m" >>> a '大きさ12.3m'
- 同様に,整数値への型変換は
int()
,浮動小数点への型変換はfloat()
,論理値への型変換はbool()
で行える
format()
を用いて文字列に値を埋め込む
- Python 3.6からは,f"{値}"またはF"{値}"で,値を文字列に埋め込めるようになった
- fを付けた文字列には変数を埋め込める
>>> a = "斎藤" >>> b = 25 >>> c = 165.0 >>> ans = f"{a}さん,年齢{b}歳,身長{c}cmです." >>> print(ans) 斎藤さん,年齢25歳,身長165.0cmです.
Code Penとは?(さくっと)
CodePenとは
- Webブラウザ上でコーディングできる
- プレビューがすぐ確認できる
- ソースコードが共有できる
- 他人のソースも編集できる
- ソースをWebサイトに埋め込むのが簡単にできる
- 対応言語:HTML, CSS, JavaScript など
- はてなブログにもCodePenが埋め込める!
Python 3:3次元グラフの書き方(matplotlib, pyplot, mplot3d, MPL)
3次元のグラフの書き方
ニューラルネットワークの学習で現れる,偏微分(勾配)の理解のため3次元グラフを描いてみる.(参考:数値微分)
Pythonで,NumPyとmatplotlibを使って3次元グラフを描く
準備
- 3次元なので
mpl_toolkits.mplot3d
などをインポート
from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np
- 引数の2乗和を計算する関数を例として考える
def func1(x, y): return x**2 + y**2
- 描写データの作成
- 3次元で描写するには2次元メッシュが必要
- 2次元配列をarangeを用いて作る
- x, y をそれぞれ1次元領域で分割する
x = np.arange(-3.0, 3.0, 0.1) y = np.arange(-3.0, 3.0, 0.1)
- 2次元メッシュはmeshgridでつくる
- Xの行にxの行列を,Yは列にyの配列を入れたものになっている
X, Y = np.meshgrid(x, y) Z = func1(X, Y)
- グラフの作成
- figureで2次元の図を生成する
- その後,Axes3D関数で3次元にする
fig = plt.figure() ax = Axes3D(fig)
- 軸ラベルの設定
ax.set_xlabel("x") ax.set_ylabel("y") ax.set_zlabel("f(x, y)")
-グラフ描写
ax.plot_wireframe(X, Y, Z) plt.show()
以上をまとめて実装すれば,以下のような3次元のグラフが描画されます.
plotのプロパティとして,color(線の色),linestyle(線の種類),マーカーの種類などが変更できる.
もっと簡単に描けるコードなどありましたらご教授ください.
詳細は後ほど追加する予定です.
Python 3:クラスとインスタンス(オブジェクト) (超基礎)
クラスとは?
- クラス:オブジェクトを作るための設計図
- インスタンス:クラスから作ったオブジェクトのこと
- クラスではオブジェクトの「属性」と「実行できること」を定義する
- 属性は変数で,実行できることは関数(メソッド)で定義する
- 以下,クラス定義の構文
class クラス名: ステートメント
銃(Gun)を例として,Gunクラスのオブジェクト仕様を定義してみる
- Gunクラスのオブジェクトには,次に示す変数と関数を仮定する
- 変数
- color:銃の色(初期値"black")
- number:装弾数(初期値 0)
- 関数
- shoot:引数で指定した数だけ弾を打つ
- 変数
- 初期化メソッド
- クラス定義にはインスタンス(クラスから作ったオブジェクト)が作られたときに実行される初期化メソッドを書くことができる
def __init__(self, 引数1, 引数2, ...): 初期化の処理
- 注意
- 第1引数である
self
には初期値が設定されていないので省略不可 self
にはインスタンス自身の参照が入っている
- 第1引数である
- Gunクラスをつくる
class Gun: #Gunクラス def __int__(self, color="black") #初期化メソッド self.color = color #引数で受け取った値を代入 self.number = 0 #装弾数 0 から始める
- この後,
from ex2-3 import Gun
とやって,gun1 = Gun()
とすれば良い
要望有ればもう少し詳しくまとめます.
Python 3:sys.pathとos.pathについて(機械学習,手書き数字認識)
Python:モジュールについて(超基礎)
モジュールとは?
面倒だ!
モジュールのインポート(モジュールを使う)方法
- ある関数を定義したモジュールを
module.py
とする - コードでは,
import modele
と書いてmoduleモジュールを呼び出す(拡張子の.py
はいらない) - あとは,関数を使うだけ!
まとめ:
from モジュール名 import クラス名(関数名も可) as 別名
- as 別名 として「別名」で呼び出せる
- よく使う関数はファイルに保存し,それを呼び出して使う
- モジュールはPythonの定義や文が入ったファイル
- ファイル名はモジュール名に接尾語
.py
が付いたもの import モジュール名
でモジュールが呼び出せる
とりあえず,ここまでが導入です.