スタートページJavaScript他言語Python 目次>    →文字列の取扱とprint関数

Python単体の文法

ここでは、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文

if 条件:     :が必要。次行からのインデントした範囲が処理ブロックになる  
    処理ブロック
elif 条件:    else ifではない
    処理ブロック
else:
    処理ブロック
if終了後の次命令 インデントしない

in を用いた条件

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('比較完了')

for 文

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 関数

一般形
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]