python3.doc_05
R e i - D r e a m
for Laravel
TOP > Python3 > Pythonの基本
Guest
login

最終投稿日:2022年6月18日

目次
○ Pythonの基本
[Pythonの基本]
数値・ビット
[2進数、8進数、16進数][ビット演算子]
モジュールとパッケージ
[モジュール][パッケージ][特殊変数]
データ型
[演算子][型変換][リスト型][タプル型][セット型][辞書型]
関数
[コメント][基本][関数はオブジェクトとして扱える]
[関数を返す関数][無名関数][文字列を関数名として実行する]
クラス
[基本][サンプルClass1][サンプルClass2][サンプルClass3]
[クラスの継承][クラスの多重継承][スペシャルメソッド]
ジェネレータ
[ジェネレータとは][サブジェネレータ][途中で値を受け取るジェネレータ]
[ジェネレータの戻り値][サブジェネレータの返却する値を受け取る]
コンテキストブロック
[コンテキストブロック][contextlibを使ったコンテキストマネージャの作成][デコレータ]
ファイル操作
[ファイル操作の基本][ディレクトリ操作][パスの操作]
正規表現
[正規表現][正規表現で文字列を置換する][正規表現色々]
日付と時刻
[日付と時刻][タイムゾーン][日時の文字列表現]
例外処理・ログ
[例外処理基本構文][例外を定義する][ログの基本]
[ハンドラーとフォーマット][ロガーをファイルから読み込む]
テスト
[DocTest][UnitTest]
Pythonの基本
基本構文
○ 値渡しと参照渡し
Pythonはデータの型によって【値渡し】【参照渡し】が決まります。
● 値渡し
    int, float, str, tuple, bytes, frozenset
● 参照渡し
    list, dict, set, bytearray
例)
a = []
b = a
b.append(10)
print(a)                                     ※[10]となる

def hoge( a ):
a.append(20)
print( a )

c = [5] print( c )                      ※[5]となる
hoge( c )                                   ※[5, 20]となる(メソッド内のprint)
print( c )                                   ※[5, 20]となる
● やりがちなミス1
例)
a = [[]] * 2
print(a)                                               ※[ [], [] ]となる
a[0].append(1)                                ※0番目のリストだけに追加したいのに。。
print(a)                                               ※[ [[ 1 ], [ 1 ]]となる
b = [[] for i in range(2)]                 ※内包表記を使うと回避できる
print(b)
b[0].append(1)
print(b)                                               ※[ [ 1 ], [] ]となる
● やりがちなミス2
例)
class hoge:
def __init__(self, a = []):
self.foo = a
b = hoge()
print( b.foo )                                ※[]となる
b.foo.append(10)
print(b.foo)                                  ※[ 10 ]となる
c = hoge()
print( c.foo )                                ※[ 10 ]となる
※デフォルトの引数「def __init__(self, a = []):」部分はクラスが定義された際に1度しか初期化されない。
そのため「b」「c」は違うインスタンスなのに「foo」の値を共有してしまう現象が起きてしまう。
これを回避するには以下の様に定義する
例)
class hoge:
    def __init__(self, a = None):
        if a is None:
            self.foo = []
b = hoge()                                    ※[]となる
print( b.foo )
b.foo.append(10)
print(b.foo)                                ※[ 10 ]となる
c = hoge()
print( c.foo )                              ※[]となる
c.foo.append(20)
print(c.foo)                                ※[ 20 ]となる
print(b.foo)                                ※[ 10 ]となる
● コメント文字
[#]
    # この行はコメントです。
["""]~["""]
    """
    この行はコメントです。
    この行もコメントです。
    """
[''']~[''']
    '''
    この行はコメントです。
    この行もコメントです。
    '''
● 四則演算子(Python独自(珍しい)使用法)
8 // 6                      ⇒ 1                                ※[//]は、割り算の結果の小数点を切り捨てる
'hoge' + 'foo'      ⇒ hogefoo                 ※文字列結合は[+]を使用する
'hoge' * 2             ⇒ hogehoge              ※文字列に対して[* n]すると、その分文字列結合する
[例]
str1 = 'hoge'
str2 = 'foo'
str3 = str1 * 2 + str2          ※str3は、[hogehogefoo]となる
a,b = 6,9                                ※カンマ区切りで複数の変数に対し値を代入できる(a = 6 と b = 9 と同じ)
a,b = b,a                                ※変数の値を入れ替える事が可能となる
IF文
hoge = 100
if hoge > 100:
    # 好きな処理
elif hoge == 100:                              ※よく見かける[elseif]は、[elif]となるので注意!!
    # 好きな処理
else:
    # 好きな処理<
if type(v) is str:                                ※変数のタイプを判断する(文字列なら)
if type(v) in (str, int):                     ※変数のタイプを判断する(文字列か数値なら)
                                                              ※isinstance() メソッドとかもある
if not name:                                     ※変数 name が空の場合
if hoge > 10 and foo == 5:
if hoge > 10 or foo == 5:
if 5 <= hoge <= 10:                          ※特殊な記述。hoge は、5以上10以下で True となる
●三項演算子
Pythonの三項演算子は特殊です。
    (変数) = (条件がTrueのときの値) if (条件) else (条件がFalseのときの値)
    例)
        n = 'OK'
        x = 10 if n == 'OK' else 5 ※[x]には[10]が入ります
