「[[.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]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS