SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Pythonの新機能を知ろう!

Python 3.13の新機能、対話型インタプリタの機能強化や高速化などを解説

Pythonの新機能を知ろう! 第5回

  • X ポスト
  • このエントリーをはてなブックマークに追加

対話型インタプリタの機能強化[3.13]

 Python 3.13では、対話型インタプリタにおいて、多色化、複数行編集、ファンクションキーへの機能割り当てなどが実施され、使いやすくなりました。従来のインタプリタに戻すには、PYTHON_BASIC_REPL環境変数をセットします。

多色化による視認性の向上

 これまでのPythonではインタプリタの出力は1色のみでしたが、プロンプトとトレースバック表示に色付けされて視認性が向上しました。プロンプトの「>>>」はマゼンタで表示されるので、プロンプトであることがはっきり分かります。

インタプリタの多色化(プロンプト)
インタプリタの多色化(プロンプト)

 トレースバックもメッセージ部分に色が付き、コードと区別しやすくなりました。

インタプリタの多色化(トレースバック)
インタプリタの多色化(トレースバック)

 色付けは、PYTHON_COLORS環境変数にNO_COLORかFORCE_COLORのいずれかをセットすることで制御できます。

複数行編集

 複数行の編集とは、複数行からなるコードを、その全体を呼び出して一度に編集できるようにする機能です。これまでは、複数行のコードに誤りがあった場合には、最初から入力し直す必要がありましたので、修正の効率がアップします。

複数行の編集
複数行の編集

 同時に、if文やelse文の末尾(コロンの後)で改行すると、自動的に次行がインデントされるようになりました。

ファンクションキーへの機能割り当て

 一部の機能がファンクションキーに割り当てられ、ワンストロークで呼び出せるようになりました。

  • [F1]:ヘルプユーティリティへの移行
  • [F2]:履歴の表示
  • [F3]:コードブロックの貼り付け(貼り付けモード)

 ヘルプユーティリティへの移行はhelpコマンドでしたが、[F1]キーを使うことでヒストリを汚すことなくヘルプユーティリティを利用できます。入力の履歴は、~/.python_historyファイルの表示が必要でしたが、[F2]キーでlessコマンドを直接呼び出して表示できるようになりました(PYTHON_HISTORY環境変数による履歴ファイルの指定もPython 3.13で可能になっています)。[F3]キーによる貼り付けは、大きなコードブロックを次々と貼り付けるのに向いています。

[F1]キーによるヘルプユーティリティへの移行
[F1]キーによるヘルプユーティリティへの移行
[F3]キーによる貼り付けモードへの移行
[F3]キーによる貼り付けモードへの移行

 この他、help()、quit()、exit()といったコマンドが、関数である必要がなくなりました。具体的には、help、quit、exitのみで利用できます。Python 3.12では、関数であることを表すカッコが必要でした。

エラーメッセージの改良[3.13]

 Python 3.12でも改良されたエラーメッセージの内容が、より的確にわかりやすくなりました。インタプリタの改良で既定で色付けされるのに加え(環境変数で制御できます)、修正すべき箇所がより具体的に伝わるようになりました。

 例えば、以下のリストの通りのコードがあるとします。

リスト random.py
import random
print(random.randint(5))

 乱数を表示することを狙ったコードですが、これを実行するとPython 3.12では以下のエラーが表示されます。

Traceback (most recent call last):
  File "/Users/nao/…/random.py", line 1, in <module>
    import random
  File "/Users/nao/…/random.py", line 2, in <module>
    print(random.randint(5))
          ^^^^^^
AttributeError: partially initialized module 'random' has no attribute 'randint' (most likely due to a circular import)

 モジュールrandomはrandintという属性を持っていないといった意味のエラーです。スクリプトファイルがrandom.pyなのでimport文で循環インポートしているとも補足されていますが、初心者には何のことか伝わりにくいでしょう。

 Python 3.13では、以下のエラーメッセージに改良されました。

AttributeError: module 'random' has no attribute 'randint' (consider renaming '/Users/nao/…/random.py' since it has the same name as the standard library module named 'random' and the import system gives it precedence)

 カッコ内に着目すると、実行しようとしているファイルがrandomという標準モジュールと同じ名前で、しかもこちらが優先されるので、リネームを検討せよ、とあります。このように、どう修正すればよいかまで具体的に示してくれるようになりました。関数のキーワード引数の名前が間違っている場合にも、候補とともに指摘してくれます。

次のページ
CPythonの高速化[3.13]

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Pythonの新機能を知ろう!連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20443 2024/11/15 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング