スタートページ> 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]