0
0

More than 1 year has passed since last update.

知らなかったPython3の言語仕様まとめ

Last updated at Posted at 2022-12-30

他の言語とちょっと違う・・・・というのを中心に個人用のメモとして残そうと思います

オライリーの入門 Python 3を参照しています
Python3 公式ドキュメント

データ型

Pythonでは、ブール値、整数、浮動小数点数、文字列、データ構造(※1)、関数、プログラムもすべてオブジェクトとして扱われる

プリミティブ型が存在しないので、全て値の参照を保持する
複製したいときには注意が必要である

種類 データ型
数値型 int
数値型 float
複素数型 complex
文字列 string
真偽値 boolean

複素数型という型が存在する

各ビルトインオブジェクトには、__len__()のような、前後を__で囲まれた、予約済みのマジックメソッドが存在する
アンダースコアを利用した命名規則 については、こちらを参照する

データ構造

  • リスト、タプル、辞書、集合という4種類のデータ構造を作成できる
データ構造 データ型 ミュータブル 初期化 関数 サンプル 内包表記
リスト シーケンス Y [] list() [1,2] [expression for item in iterable]
タプル シーケンス N () tuple() ("a","b")
辞書 辞書 Y {} dict() {"k1":"v1","k2":"v2"} {key_item: value_item for item in iterable}
集合 集合 Y {} set() {"a","b"} {ite for item in iterable}

セット型とは別にタプルというのが用意されている

リスト操作

データ構造 取り出し 追加 結合 削除 有無
リスト [start:end:step] append()
insert()
extend()
+=
remove()
del
in
タプル --- --- --- --- ---
辞書 キーを利用 キーを利用 キーを利用 キーを利用 in
集合 --- --- --- --- in

集合の演算

タイプ 演算子 関数 サンプル
積集合 & intersection() a & b
和集合 | union() a | b
差集合 - difference() a - b
排他的OR ^ symmetric_difference() a ^ b
部分集合(サブセット) <= issubset() a <= b
上位集合(スーパーセット) >= issuperset() a >= b

関数

引数の分解

  • *を使って、引数のタプル化
def print_args(*args):
  • **使ってキーワード引数の辞書化
def pring_arges(**args)

docstringを使ったコメント付与

def echo(str):
    '文字列を出力する関数です'
    return str
def echo(str):
    '''
    文字列を出力する関数です
        1. 文字列型出ない場合には文字列に変換します
    '''
    echo string(str)

従来はJDOCやRDocなどといった外部モジュールでコメント形式でドキュメントを記載していたが、メソッドの標準仕様になっている

高階関数と関数渡し

def echo(str):
    print(str)

def do_something(func,arg1):
    func(arg1)

do_something(echo, "message")

> message

関数内関数とクロージャー

def outer(str)
    def innter():
        return "%s" % str
    return inner()

外側の関数に渡されたstrという変数のスコープは内側の関数から見えている状態

ラムダ関数

muliply_6 = lambda i: i * 6
print(muliply_6(10))

lambdaを使った無名関数はRubyでも馴染みの深い仕様

ジェネレーター

def get_default_value_list(length, default_value):
    for x in range(0, length):
        yield default_value
    
print(get_default_value_list(12, 0))

> <generator object get_default_value_list at 0x10c55a1b0>

yieldを使った無名関数はRubyでも馴染みの深い仕様
Pythonではすべてがオブジェクトとして扱われるので、コピーなどで活用の機会が多そう

デコレーター

def unvail(func):
    def new_function(*args, **kwargs):
        print("FuncName:", func.__name__)
        print("Arguments: ", args)
        print("Keyword Arguments:", kwargs) 
        return func(*args, **kwargs)
    return new_function

@unvail
def test(str, p1=0):
    print(str, p1)

test("test", p1=2)

@を使ったデコレーターはJava界隈(javax/spring)やTypeScriptなどで見たことがあります

関数内再代入の禁止

animal = 'cat'

def change_and_print_global():
    animal = 'dog'
    print(animal)

def change_and_print_global2():
    global animal
    animal = 'bird'
    print(animal)

animal => change_and_print_global() => animalの実行結果は、cat,dog,cat
animal => change_and_print_global2() => animalの実行結果は、cat bird bird

関数内からローカル変数ではなく、グローバル変数にアクセスしようとする場合には、globalキーワードを利用しないといけません
PHPが同じ仕様でしたので馴染みがあります

変数の一覧を取得するには、ローカル変数の場合はlocals()、グローバル変数の場合にはglobals()

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0