スタートページ> JavaScript> 他言語> Python 目次> →文字列の取扱とprint関数
ここでは、Colab Notebook環境での、Python本体だけでの文法を説明します。
網羅的な説明ではなく、Javascriptなどの類似言語の経験者に、一般的な言語に対してPythonの特徴(留意すべき事項)を示すだけにします。
配列の扱いや文字列の扱い、出力命令での print() 関数に関しては別途とします。
●文字コードは UTF-8。変数に日本語を用いることができる(推奨されないしエラーになることもある)
●コメントは #+半角空白 以降
●( ) と [ ] と { } ',' と ',' ':' と ';' などを用いる記法が多く、間違えやすいので注意すること。
●1行に複数命令は書けない。
●1命令を複数行に継続することはできる。
(), [], {} 内の「,」で分離する要素や式は複数の行に継続できる。
それ以外のときは、行末に \(バックスラッシュ) を付ける。
●インデントが意味を持つ
通常の命令はインデントを付けてはならない。
if/for/def(関数)などの処理ブロックはインデントし、その終了はインデントなしの命令で示す。
参照(演算子一覧)https://www.atmarkit.co.jp/ait/articles/1907/23/news010.html
●算術演算子
// 除算(整数除算の商)
% 剰余
** 累乗
●比較演算子
==
!=
in
and or not
if 条件: :が必要。次行からのインデントした範囲が処理ブロックになる
処理ブロック
elif 条件: else ifではない
処理ブロック
else:
処理ブロック
if終了後の次命令 インデントしない
if vk in v: ベクトルv の中に vk が存在するか
例示
v = ['A', 'B', 'C', 'D']
if 'E' in v:
print('Eあり')
elif 'A' in v:
print('Aあり')
else:
print('EもAもない')
print('比較完了')
Python では、スカラー間での演算であり、v + 10 (vはベクトル)のような記述はできない(Numpyの環境なら可能)。
for ループなどで処理することになる。
● break/continueが使える
for ループ条件:
条件が満足する間の反復処理ブロック
else:
A「ループ条件が満足しなくなった」
B「反復処理のブロックでエラー(例外)が発生した」タイミングで実行
(Aは通常は用いない。「条件を満足することがない」ようなときに使う)
for k in range(kmin, kmax, dk): 他言語での for(k=kmin; k<kmax; k++) と同じ kmax は実行されない! for k in range(kmax): k=0,1.2, ,kmax-1 サイズnのベクトルv を対象にするとき for k in range(len(v)): k=0,1.2, ,n-1 for vk in v: vk = v[0], v[1], ,v[n-1]
ベクトル v = [0, 10, 20, 30] のv[0] v[2] に1を加える
v = [0, 10, 20, 30]
for k = range(0,4,2):
v[k] += 1
print(v) # [1, 10, 21, 30]
ベクトル v = ['A', 'B', 'CB', 'D'] の中に 'B' を含む要素が存在するか
v = ['A', 'B', 'CB', 'D']
w = 'B'
n = 0
for vk in v:
if w in vk:
print(vk)
n = n + 1
print('個数 = %d' % (n))
# B
# CB
# 個数 = 2
print() や range() などは組込み関数です。 https://docs.python.org/ja/3.7/library/functions.html#built-in-functions sqrt() や sin() などの数学ライブラリの関数を使うときは、 import math としてライブラリの利用を宣言しておき、 math.sqrt(x) のように使います。 参照:https://docs.python.org/ja/3/library/math.html
def 関数(パラメーター1, パラメーター2, ……) :
インデントして命令ブロック
(end に相当すす命令はない)
return 戻り値
関数(引数1, 引数2, ……) インデントを戻す
例
# 関数
def 加算(x, y):
return x+y
# 呼出側プログラム
a = 1
b = 2
z = 加算(a, b)
print(z) # 3
参照:https://www.atmarkit.co.jp/ait/articles/1905/21/news009.html
●引数が配列
# 関数
def 合計(v):
s = 0
for vk in v:
s = s + vk
return s
# 呼出側プログラム
v = [0,1,2,3]
z = 合計(v)
print(z) # 6
●戻り値が配列
# 関数
def 抜出(kmin, kmax):
v = [10,11,12,13,14,15,16]
w = v[kmin:kmax+1]
return w
# 呼出側プログラム
v = [10,11,12,13,14,15,16]
z = 抜出(2, 4) # v[2]~v[4] を z[0]~に入れる
print(z) # [12, 13, 14]
print(z[0]) # 12
●戻り値が編集文字列
# 関数
def 結合(x, y):
return f'{x}{y}'
# 呼出側プログラム
z = 結合('abc','xyz')
print(z) # abcxyz
●パラメタ数≠引数 →エラーになる
def func(p1, p2, p3):
return (p1+p2+p3)
plint(func(1, 2)) # エラー
def func(p1, p2):
return (p1+p2)
plint(func(1, 2, 3)) # エラー
●キーワード引数
def func(p1, p2, p3):
print(p1, p2, p3) # abc 123 0.98
func(p2=123, p3=0.98, p1='abc')
位置引数とキーワード引数が混在するときは、位置引数を先に置く。
●デフォルト指定
def func(p1='abc', p2=123, p3=0.98):
print(p1, p2, p3) # abc xyz 0.98
func(p2='xyz')
●関数の入れ子
x = 1
y = 2
print('A:x=', x, 'y=', y) # A:x= 1 y= 2
def 親関数(x, y):
print('B: x=', x, 'y=', y) # B: x= 1 y= 2
def 子関数(y): # この y はメインの y とは無関係
print('C: x=', x, 'y=', y, 'x+y=', x+y) # C: x= 1 y= 10 x+y= 11
return x + y
z = 子関数(10)
print('D: x=', x, 'y=', y, '子関数戻り(z=x+y)=', z) # D: x= 1 y= 2 子関数戻り(z=x+y)= 11
return x + y
z = 親関数(x, y)
print('E: x=', x, 'y=', y, '親関数戻り(z=x+y)=', z) # E: x= 1 y= 2 親関数戻り(z=x+y)= 3
# この y は子関数呼出とは無関係
●関数を変数に代入
関数に別名を付ける
別名 = 元の関数名 () を付けない
import math
平方根 = math.sqrt # 関数math.sqrtを変数 平方根 とし、その変数で関数を呼び出す
print(平方根(16)) # 4.0
●関数を受け取る関数 apply を定義
def apply(関数, 引数):
return 関数(引数)
import math
print(apply(math.sqrt, 16)) # 4.0
print(apply(math.log2, 16)) # 4.0
一般形 lambda パラメータ: 戻り値の式 パラメータは「,」で区切る。パラメータがないときは「:」だけにする。 式は1つだけである。 例 加算 = lambda x,y: x+y print(加算(1,2)) # 3
一般形
filter(真偽式, 配列)
例 配列vから偶数の要素を取り出して配列 w を生成
v = [0, 1, 2, 3, 4, 5]
結果 = filter(lambda 要素: 要素 % 2 == 0, v) # 要素 % 2 == 0 2で割った剰余が0
w = []
for 数値 in 結果:
w.append(数値) # 配列の後に数値を追加
print(w) # [0, 2, 4]