静岡理工科大学 | 菅沼ホーム | Python と C/C++ 目次 |
01 >>> print(2 + 3) 02 5 03 >>> 3 + 4 04 7 05 >>> a = 10 06 >>> if a == 10: 07 ... print(a) 08 ... 09 10 10 >>> 'abc' 11 'abc'
py -3 -c print(2+3) # 一般形: python -c command [arg] ...
# -*- coding: UTF-8 -*- a = 10 b = 20 print(a + b)
py -3 cal1.py # 一般形: python ファイル名 [arg] ...
# -*- coding: UTF-8 -*- def add(a, b): c = a + b print(c) def sub(a, b): c = a - b print(c)
>>> import cal2 >>> cal2.add(2,3) 5 >>> cal2.sub(2,3) -1
>>> from cal2 import add
>>> from cal2 import *
py -3 cal2.py 2 3
if __name__ == "__main__": import sys add(int(sys.argv[1]), int(sys.argv[2]))
py -3 cal2.py 2 3 py -3 -m cal2 2 3
a = abc + efg * xxx \ + aaa - bbb / ccc \ + yyy / 30 + hhh # ~ に関する計算
aaa = [1, 2, 3, # ~ 4, 5, 6, # ~ 7, 8, 9] # ~
01 if 条件 : 02 a = 10 03 b = 20 04 else : 05 c = 30 06 d = 40
a = 10 # 変数 a に 10 を代入
# -*- coding: UTF-8 -*-
""" コメント・・・ コメント・・・ """
>>> 2 * "abc" + "efg" + "hij" 'abcabcefghij' >>> 2 * "abc" "efg" "hij" 'abcefghijabcefghij' >>> b"abc" b'abc' >>> b"文字列" # エラー( ASCII 文字だけ可能)
>>> """ ... abc ... def ... ghi ... """ '\nabc\ndef\nghi\n'
\newline 行末に \ を記述するとその行の改行が無視される \\ バックスラッシュ(円記号) \' 一重引用符(シングル クォーテーション) \" 二重引用符(ダブル クォーテーション) \a ベル \b バック スペース \f 改ページ \n 行送り \r 復帰 \t 水平タブ \v 垂直タブ \ooo 8進表記による ASCII 文字 \xhh 16進表記による ASCII 文字
\N{name} Unicode データベース中で name という名前の文字 \uxxxx 16-bit の十六進値 xxxx を持つ文字 \Uxxxxxxxx 32-bit の十六進値 xxxxxxxx を持つ文字
>>> 10 + True 11
>>> 3.14j # 3.14J でも良い 3.14j >>> 2.5 + 3.14j (2.5+3.14j) >>> complex(2.5, 3.14) (2.5+3.14j) >>> complex(2.5, 3.14).real # 実数部の参照(参照だけ可能) 2.5 >>> complex(2.5, 3.14).imag # 虚数部の参照(参照だけ可能) 3.14
False class finally is return None continue for lambda try True def from nonlocal while and del global not with as elif if or yield assert else import pass break except in raise
< : より小さい a < b > : より大きい a > b <= : 以下 a <= b >= : 以上 a >= b == : 等しい a == b != : 等しくない a != b is : 同じオブジェクト a is b is not : 同じオブジェクトではない a is not b
# 整数の場合,文字列の場合も同じ 01 >>> a = 10 02 >>> b = 10 03 >>> a == b, a is b 04 (True, True) 05 >>> b = a 06 >>> a == b, a is b 07 (True, True) 08 >>> b = 20 09 >>> a == b, a is b 10 (False, False) 11 >>> a, b 12 (10, 20) # 浮動小数点数の場合,虚数(複素数)の場合も同じ 13 >>> c = 1.2 14 >>> d = 1.2 15 >>> c == d, c is d 16 (True, False) 17 >>> d = c 18 >>> c == d, c is d 19 (True, True) 20 >>> d = 1.3 21 >>> c == d, c is d 22 (False, False) 23 >>> c, d 24 (1.2, 1.3)
式1 or 式2 : 論理和(式1 または 式2 が True であれば True,そうでなければ False) 式1 and 式2 : 論理積(式1 及び 式2 が True であれば True,そうでなければ False) not 式 : 否定(式 が False であれば True,そうでなければ False)
>>> (3 < 2) and (2 < 5) False >>> 3 < 2 < 5 False >>> 3 < 4 < 5 True
+ : 加算(複素数に対しても可能),結合 x + y - : 減算(複素数に対しても可能),符号の変更 x - y, -x * : 乗算(複素数に対しても可能),繰り返し x * y, *x ** : べき乗(複素数に対しても可能,C/C++ には存在しない) x ** y / : 除算(結果は浮動小数点数,複素数に対しても可能) x / y // : 除算(小数点以下を切り捨て) x // y % : 余り(浮動小数点数に対しても可能) x % y
>>> a = complex(1, 2) >>> a (1+2j) >>> a.conjugate() # 共役複素数 (1-2j) >>> a.real # 虚部は a.imag 1.0 >>> a.real = 5 // エラー,参照だけが可能
<< : 左にビットシフト a << 3 >> : 右にビットシフト a >> 3 & : ビットごとの論理積 x & y | : ビットごとの論理和 x | y ^ : ビットごとの排他的論理和 x ^ y ~ : 1 の補数( 0 と 1 の逆転) ~x
test = "Suganuma"
+---+---+---+---+---+---+---+---+ | S | u | g | a | n | u | m | a | +---+---+---+---+---+---+---+---+ 0 1 2 3 4 5 6 7 -8 -7 -6 -5 -4 -3 -2 -1
>>> test = "Suganuma" >>> test[0] 'S' >>> test[-2] 'm'
[m1:m2[:m3]]
>>> test = "Suganuma" >>> test[0:4] 'Suga' >>> test[:4] 'Suga' >>> test[4:] 'numa' >>> test[4:-1] 'num' >>> test[0:8:2] 'Sgnm'
>>> () () >>> tuple() ()
>>> ("abc",) ('abc',) >>> "abc", ('abc',) >>> tuple(["abc"]) ('abc',)
>>> ("abc", 10, "xxx") ('abc', 10, 'xxx') >>> "abc",10,"xxx", ('abc', 10, 'xxx') >>> tuple(["abc", 10, complex(1,3)]) ('abc', 10, (1+3j)) >>> tuple("abc") ('a', 'b', 'c') >>> a = ((1, 2, 3), (10, 20, 30)) >>> a[0][1] 2
>>> b"abc" b'abc'
>>> bytes(5) b'\x00\x00\x00\x00\x00'
>>> bytes(range(5)) b'\x00\x01\x02\x03\x04' >>> bytes([1, 2, 3, 4, 5]) b'\x01\x02\x03\x04\x05'
>>> [] [] >>> list() []
>>> [1, 2, 3] [1, 2, 3] >>> a = [1, 2, 3] >>> a[0] 1 >>> b = [[1, 2, 3], [4, 5, 6]] >>> b[1][0] 4
>>> list("abcd") ['a', 'b', 'c', 'd'] >>> list(("a", "b", "c", "d")) ['a', 'b', 'c', 'd']
>>> [x for x in "abcd"] ['a', 'b', 'c', 'd']
>>> s = [1, 4, 3, 2, 5] >>> s.sort() >>> s [1, 2, 3, 4, 5] >>> s.sort(reverse=True) >>> s [5, 4, 3, 2, 1]
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
>>> import numpy as np # この方法が良く利用される >>> x = np.array([1, 2, 3]) # (1 行 3 列) or (3 行 1 列) ? >>> z = np.array([1.0, 2, 3]) >>> y = np.array([[1, 2, 3], [4, 5, 6]], np.float) >>> x.dtype, y.dtype, z.dtype (dtype('int32'), dtype('float64'), dtype('float64')) >>> x.ndim, y.ndim (1, 2) >>> x.shape, y.shape ((3,), (2, 3)) >>> u = np.array([[1, 2, 3]]) # 1 行 3 列 >>> v = np.array([[1], [2], [3]]) # 3 行 1 列 >>> u.shape, v.shape ((1, 3), (3, 1))
>>> import numpy as np # この方法が良く利用される >>> a = np.array([[1, 2], [3, 4]]) >>> b = np.array([[1, 0], [0, 1]]) >>> a + b array([[2, 2], [3, 5]]) >>> a * b array([[1, 0], [0, 4]]) >>> a ** 2 array([[ 1, 4], [ 9, 16]]) >>> a * 2 array([[2, 4], [6, 8]]) >>> a / 2 array([[ 0.5, 1. ], [ 1.5, 2. ]])
>>> import numpy as np # この方法が良く利用される >>> a = np.array([[1, 2], [3, 4]]) >>> np.sqrt(a) array([[ 1. , 1.41421356], [ 1.73205081, 2. ]])
class numpy.matrix(data, dtype=None, copy=True)
>>> import numpy as np # この方法が良く利用される >>> A = np.matrix([[1, 2], [3, 4]]) # 2 行 2 列の行列 >>> B = np.matrix([[1, 0], [0, 1]]) # 2 行 2 列の行列 >>> A * B # 行列の積 matrix([[1, 2], [3, 4]]) >>> A * 2 # スカラーをかける matrix([[2, 4], [6, 8]]) >>> A / 2 # スカラーで割る matrix([[ 0.5, 1. ], [ 1.5, 2. ]]) >>> A ** 2 # A * A matrix([[ 7, 10], [15, 22]]) >>> u = np.matrix([[1, 2, 3]]) # 1 行 3 列の行列(行ベクトル) >>> v = np.matrix([[1], [2], [3]]) # 3 行 1 列の行列(列ベクトル) >>> u * v # 行列の積(内積に相当する演算) matrix([[14]])
>>> list(range(1, 10, 2)) [1, 3, 5, 7, 9] >>> list(range(10, -3, -1)) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2] >>> r = range(1, 10, 2) >>> r.step 2 >>> r[2] 5
>>> bytearray() bytearray(b'')
>>> bytearray(5) bytearray(b'\x00\x00\x00\x00\x00')
>>> bytearray(range(5)) bytearray(b'\x00\x01\x02\x03\x04') >>> bytearray([1, 2, 3, 4, 5]) bytearray(b'\x01\x02\x03\x04\x05')
>>> bytearray(b"abc") bytearray(b'abc')
>>> {} # 空の set {} >>> {1, 2, 3} {1, 2, 3} >>> {1, 2, 3, 3, 3} # 同じ要素は含まない {1, 2, 3} >>> set([1, 2, 3]) {1, 2, 3} >>> frozenset([1, 2, 3]) frozenset({1, 2, 3})
>>> d = {} # 空の辞書 >>> d = dict() # 空の辞書 >>> d = {"aaa" : 10, "bbb" : 20, "ccc" : 30} # key:value 対と波括弧の利用 >>> d = dict(aaa = 10, bbb = 20, ccc = 30) # kwarg の利用 >>> d = dict({"aaa" : 10, "bbb" : 20, "ccc" : 30}) # mapping の利用 >>> d = dict({"aaa" : 10, "bbb" : 20}, ccc = 30) # mapping と kwarg >>> d = dict([("aaa" , 10), ("bbb" , 20), ("ccc" , 30)]) # iterable の利用
01 >>> a = input("data? ") 02 data? 10 3.141592654 abc 03 >>> b = a.split() 04 >>> b 05 ['10', '3.141592654', 'abc'] 06 >>> x = int(b[0]) 07 >>> y = float(b[1]) 08 >>> z = b[2] 09 >>> print(x, y, z) 10 10 3.141592654 abc 11 >>> str = "x = {0:3d}, y = {1:.2f}, z = {2:s}".format(x, y, z) 12 >>> print(str) 13 x = 10, y = 3.14, z = abc
# -*- coding: UTF-8 -*- import sys for line in sys.stdin : if line == "end\n" : break else : print(line) # 以下の文とほぼ同じ line = "" while line != "end\n" : print(line) line = sys.stdin.readline()
>>> f = open("test.txt", "w") # 出力のためにオープン >>> f.write("10 3.1492654 abc\n菅沼義昇\n") 22 >>> f.close() >>> f = open("test.txt", "r") # 入力のためにオープン >>> f.read() '10 3.1492654 abc\n菅沼義昇\n' >>> f.seek(0) # ファイルの先頭に移動 0 >>> f.readline() '10 3.1492654 abc\n' >>> f.readline() '菅沼義昇\n' >>> f.readline() '' # ファイルの終わりを示す >>> f.close()
>>> with open('test.txt') as fp: ... for line in iter(fp.readline, ''): ... print(line,end="") ... 10 3.1492654 abc 菅沼義昇
>>> import numpy as np >>> a = np.array([[1, 2, 3], [4, 5, 6]]) # 2 行 3 列 >>> np.savetxt('test.txt', a) # 配列 a の出力 >>> b = np.loadtxt('test.txt') # 配列 b への入力 >>> b array([[ 1., 2., 3.], [ 4., 5., 6.]])
# 整数の場合,文字列の場合も同じ 01 >>> a = 10 02 >>> b = 10 03 >>> a == b, a is b 04 (True, True) 05 >>> b = a 06 >>> a == b, a is b 07 (True, True) 08 >>> b = 20 09 >>> a == b, a is b 10 (False, False) 11 >>> a, b 12 (10, 20) # 浮動小数点数の場合,虚数(複素数)の場合も同じ 13 >>> c = 1.2 14 >>> d = 1.2 15 >>> c == d, c is d 16 (True, False) 17 >>> d = c 18 >>> c == d, c is d 19 (True, True) 20 >>> d = 1.3 21 >>> c == d, c is d 22 (False, False) 23 >>> c, d 24 (1.2, 1.3)
>>> x = [1, 2, 3] >>> y = [1, 2, 3] >>> # x, y = [1, 2, 3], [1, 2, 3] >>> y[0] = 10 >>> print(x, y) [1, 2, 3] [10, 2, 3]
>>> x = [1, 2, 3] >>> y = x >>> # x = y = [1, 2, 3] >>> y[0] = 10 >>> print(x, y) [10, 2, 3] [10, 2, 3]
>>> x = [1, 2, 3] >>> y = x.copy() # y = x[:] と同じ >>> # import copy >>> # y = copy.copy(x) >>> y[0] = 10 >>> print(x, y) [1, 2, 3] [10, 2, 3]
>>> x = [[1, 2, 3], [4, 5, 6]] >>> y = x.copy() >>> y[0][0] = 10 >>> print(x,y) [[10, 2, 3], [4, 5, 6]] [[10, 2, 3], [4, 5, 6]]
>>> import copy >>> x = [[1, 2, 3], [4, 5, 6]] >>> y = copy.deepcopy(x) >>> y[0][0] = 10 >>> print(x, y) [[1, 2, 3], [4, 5, 6]] [[10, 2, 3], [4, 5, 6]]
>>> a, b, c = 10, 20, 30 >>> a, b, c (10, 20, 30) >>> del a, b >>> a, b, c Traceback (most recent call last): File "%lt;stdin>", line 1, in <module> NameError: name 'a' is not defined
>>> import math # math モジュールの取り込み >>> math.sqrt(2) 1.4142135623730951 >>> import math as ma # math モジュールを ma というモジュール名として取り込む >>> ma.sqrt(2) 1.4142135623730951 >>> from math import sqrt, fabs # math モジュールからメソッド sqrt,fabs を取り込む >>> sqrt(2) 1.4142135623730951 >>> fabs(-10) 10.0 >>> from math import * # math モジュールからすべてのメソッドを取り込む >>> sqrt(2) 1.4142135623730951 >>> pow(2, 10) 1024.0
>>> a = 10 >>> def func(x) : pass ... >>> func(a) >>> if a == 10: ... pass ... else: ... print("test") ... >>>
if 式1 : 文1 [elif 式2 : 文2] ・・・・・ [elif 式n : 文n] [else : 文]
while 式 : 文1 [else : 文2]
for 変数 in イテラブルオブジェクト : 文1 [else : 文2]
>>> with open("test.txt", "r") as f : ... a = f.read() ... >>> a '10 20 30\n菅沼義昇\n' >>> f.closed True # 既にクローズされている
# -*- coding: UTF-8 -*- while True : try : x = int(input("整数を入力して下さい: ")) break except ValueError : print(" 不適切なデータです!") print(x)
py -3 test.py [data] # [ ] 内はオプション
01 # -*- coding: UTF-8 -*- 02 def func(s1, s2 = 20, s3 = 30) : 03 """example of function""" 04 s = s1 + s2 + s3 05 s1 = 100 06 return s ---------------------------------- 07 # -*- coding: UTF-8 -*- 08 from function import func 09 import sys 10 print(func.__doc__) 11 p1 = 10 12 print("sum = ", func(p1)) # func(s1 = 10) or func(10) でも可 13 print("p1 = ", p1) 14 print("sum = ", func(p1, s2 = 50)) # func(10, 50) でも可 15 print(len(sys.argv), sys.argv[0]) 16 #print(len(sys.argv), sys.argv[0], sys.argv[1]) # オプションを付加した場合
example of function sum = 60 p1 = 10 sum = 90 1 test.py #2 test.py data
[1] [1, 2] [1, 2, 3]
# -*- coding: UTF-8 -*- def func(a, lt = []) : lt.append(a) return lt ---------------------------------- # -*- coding: UTF-8 -*- from function import func print(func(1)) print(func(2)) print(func(3))
# -*- coding: UTF-8 -*- def func(a, sum = 0) : sum += a return sum ---------------------------------- # -*- coding: UTF-8 -*- from function import func print(func(1)) print(func(2)) print(func(3))
[1] [1, 2] [1, 2, 3]
01 # -*- coding: UTF-8 -*- 02 def func(a, lt) : 03 lt.append(a) ---------------------------------- 04 # -*- coding: UTF-8 -*- 05 from function import func 06 lt = [] 07 func(1, lt) 08 print(lt) 09 func(2, lt) 10 print(lt) 11 func(3, lt) 12 print(lt)
01 # -*- coding: UTF-8 -*- 02 def add(s1, s2) : 03 s = s1 + s2 04 return s 05 def sub(s1, s2) : 06 s = s1 - s2 07 return s 08 def add_sub(fun, s1, s2) : 09 s = fun(s1, s2) 10 return s ---------------------------------- 11 # -*- coding: UTF-8 -*- 12 from function import add, sub, add_sub 13 print(add(2, 3)) # 5 14 kasan = add 15 print(kasan(2, 3)) # 5 16 print(add_sub(add, 2, 3)) # 5 17 print(add_sub(sub, 2, 3)) # -1
# -*- coding: UTF-8 -*- def kaijo(m) : if m > 1 : s = m * kaijo(m-1) # 自分自身を呼んでいる else : s = 1 return s ---------------------------------- # -*- coding: UTF-8 -*- from function import kaijo m = input("nの値を入力して下さい ") n = int(m) print(str(n) + "の階乗は=" + str(kaijo(n)))
# -*- coding: UTF-8 -*- def func(*var, p) : print(var, p) # (10, 20) 30 を出力 ---------------------------------- # -*- coding: UTF-8 -*- from function import func func(10, 20, p = 30) # func(10, 20, 30) はエラー
# -*- coding: UTF-8 -*- def func(**key) : print(key) # {'key1': 10, 'key2': 20} を出力 ---------------------------------- # -*- coding: UTF-8 -*- from function import func func(key1 = 10, key2 = 20)
# -*- coding: UTF-8 -*- def func(p1, p2 = 10, *var, **key) : print(p1, p2) # 1 5 を出力 print(var) # (100, 200) を出力 print(key) # {'key2': -2, 'key1': -1} を出力 ---------------------------------- # -*- coding: UTF-8 -*- from function import func func(1, 5, 100, 200, key1 = -1, key2 = -2)
01 # -*- coding: UTF-8 -*- 02 def func1() : 03 # print(str(a) + " in func1") エラー 04 a = 20 05 print(str(a) + " in func1") 06 07 def func2() : 08 global a # 記述しないとエラー 09 print(str(a) + " in func2") 10 a *= 10 11 print(str(a) + " in func2") 12 13 a = 10 14 print(a) 15 func1() 16 print(a) 17 func2() 18 print(a)
10 20 in func1 10 10 in func2 100 in func2 100
(式 for 式 in イテラブルオブジェクト) # for を多重に使用しても良い
>>> g = (pow(x, 2) for x in range(10)) >>> list(g) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> next(g) 0 >>> next(g) 1 >>> next(g) 4 ・・・・・ >>> list(g) # 要素を取り出した後は空 [] >>> sum(pow(x, 2) for x in range(10)) # 2 乗の和 285
>>> def reverse(data, start) : ... for index in range(start, -1, -1) : ... yield data[index] ... >>> data1 = "abcde" >>> n = reverse(data1, 2) >>> next(n) 'c' >>> next(n) 'b' >>> for char in reverse(data1, 2) : ... print(char) ... c b a
01 # -*- coding: UTF-8 -*- 02 class Example : 03 """A simple example of class""" # クラスの説明 04 c_var = 12345 # クラス変数 05 def func(self, a) : 06 self.i_var = a # インスタンス変数 ---------------------------------- 07 # -*- coding: UTF-8 -*- 08 from function import Example 09 print(Example.__doc__) # クラスの説明の表示 10 x = Example() # Example クラスのインスタンス(オブジェクト)の生成 11 x.func(10) # Example.func(x, 10) と等価 12 y = Example() 13 y.func(20) 14 z = Example() 15 z.func(30) 16 print("最初の状態 x,y,z") 17 print(Example.c_var, x.c_var, x.i_var) 18 print(Example.c_var, y.c_var, y.i_var) 19 print(Example.c_var, z.c_var, z.i_var) 20 print("***w に x を代入***") 21 w = x 22 print("w の値変更 x,y,z,w") 23 w.c_var = 100 24 w.i_var = 40 25 print(Example.c_var, x.c_var, x.i_var) 26 print(Example.c_var, y.c_var, y.i_var) 27 print(Example.c_var, z.c_var, z.i_var) 28 print(Example.c_var, w.c_var, w.i_var) 29 print("x の値変更 x,y,z,w") 30 xf = x.func # 関数に対するポインタ,普通の関数でもOK 31 xf(50) 32 x.c_var = 1000 33 print(Example.c_var, x.c_var, x.i_var) 34 print(Example.c_var, y.c_var, y.i_var) 35 print(Example.c_var, z.c_var, z.i_var) 36 print(Example.c_var, w.c_var, w.i_var) 37 print("クラス変数値の変更 x,y,z") 38 Example.c_var = 123 39 print(Example.c_var, x.c_var, x.i_var) 40 print(Example.c_var, y.c_var, y.i_var) 41 print(Example.c_var, z.c_var, z.i_var) 42 print(Example.c_var, w.c_var, w.i_var)
A simple example of class
最初の状態 x,y,z 12345 12345 10 12345 12345 20 12345 12345 30
***w に x を代入*** w の値変更 x,y,z,w 12345 100 40 12345 12345 20 12345 12345 30 12345 100 40
x の値変更 x,y,z,w 12345 1000 50 12345 12345 20 12345 12345 30 12345 1000 50
クラス変数値の変更 x,y,z 123 1000 50 123 123 20 123 123 30 123 1000 50
# -*- coding: UTF-8 -*- class Complex() : def __init__(self, re, im = 0.0) : self.re = re self.im = im def add(self, v) : x = Complex(self.re + v.re, self.im + v.im) return x ---------------------------------- # -*- coding: UTF-8 -*- from function import Complex x = Complex(1, 2) y = Complex(3) z = x.add(y) print((z.re, z.im)) # (4, 2.0)
class DerivedClassName ( BaseClassName1, BaseClassName2, ・・・ ):
# -*- coding: UTF-8 -*- class Num : name = "数値" def __init__(self, v) : self.v = v def add(self, v) : x = Num(self.v + v) return x class Int(Num) : name = "整数" class Complex(Num) : name = "複素数" # 親クラスのコンストラクタを呼びたい場合は Num.__init__(self, 値) def __init__(self, re, im = 0.0) : self.re = re self.im = im def add(self, v) : x = Complex(self.re + v.re, self.im + v.im) return x ---------------------------------- # -*- coding: UTF-8 -*- from function import * x = Int(10) # 基底クラス Num のコンストラクタ __init__ の継承により,変数 v に値が設定される print(x.v) # 10 y = x.add(20) # 親クラス Num のメソッド add の継承 print(y.v) # 30 u = Complex(1, 2) # クラス Complex のコンストラクタ __init__ の利用 print((u.re, u.im)) # (1, 2) v = Complex(3) print((v.re, v.im)) # (3, 0.0) w = u.add(v) # クラス Complex のメソッド add の利用 print((w.re, w.im)) # (4, 2.0) u.re = (Num.add(Num(u.re), 10)).v # 基底クラスのメソッド add の利用 print((u.re, u.im)) # (11, 2) print(u.name) # クラス Complex のクラス変数 name の値(複素数) print(Num.name) # 基底クラス Num のクラス変数 name の値(数値)
01 # -*- coding: UTF-8 -*- 02 class Num : 03 name = "数値" 04 def __init__(self, v) : 05 self.v = v 06 def add(self, v) : 07 x = Num(self.v + v) 08 return x 09 # クラスメソッド 10 @classmethod 11 def class_method(cls) : 12 print(cls.name) 13 # スタティックメソッド 14 @staticmethod 15 def static_method() : 16 print(Num.name) 17 class Int(Num) : 18 name = "整数" 19 class Complex(Num) : 20 name = "複素数" 21 def __init__(self, re, im = 0.0) : 22 self.re = re 23 self.im = im 24 def add(self, v) : 25 x = Complex(self.re + v.re, self.im + v.im) 26 return x ---------------------------------- 27 # -*- coding: UTF-8 -*- 28 from function import * 29 x = Complex(1, 2) 30 Complex.class_method() 31 x.class_method() 32 Complex.static_method() 33 x.static_method()
01 # -*- coding: UTF-8 -*- 02 03 #***************************/ 04 # 変数の有効範囲(スコープ) */ 05 # coded by Y.Suganuma */ 06 #***************************/ 07 08 #******************/ 09 # クラス Example1 */ 10 #******************/ 11 class Example1 : 12 c_var = 1000 13 14 def __init__(self) : 15 self.i_var = 2000 16 17 def sub1(self) : 18 print("sub1 c_var", self.c_var, "i_var", self.i_var) 19 20 #******************/ 21 # クラス Example2 */ 22 #******************/ 23 class Example2(Example1) : 24 def sub2(self) : 25 print("sub2 c_var", self.c_var, "i_var", self.i_var) 26 27 #***********/ 28 # 関数 sub */ 29 #***********/ 30 def sub() : # この位置で定義する必要がある 31 x = 40 32 print(" sub x", x) 33 print(" sub z", z) 34 35 #***************/ 36 # main program */ 37 #***************/ 38 # ブロック 39 x = 10 40 z = 30 41 if x > 5 : 42 print("block x", x) 43 x = 15 44 y = 20 45 print("block x", x) 46 print("block y", y) 47 else : 48 print("block x", x) 49 x = -15 50 print("block x", x) 51 sub() 52 print("x", x) 53 print("y", y) # 最初の x が 1 の時は,y が未定義のためエラー 54 # クラス 55 ex = Example2() 56 ex.sub1() 57 ex.sub2() 58 print("member( c_var )", Example2.c_var) 59 print("member( i_var )", ex.i_var)
global x
block x 10 block x 15 block y 20 sub x 40 sub z 30 x 15 y 20
sub1 c_var 1000 i_var 2000 sub2 c_var 1000 i_var 2000 member( c_var ) 1000 member( i_var ) 2000
静岡理工科大学 | 菅沼ホーム | Python と C/C++ 目次 |