WHILE文
i = 1
while i < 10:                                ※[while]の後に条件を記述する
    print(i)
    i += 1
i = 1
while True:                                ※[True]は頭が大文字となるので注意!!
    print(i)
    i += 1
    if i > 10:
        break                                    ※[break]でループを抜ける事が出来る
【メモ】ユークリッドの互除法
2つの数値に対して[最大公約数]を求める
    m = 1071
    n = 1029
    while n != 0:                                ※[n]がゼロになるまで処理する
        m,n = n,m % n                       ※[m]を[n]とし、[n]を[m / n]の余りとする
    print(m)
【余談】上記を再帰関数にする
[index.py]
-------------------------------------
import hoge
m = 1071
n = 1029
x = hoge.foo( m, n )
print('最大公約数:{0}'.format(x))
#ついでに最小公倍数も求める
y = ( m if m < n else n ) // x                                ※絶対に割り切れるので[//]で整数にする
y = ( m if m > n else n) * y
print('最小公倍数:{0}'.format(y))
-------------------------------------
[hoge.py]
-------------------------------------
def foo( m, n )                                                        ※関数作成
if n == 0:
return m
else:
return foo( n, m % n )
-------------------------------------
【メモ】実は[else]文が使える
例)
a = 0
while a < 10:
    print(a)
    a += 1
    if a == 5:
        break                                ※強制的に抜けると else は呼ばれない
        continue                         ※スキップの場合は else は呼ばれます
else:
    print('終わり~')               ※while 文が正常に終了すると呼ばれる
FOR文
for i in range(10):
    print(i)                                                              ※0~9が表示される

for i in range( 3, 10 ):
    print(i)                                                              ※3~9が表示される

hoge = [ 1, 2, 3, 4, 5 ]
for i in hoge:
    print(i)                                                              ※1~5が表示される

for i in reversed(hoge)
    print(i)                                                              ※5~1が表示される
hoge = {'hoge':'aaa','foo':'bbb','bar':'ccc'}
for k, v in hoge.items():
    print('k={0}:v={1}'.format(k,v))                                ※キーと値を参照できる
hoge = [ 'hoge', 'foo', 'bar' ]
for i, v in enumerate( hoge ):
    print('今{0}番目:{1}'.format(i,v))                          ※[i]に処理要素のindexを格納する
【メモ】実は[else]文が使える
例)
for i in range(10):
    print(i)
    if i == 5:
        break                                      ※強制的に抜けると else は呼ばれない
        continue                                ※スキップの場合は else は呼ばれます
else:
    print('終わり~')                     ※for 文が正常に終了すると呼ばれる
内包表記
● リスト内包表記
mylist = [ i * 2 for i in range(10) ]
print( mylist )                                ※[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]となる
mylist = [ [ 1, 2, 3 ] for i in range(3) ]
print( mylist )                                ※[[1, 2, 3], [1, 2, 3], [1, 2, 3]]となる
mylist = [ [ 1, 2, 3 ] for i in range(3) if i % 2 == 0 ]
print( mylist )                                ※[[1, 2, 3], [1, 2, 3]]となる(if文の内容を1行で記述できる)
mylist = []
for i in range(10):
    if i % 2 == 0:
        mylist.append( i )
    else:
        mylist.append( str( i ) )
print( mylist )                                ※[0, '1', 2, '3', 4, '5', 6, '7', 8, '9']となる
l1 = ('a','b','c')
l2 = [7,8,9]
myzip = zip(l1,l2)                                ※イテレータオブジェクトへ変換
myDict = { k:v * 2 for k, v in myzip }
print(myDict)                                      ※{'b': 16, 'c': 18, 'a': 14}となる
● ジェネレータ内包表記
def gen_123():
    yield 1
    yield 2
    yield 3
g = ( i * 2 for i in gen_123() ) print( next( g ) ) ※2となる
print( next( g ) ) ※4となる
print( next( g ) ) ※6となる
きっぷる
ログインしてコメントを残そう!!


レンズモード 【新規購入限定用】
きっぷる