「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>Python]] --Pythonファースト・ステップ --[[Pythonセカンド・ステップ]] --[[Pythonサード・ステップ]] *目次 [#j2b1b3a5] #contents *インストール [#jaef80e8] -何気にWindows環境へのインストールになっている。 -WLS2/Linux上でNotebook系を使うのもオススメ --[[Jupyter Notebook]] --[[WSL2 Ubuntu 24.04 LTS 2025/1/21]] --[[Ubuntu 24.04 on Azure via Bastion 2025/2/27]] **本体 [#v771357c] [[コチラ>Python#va75989e]]に移動しました。 ***インストーラーから(推奨) [#lc36d4a8] -以下からインストーラーを取得し使用する。~ https://www.python.org/ -python-3.9.5-amd64.exeを使用し、 --Add Python 3.9 to PATH にチェック。 --パスがおかしいのでCustomize installationを選択。 --機能もオプションもフルにしてパス変更(C:\prog\python39)。 --最後に、[[パス制限解除>https://techinfoofmicrosofttech.osscons.jp/index.php?Windows%20OS%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9A%84%E3%83%88%E3%83%94%E3%83%83%E3%82%AF#m95a14cb]]のボタンが表示されたので、解除を行った。 ***MSストアから(非推奨) [#o5e8ef8e] -以下を実行すると、MSストアに遷移し、ソコから取得できる。 >python -だたし、制限があるらしいので、非推奨となっている。 --Python Launcherがインストールされない。 --ディレクトリやレジストリへのアクセスが仮想化される。 ***Anacondaから [#o0176db3] -昔はPythonのインストールに使用されていたらしいが、最近はデータサイエンス用で、ほぼ[[公式>#lc36d4a8]]を使用するようになっている。 -environment.ymlを使用した特定バージョンのパッケージ・セットをインストールすると言う目的で有用な可能性がある。 -ただし、最新のLLM系ツールとの相性を考えると、pip+venvやDockerの柔軟な環境のほうが確実な事が多い。 -[[仮想環境ツール>Python#q0c50a8d]]はAnaconda専用のものが実装されているのでソレを使用することになる。 ***インストールの確認 [#mfc0c8b7] -以下のように確認する。 >python Python 3.9.5 (tags/v3.9.5:0a7dcbd, May 3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> ^Z > -上記の終了は [Ctrl+Z] らしいので、以下の方が良さそう。 >python --version Python 3.9.5 **pip [#qf71d3a9] -[[Python 2>#z2093a3d]]の[[パッケージ・マネージャ>パッケージ管理システム]]がpip -[[Python 3>#i785d5c1]]の[[パッケージ・マネージャ>パッケージ管理システム]]がpip3 ***pipのインストール [#y031e680] 最新のPythonをインストールすると自動的にpipもインストールされる。 ***パッケージのインストール [#l5a8e86a] pip3 install XXXX ***WARNINGが出たらアップデート [#n2d32062] >python -m pip install --upgrade pip **その他 [#id4d28b7] ***[[Visual Studio Code>https://techinfoofmicrosofttech.osscons.jp/index.php?Visual%20Studio%20Code]]プラグイン [#e8153c8b] -Visual Studio Codeをインストールする。 -Visual Studio Codeを起動して、ファイルを拡張子*.pyで保存する。 -以下のように推奨の拡張機能が表示されるので、これをインストールする。 #ref(VSCode.png,left,nowrap,Visual Studio CodeでPython拡張機能をインストール,60%) ***[[Jupyter Notebook]] [#o82b7e06] *モード [#s042415f] **インタプリタ [#wed69678] ***CMD or Anaconda Promptを起動する [#xad19034] -Pythonのバージョン情報の確認 python --version ***Pythonインタプリタを起動する [#w9b317bd] -Pythonインタプリタを起動 python ***Pythonインタプリタの実行 [#x7406d95] -算術計算 >>>1+1 2 -データ型 >>>type(10) <class 'int'> -変数 >>>x=10 >>>print(x) 10 -リスト >>>a=[1,2,3,4,5] >>>print(a) [1,2,3,4,5] >>>a[0] 1 >>>a[4] 5 >>>a[4]=99 >>>a[4] 99 >>>print(a) [1,2,3,4,99] -ディクショナリ >>>dic={'hoge1':1} >>>dic['hoge2']=2 >>>print(dic) {'hoge1': 1, 'hoge2': 2} -boolと論理演算 >>>hungry = True >>>sleepy = False >>>type(hungry) <class 'bool'> >>>not hungry False >>>hungry and sleepy False >>>hungry or sleepy True -if文 >>>hungry = True >>>if hungry: ... print("im hungry") # 半角スペースのインデントが必要 ... im hungry >>>hungry = False >>>if hungry: ... print("im hungry") # 半角スペースのインデントが必要 ...else: ... print("im not hungry") # 半角スペースのインデントが必要 ... print("im sleepy") ... im not hungry im sleepy -for文 >>>for i in [1,2,3]: ... print(i) # 半角スペースのインデントが必要 ... 1 2 3 -関数 >>>def hello(): ... print("hello!") ... >>>hello() hello! >>>def hello(object): ... print("hello " + object + "!") ... >>>hello("hoge") hoge hello! ***Pythonインタプリタの終了 [#o897355d] 対話モードを終了するには、 exit() を実行する。 **スクリプトファイル [#uafeafa0] ***Pythonスクリプトファイルに保存 [#t21d54ca] テキストファイルに print("im hungry") と書いて、拡張子を*.pyとして保存する(例 hungry.py)。 ***Pythonスクリプトファイルを実行 [#o2ad1daa] cdでカレントディレクトリに移動して、 >python hungry.py im hungry *基本 [#o1878f71] **インデント [#yfd06590] Pythonのインデントはコードブロックを意味するので、~ むやみなインデント付与は出来ないようになっている。 **[[インタプリタ>#x7406d95]] [#d64adc59] *変数 [#d3b865b4] **命名規則 [#ia193220] ***必ず半角英字で始める [#n3f627a2] ***予約語との衝突はNG [#l03d6571] **数値と文字列 [#n96e040a] ***数値 [#mcc6d68b] -四則演算 -累乗 2 ** 3 -割商 10 // 3 3 -割余 10 % 3 1 -指数表現 --1 * 10の7乗 1.0e7 --1 * 10の-7乗 1.0e-7 ***文字列 [#m414b9f3] -クォーテーション --シングル(')~ 文字列中で(")を使う場合。 --ダブル(")~ 文字列中で(')を使う場合。 -演算 --連結~ >>> x = "hoge" + "hoge" >>> print(x) hogehoge --繰り返し~ X = "hoge" * 2 >>> print(x) hogehoge -castメソッド int("2022") => 数値の2022 -formatメソッド --文字列中に変数値を挿入 >>> month = 9 >>> day = 1 >>> temp = 30 >>> '{}月{}日の気温は{}度です。'.format(month, day, temp) '9月1日の気温は30度です。' --小数の桁数指定 >>>num = 123.456 >>>print('{:.1f}'.format(num)) 123.5 -コメント --1行 # コメント --複数行 """ コメント """ **コレクション型 [#p1e90408] ***リスト [#a56efa75] 配列の事。 -定義 hoge = ['aaa', 'bbb', 'ccc', 'ddd'] -インデックス --通常 >>>hoge[0] 'aaa' --後ろから hoge[-3] >>>'bbb' --スライシング~ ややこしいが、対応する番号の要素の一つ前の区切りでスライスする。 >>>hoge[1:3] ['bbb', 'ccc'] -メソッド --追加 >>>hoge.append('xxx') >>>hoge ['aaa', 'bbb', 'ccc', 'ddd', 'xxx'] --削除 hoge.remove('aaa') # インデックス指定ではないっぽい >>>hoge ['bbb', 'ccc', 'ddd', 'xxx'] -文とか関数とか --del文 >>>del hoge[0] # インデックス0の要素を削除 >>>hoge ['ccc', 'ddd', 'xxx'] --len関数 >>>len(hoge) 4 ***タプル [#r55647ca] -定義後、変更が出来ない[[リスト>#a56efa75]] -定義は角括弧ではなく丸括弧を使う。 ***集合 [#waf7ba65] -要素を順番や重複を考えない(C#のListに近い) -定義は角括弧・丸括弧ではなく中括弧({})を使う。 ***辞書 [#e3475d2c] -キー&バリュー(C#のDictionaryに近い) -定義は角括弧・丸括弧ではなく中括弧({})を使う。 *制御構文 [#ve86e499] **真偽と演算子 [#o364fa59] ***bool型 [#ud51ca2e] -真 : True -偽 : Frue ***比較演算子 [#p9f10f20] == != > < >= < = ***論理演算子 [#v518756a] and or not ***in演算子 [#pea25177] コレクション型のデータに特定の要素が含まれているかどうか **条件分岐 [#t114ff68] if(SelectとかSwitchは無い) if 条件式A: ... elif 条件式B: ... else: ... ***if [#gccbaf68] 条件式Aが真(true)の場合に実行する処理 ***elif [#pb205287] 条件式Aが偽(false)で条件式Bが真(true)の場合に実行 ***else [#z2eea9d6] すべての条件式が偽(false)の場合に実行 **繰り返し [#sa12056a] foreach的なforのみ実装 ***基本形 [#v216cc31] -オブジェクト(コレクション等 for 変数 in オブジェクト: 実行する処理 -内部でbreakやcontinueが使える。 ***rangeを使う [#o9c0ce74] -例1 for num in range(5, 10): print(num) 5 6 7 8 9 -例2 for num in range(0, 10, 3): print(num) 0 3 6 9 ***複数要素を返す [#lfd77c70] -enumerate(indexとvalue) hoge = ['aaa', 'bbb', 'ccc', 'ddd'] for index, value in enumerate(hoge): print(index) print(value) 0 aaa 1 bbb 2 ccc 3 ddd -zip(複数のコレクション) hoge1 = ['aaa', 'bbb', 'ccc', 'ddd'] hoge2 = ['xxx', 'yyy', 'zzz'] for value1, value2 in zip(hoge1, hoge2): print(value1) print(value2) aaa xxx bbb yyy ccc zzz *関数・クラス [#ja57a1fc] **関数 [#c9aae25a] ***定義と実行 [#t96a8b8e] -定義 def 関数名(仮引数, ...): ... return 値 -実行 関数名(実引数, ...) -定義・実行 例 --定義例 def hello_world(): print("Hello") print("world") --実行例 hello_world() ***様々な引数 [#v7f8a6d9] -位置引数~ 通常の引数 -キーワード引数 --変数名を用いて値を渡す引数(位置に依らない --オプションとしてデフォルト値が設定可能 --定義 def 関数名(仮引数1=デフォルト値, 仮引数2=デフォルト値): ... return --実行 関数名(仮引数名1=実引数1, 仮引数名2=実引数2) -可変長引数 --* 関数中でタプルとして機能 ---定義 def 関数名(*Tuple): ---実行 関数名(1, 2, 3, 4, 5, 6, 7, 8) --** 関数中で辞書として機能(仮引数名がキー ---定義 def 関数名(**Dictionary): ---実行 def 関数名(key1=1, key2=2, key3=3): --可変長引数の後ろはキーワード引数のみ利用可能。 **クラス [#ud04c7d1] ***定義 [#iab78750] class クラス名: def __init__(self, 引数, ...): #コンストラクタ ... def メソッド名1(self, 引数, ...): #メソッド1 ... def メソッド名2(self, 引数, ...): #メソッド2 ... ***定義例 [#ee179595] class Man: def __init__(self, name): self.name=name print("inited!") def hello(self): print("hello " + self.name + "!") def goodbye(self): print("good-bye " + self.name + "!") ***実行例 [#s7954791] m = Man("hoge") m.hello() m.goodbye() **インポート [#eff9f354] ***インストール [#rcb59143] インポートの前にインストールが必要なものもある。 -インストールの確認 >python -m pip list -インストールの実行 >python -m pip install モジュール名 ***モジュール [#f20f3e34] -モジュール≒ファイル名 -通常の利用 --モジュールのインポート import モジュール名 --モジュール内のクラスの利用 obj = モジュール名.クラス名(...) -別名の使用 --モジュールのインポート import モジュール名 as 別名 --モジュール内のクラスの利用 obj = 別名.クラス名(...) ***クラス [#ta01be38] -モジュール名が省略可能になる。 -クラスのインポート from import モジュール名 import クラス名 -モジュール内のクラスの利用 obj = クラス名(...) *その他 [#d931e338] **オブジェクトの保存と復元 [#dde240b0] pickleのシリアライズとデシリアライズで保存と復元 -保存されるオブジェクト import pickle obj = '保存されるオブジェクト' -シリアライズ相当 with open('sample.pickle','wb') as f: pickle.dump(obj, f) -デシリアライズ相当 with open('sample.pickle','rb') as f: loaded_obj = pickle.load(f) -復元されたオブジェクト print(loaded_obj) *参考 [#y63aa3ff]