プログラミングとか色々

プログラミングとかについて色々

Python嫌いがPythonを使うようになった理由

Python嫌いがPythonを使うようになった理由

この記事は群馬高専アドベントカレンダー2022の6日目の記事になります。

目次

自己紹介

いろんなプログラミング言語に手を出すのと競プロが好きです。 浅くいろんなものに手を出してます。最近は音楽とプラモデルにはまってます。

はじめに

最近、Pythonプログラマだけでなく研究者や怪しいプログラミングスクールの広告プログラミング初心者にとっても人気な言語となってきており、注目されている言語だと思っています。

そんなPythonですが、C、C++C#、Rustといった言語が好きで普段から使ってきた自分にとってあまり魅力的な言語には感じていませんでした。しかし、最近良さがわかってきたので紹介しようと思いこの記事を書きました。 主にwindows11とvscodeで使用することを想定しています。

Pythonのいいところ

まず、Pythonのわかりやすいいいところとして以下のようなものがあるかと思います。

  1. ライブラリの豊富さ
    • 標準ライブラリだけでもとても多くの機能がある
    • PyPIという巨大なパッケージ公開サイトがある
  2. 手軽さ
    • コンパイルが必要なくREPLもあるため手軽にコードを実行することができる
  3. 壊滅的なコードが生まれにくい
    • インデントでブロックを決めるので、インデントがないコードが生まれないです

初心者や簡単な自動化、計算などをするうえでとても便利な機能を備えており、人気になる理由がわかります。 他にも、C,C++といった他言語との連携が簡単にできるなど様々ないいところを持っている言語です。

個人的に驚いた標準ライブラリ

公開されているパッケージライブラリが豊富なPythonですが、標準でも様々なライブラリが搭載されています。この標準ライブラリの豊富さもPythonを手軽に・便利に使用するための大きな手助けになっています。

少し内容がずれますが、「この機能、標準ライブラリなの!?」と思ったものをコラムのような感じで紹介していきます。

  1. データ圧縮とアーカイブに関するライブラリ
    • zipやtarなどの圧縮ファイルをいじることができます
    • 具体的に、zlibgzipgz2lzmazipfiletarfileがあります
  2. ファイルフォーマットに関するライブラリ
    • csv、toml、jsonと大体何でもいじれます
    • 特に驚きなのですが、Macユーザの方向けに.plistをいじれるplistlibというものもあります
  3. 構造化マークアップツールに関するライブラリ
    • html、xmlがいじれます

ほかにも暗号化サービスや、メールの送受信を行うライブラリもあります。 これらは標準ライブラリなためpipなどでダウンロードしなくても最初から使用することができます。 標準ライブラリに組み込むほど需要のあるライブラリなのでしょうか?

個人的に好きな標準ライブラリ

次に好きなライブラリです

  1. itertools
    • 気持ちよくコードが書けるようになります
  2. functools
    • 気持ちよくコードが書けるようになります
  3. collections
    • 気持ちよくコードが書けるようになります
  4. tkinter
    • 標準でGUIライブラリがついているのはなんだかんだ便利です
  5. typing
    • 型ヒントに関するライブラリです
    • コードを読みやすく書きやすくしてくれます
  6. os

このライブラリたちは、コードを書くのが楽しくなる・簡単になるため好きなライブラリです。

公式リファレンスを読むと他にもたくさんあって面白いのでぜひ読んでみてください。

Pythonの悪いところ

一方で、以下の理由からPythonを使っていませんでした。

インタプリタでの実行

  • 実行速度が遅い
  • コンパイルで検出できるエラーが検出されない
  • 実行時のエラーもわかりにくい

複数のインタプリタに環境を破壊される

  • Windowsの場合、anaconda、microsoft store、公式サイト、など様々な所からインストールでき、それぞれのインタプリタのバージョンも管理しなくてはいけない
  • Pythonコマンドを実行したとき、どれが実行されるかわからない

動的型付け

  • IDEによる補完が効きにくい
  • コードを見ないと動作が想像しにくい

これらは、自分にとってメリットを上回るデメリットでした。

Pythonの悪いところの改善

実行速度の改善

Faster CPython計画が現在動いています。 この計画はCPython3.10から4年で1.5倍ずつ、最終的に5倍高速化することを目標にしているそうで、かなりの高速化が期待できます。[参考]

エラーメッセージの改善

Pythonのバージョンが上がるごとにエラーメッセージが改善されているようです。 例えば3.11では、トレースバックで例外の位置を正確に指し示す機能が実装されました。[参考]

from dataclasses import dataclass

@dataclass
class Point:
    x: float
    y: float

def distance(a, b):
    return abs(a.x-b.x) + abs(a.y-b.y)

def main():
    a = Point(3, 4)
    b = None
    distance(a, b)

if __name__ == "__main__":
    main()

というコードに対し、3.10以前では、

Traceback (most recent call last):
  File "test.py", line 17, in <module>
    main()
  File "test.py", line 14, in main
    distance(a, b)
  File "test.py", line 9, in distance
    return abs(a.x-b.x) + abs(a.y-b.y)
AttributeError: 'NoneType' object has no attribute 'x'

と表示されていたものが、

Traceback (most recent call last):
  File "test.py", line 17, in <module>
    main()
    ^^^^^^
  File "test.py", line 14, in main
    distance(a, b)
    ^^^^^^^^^^^^^^
  File "test.py", line 9, in distance
    return abs(a.x-b.x) + abs(a.y-b.y)
                   ^^^
AttributeError: 'NoneType' object has no attribute 'x'

と波線が引かれどの変数に関するエラーなのかがわかりやすくなりました。(この記事から引用)

複数のインタプリタ

アプリ実行エイリアスの設定

複数のPython環境が混在する中でPythonを実行するような場合、Windows11ではアプリ実行エイリアスを設定することで考えることが減ります。

VSCodeインタプリタの選択

vscodeでは見やすいインタプリタ選択画面が表示されます。 おすすめも表示されるのでよくわからない場合も安心(?)です。

型ヒントの使用

型ヒントを使うことによってエディタに補完してもらいやすくなります。 また、Python3.9からは型ヒントがより書きやすくなり、typing.Listtyping.Setなどが非推奨になり、そのままlistsetなどと書けるようになりました。

例えば、list[int]型のすべての要素にxを加算し、結果のリストを返すというシンプルな関数を考えます。 型ヒントがない場合、変数a, xがそれぞれ何なのかわからずこの関数を使用するにはコードを読まなければなりません。 また、返ってきた値を使用するときも型情報が失われているためlist[int]に対する補完が行われません。

def add_x(a, x):
    return list(map(lambda t: t + x, a))

一方で、型ヒントを書くとそれぞれの変数に何を入れると何が返ってくるのかがわかるようになり、エディタからの補完もされるようになるため、気持ちよくコードを書くことができるようになります。

def add_x(a: list[int], x: int) -> list[int]:
    return list(map(lambda t: t + x, a))

さらに、型ヒントをもとに静的検査を行うことで実行前にエラーとなりうるか所を検出することもできるようになります。

まとめ

これらのことをすることによって少ないストレスでPythonを書けるようになりました。 なにより、やりたいことを豊富なライブラリと様々な言語機能によってほかの言語より短いコードで書くことができ、手軽に実行できるようになりました。

短く簡潔に書けるため、早さが重視される競プロなどにおいては多少有利に立ち回ることができるようになります。

皆さんもストレスなくPythonを書いてやりたいことを簡単に、退屈なことを手軽に自動化しましょう!

次は、しろだんごさんによる「学生生活4年間の食生活と料理スキルの変遷を辿る」です。