質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

5407閲覧

新版のPythonはどうしてprint文に括弧を必要とするのでしょうか

oookabe

総合スコア126

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

1クリップ

投稿2018/01/28 04:57

昔のPython print文には括弧が要らず結構便利な感じがありましたが、
最近そういうコードが全部エラーになりました。
要は括弧が抜けちゃうだめって。

新版のPythonが括弧を強要するメリットは何でしょうか。

yohhoy👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Python 3からprintは文からただの関数になりました。Pythonの関数呼び出しでは括弧()は省略できないため、括弧をつけて呼び出すようになりました。

では、なぜ文から関数に変更したのか?PEP 3105のRationaleにいくつかの理由が書いてあります。要約するとだいたい次のような理由です。

  • printが行うことは通常の関数として定義することが可能です。文として実装する必要性がありません。また、構文としてしか実現できないもの(if等がそうです)で無い限り、構文に含めた形で実装すべきではありません。
  • printは単純な標準出力への書き出しですが、時には標準では無い所へ書き出しやフォーマットされた書き出しを行いたい場合があります。関数の場合は関数を置き換えるだけになりますが、文の場合は括弧を追加する必要があるなど、他の関数へ置換することが簡単できません。
  • printが文であった場合、その拡張は文として拡張する必要があり、将来的な文法拡張で問題が出てくる場合があります。

言ってしまえば、Python 2でprintを文にしてしまっていたことが言語設計上の間違いだったということです。Python 3では互換性を捨てでも、この間違いをこのタイミングで修正し、将来に供えたかったと言うことだと思います。

投稿2018/01/28 05:22

編集2018/01/28 05:25
raccy

総合スコア21754

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oookabe

2018/01/28 10:14

良く分かりました! 個人的な感覚だと、標準出力が多いので、その場合、括弧を入れなくても良いではと思いますーーーーこれでクラシック慣習(basic時代から)やPython2コードが温存され、親切に感じます。 何と言っても、余計な括弧を入れずに表示してくれるのはスマート感がありますね。懐かしい。
guest

0

Python言語に関わる仕様で変更理由を調べる時は、PEP(Python Enhancement Proposal)を調べると根拠が書いて有ることが多いです。
PEP 3105 Make print a function
[Python-Dev] Replacement for print in Python 3.0

投稿2018/01/28 05:22

編集2018/01/28 05:23
umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

個別の特殊構文を廃止して、関数化出来る物は関数にすることで、言語仕様がシンプルになると言うことだと思います。別の言い方をするとprintが構文である必要性がない。
http://www.atmarkit.co.jp/ait/articles/0901/31/news017.html
に少し書いてあります。

投稿2018/01/28 05:06

otn

総合スコア86313

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問