Python: データ型


Python には大きな標準ライブラリがあり、簡単に習得できるため (特にプログラミングの予備知識がある場合)、JavaScript から学ぶことは爽快です.データ型から始めて、Python が持ついくつかの素晴らしい機能と、私が見た興味深い違いを強調したいと思います.したがって、これが完全なガイドまたは両方の比較であるとは思わないでください.

以下の手順を試してみたい場合は、Python REPL を起動できます. Python がインストールされている場合は、ターミナルで python を実行します. >>> シンボルで始まる Python コードは、REPL に入力されたことを示していました.

ヘルパー関数



Python 自体には、型の定義と発見に役立つ便利な関数があります.それらは type()dir() 、および help() です.

>>> name = "Lennart"
>>> type(name)
<class 'str'>
>>> dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>> help(str.title)
Help on method_descriptor:

title(self, /)
    Return a version of the string where each word is titlecased.

    More specifically, words start with uppercased characters and all remaining
    cased characters have lower case.


数字



Python には、数値を扱うためのより明示的な型があります. JavaScript では、それらは Number にまとめられます.

>>> x = 4
>>> y = 5.0
>>> z = 42j
>>> type(x)
<class 'int'>
>>> type(y)
<class 'float'>
>>> type(z)
<class 'complex'>


タプル



タプルは、関連しているが異なるアイテムを追跡するために使用できる不変のコレクションです.したがって、それらは set および dict の不変キーとして優れています.アンパックは、タプルから情報をすばやく取得する方法です.

>>> favourite_food = ("Italian", "Pizza")
>>> cuisine, name = favourite_food
>>> cuisine
'Italian'
>>> name
'Pizza'


設定



セットは可変であり、不変の型をソートされていない方法で格納します.他の可変型 ( listsetdict など) を格納することはできません.セットには、固有のアイテムのみを含めることができます.

これは、リストをすばやく重複排除するのに最適です.

>>> names = ["Luke", "Leia", "Malak", "Luke"]
>>> set(names)
{'Leia', 'Luke', 'Malak'}


セットに対していくつかのミューテーションを実行できます ( .add または .discard など) が、一度に複数の値を追加できるため、.update が興味深いことがわかりました.

>>> chars = {"James", "Naomi", "Amos"}
>>> addition = {"Alex", "Julie"}
>>> chars.update(addition)
>>> chars
{'Julie', 'James', 'Naomi', 'Alex', 'Amos'}


もう 1 つの優れた点は、set 操作 (結合と交差) です.

>>> chars = {"James", "Naomi", "Amos"}
>>> favourite_chars = {"James"}
>>> chars | addition
{'Julie', 'James', 'Naomi', 'Alex', 'Amos'}
>>> chars & favourite_chars
{'James'}


辞書



ディクショナリは可変であり、キーと値のペアを格納します (キーは不変型のみです).したがって、検索が非常に高速です.標準的なものに加えて、keys()values()items() の 3 つの便利な方法があります.

>>> chars = { "expanse": "Holden", "star_wars": "Luke" }
>>> chars.keys()
dict_keys(['expanse', 'star_wars'])
>>> chars.values()
dict_values(['Holden', 'Luke'])
>>> chars.items()
dict_items([('expanse', 'Holden'), ('star_wars', 'Luke')])


これらの関数だけではあまり機能しませんが、for ループでは非常に便利です.

>>> for franchise, char in chars.items():
...     print(f"The char {char} exists in the franchise {franchise}")
...
The char Holden exists in the franchise expanse
The char Luke exists in the franchise star_wars

items() はタプルのリストを返すため、タプルのアンパックを使用して両方の値を取得できます.