#author("2019-05-05T02:48:57+00:00","","") * Pythonの基礎 [#y618fbfd] #setlinebreak(on); #contents -- 関連 --- [[Python覚え書き]] --- [[Pythonのインストール]] --- [[Python のパッケージング]] --- [[Pythonのデコレータ]] --- [[IPythonの使い方メモ]] --- [[PythonでAWS DynamoDBのCRUDを書いてみる]] --- [[Pythonのstrptimeが遅い]] --- [[Pythonのチューニング]] --- [[Pythonのパフォーマンス確認]] --- [[FizzBuzzで頭の体操]] --- [[pytest入門]] --- [[OpenSSLで電子署名の生成と署名検証]] --- [[pythonでWebサーバを書いてみる]] --- [[Flaskの基礎]] --- [[Djangoの基礎]] --- [[pandas入門]] --- [[numpy入門]] --- [[PyTorch入門]] --- [[TensorFlow入門]] ** 文字の利用 [#g5d33724] #mycode2(){{ # 文字変数の宣言 strval="string" strval='string' # 文字列の連結 strval = 'str' + 'ring' # string strval = 'str' 'ring' # string # 文字列の反復 strval = "string" strval2 = strval*2 # stringstring # 文字列の添字表記 strval1[0] #'T' strval1[0:2] #'TE' }} ** 数値の利用 [#i1f8efe6] #mycode2(){{ # 数値変数の宣言 intval=100 # 整数の除算は floor (実数の解を越えない最大の整数) を返す: intval = 7/3 ※2 }} ** リストの利用 [#x4c8a947] #mycode2(){{ # リスト変数の定義 a = ['str1', "str2", 100, 1234] a[0] #str1 a[1] #str2 # リスト内容の置換 a = ['str1', "str2", 100, 1234] a[0:2] = [111, 222] # a = [111,222,100,123] # リスト数の取得 a = ['str1', "str2", 100, 1234] len(a) #4 }} ** タプルの利用 [#fb7d225b] 複数の値を ()で括るとtuple として纏める事ができる。 ※これを利用して関数から複数の戻り値を返す事も可能。 ※tupleの各要素へはリストと同じようにアクセス可能。 #mycode2(){{ vars = ("A", "B", "C", "D") print(vars[0]) # A # 複数の戻り値を返す関数 def func1(): return (100, 200) # 複数の戻り値を受け取る nums = func1() # 1つの変数でtupleとして受け取る num1, num2 = func1() # 個別の変数で受け取る }} タプルのサイズと同じ数の変数を用意すると、各要素を個別の変数で受け取る事ができる。 #mycode2(){{ var1, var2, var3, var4 = ("A", "B", "C", "D") print(var1) # A }} 受取時にはリスト(*付き)変数で受け取る事も可能。 #mycode2(){{ first, *more, last = ("A", "B", "C", "D") print(first) # A print(last) # D }} ** if文 [#h42edcb6] #mycode2(){{ if x < 0: x = 0 print('Negative changed to zero') elif x == 0: print('Zero') elif x == 1: print('Single') else: print('More') }} ** for文 [#c69ffd4a] #mycode2(){{ list1 = ['cat', 'window', 'defenestrate'] for x in list1: print(x, len(x)) }} # zip を使って2つのリストを処理する #mycode2(){{ names = ["Taro", "Hanako", "Ichiro"] sexes = ["man", "woman", "man"] for name, sex in zip(names, sexes): print(f'{name} is a {sex}') }} ** pass 文 [#q172fff8] #mycode2(){{ pass # なにもしない }} ** 関数の利用 [#v92b2fd1] #mycode2(){{ # 戻り値のない関数 def hello(x,y): print("hello world!") # 戻り値のある関数 def add(x,y): return x + y }} ** classの利用 [#e99b8b3d] #mycode2(){{ class Sample(): class_var1 = "class var1" # クラス変数 def __init__(self): self.instance_var1 = "instance var1" # インスタンス変数 @staticmethod def static_method(): print("static method") @classmethod def class_method(cls): print("class method") print(f'class_var1 is "{cls.class_var1}"') def instance_method(self): print("instance method") print(f'instance_var1 is "{self.instance_var1}"') # クラス変数への値のセット Sample.class_var1 = "this is class var1!" print(Sample.class_var1) # インスタンス変数への値セット obj = Sample() obj.instance_var1 = "ABC" # public変数として扱う obj.instance_var2 = "DEF" # 未定義のインスタンス変数を外から設定する事も可能 print(obj.instance_var1) print(obj.instance_var2) print(obj.class_var1) # クラス変数も参照可能 # staticメソッドの呼び出し Sample.static_method() # インスタンスメソッドの呼び出し obj.instance_method() # クラスメソッドの呼び出し Sample.class_method() }} private変数はアンダーバー2つ(または1つ)で始まる変数名で定義する。 ※privateメソッドも同様。 #mycode2(){{ class Sample(): def __init__(self): self.public_var1 = "public var1" # publicなインスタンス変数 self.__private_var1 = "private var1" # privateなインスタンス変数 def get_private_var1(self): return self.__private_var1 obj = Sample() print(obj.public_var1) print(obj.get_private_var1()) print(obj.__private_var1) # エラー }} #TODO(__class__ と __dict__ について) #TODO(@property, @xxxx.setter, @xxxx.deleter) #TODO(setattr) ** モジュールの利用 [#me2895d5] echotest.py #mycode2(){{ def echo1(): print("test1!") def echo2(): print("test2!") }} &br; #mycode2(){{ # モジュールのインポート (拡張子を覗いたファイル名を指定) import echotest # モジュールで定義されたメソッドの利用 echotest.echo1() # ローカルな名前に代入して利用 method1 = echotest.echo1 method1() }} ** パッケージについて [#u26fe08a] #TODO( __init__.py など) ** モジュール検索について [#i0a22cb3] ・モジュールはカレントディレクトリ、環境変数 PYTHONPATH の順に探される。 ・実際には、モジュールは変数 sys.path で指定されたディレクトリのリストから検索される。 ** パッケージの利用 [#h133d1e1] パッケージ (package) は、Python のモジュール名前空間を ``ドット付きモジュール名 (dotted module names)'' を使って構造化する手段。 ** モジュール検索PATHの追加 [#w1b02748] #mycode2(){{ import sys,os sys.path.append('ディレクトリ') }} ** ファイル一覧 [#q322dc9e] #mycode2(){{ # coding: utf-8 import sys,os import glob import re path = os.path.abspath(os.path.dirname(__file__)) # globで検索 files = glob.glob(path + "/*.md") for file in files: print(file) # os.listdirで検索 pattern = r".*\.md$" files = os.listdir(path) for file in files: match = re.match(pattern , file) if match: print(file) }} ** 呼び出し元ファイルのフルパスを取得する [#z9cf44ba] #mycode2(){{ 呼び出し元ファイルのフルパスを取得する import inspect print(inspect.stack()[1].filename) }} ** 簡易Webサーバ [#h7ca0ee1] サーバロジックを書きたい場合は [[pythonでWebサーバを書いてみる]] を参照。 #myterm2(){{ python -m http.server 8000 -b localhost }} ※-b を指定しない場合は、localhost 以外にも公開される。( -b 0.0.0.0 と同じ)