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

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

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

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

Q&A

解決済

2回答

2753閲覧

ソースコードの意味を教えて欲しいです

papi_tokei

総合スコア106

Python

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

0グッド

1クリップ

投稿2017/04/12 09:50

###前提・実現したいこと
ソースコードの意味を解明したい

該当ソースコードのコンマの意味を知りたい。

###該当のソースコード

Python

1image1, =subplot.plot(range(t+1), y1s, color='blue')

###試したこと
Pythonでは、以下のようにして、返り値に複数の値を返すことができると思います。

Python

1def test(): 2 return 1,2 3x,y =test() 4print(x,y)

また、以下のように、コンマを外してもエラーになりました。

Python

1def test(): 2 return 1,2 3x, =test() 4print(x)

該当ソースコードでは、最初の値をimage1に入れて残りを捨てているのかと思いました。
ですが、上記のサンプルで、エラーが出たため、違うのかなと思いました。
また、以下のようにしてアンダースコアを追加しても、エラーになりました。

Python

1image1,_ =subplot.plot(range(t+1), y1s, color='blue')

該当ソースコードのコンマの意味を教えて頂ければ幸いです。
よろしくお願いします。

###補足情報(言語/FW/ツール等のバージョンなど)
環境:
jupyter notebook
Python3

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

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

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

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

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

guest

回答2

0

ベストアンサー

カンマを付加することによって要素が 1 つだけのシーケンス(タプルなど)をアンパックできます。

Python

1def func(): 2 return 1, 3 4# アンパックあり 5x, = func() 6print(x) # -> 1 7 8# アンパックなし 9x = func() 10print(x) # -> (1,)

投稿2017/04/12 10:20

copepoda

総合スコア324

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

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

papi_tokei

2017/04/12 10:42 編集

ご回答いただきありがとうございます。 return 1, とするのは、タプルで要素を返すためということでしょうか? また、要素が一つしかないので、アンダースコアでアンパッケできないという旨のエラーが出るのも納得です。
copepoda

2017/04/12 10:54

そうです。`1,`は単要素のタプルを表します。
papi_tokei

2017/04/13 14:30

単要素のタプルを返すのは、タプルに要素を追加できるようにするためだと理解しました。 今回は、タプルでの利用はしないので、アンパックしたということですね。 ありがとうございました。
guest

0

3つの話が混ざっているようなので、以下のように整理してみます。

  • タプルとは
  • return文に , で戻り値を設定
  • 関数の戻り値を、複数変数に代入

タプルとは

リストのようなシーケンスオブジェクトで、リストと違いタプルには変更操作(挿入や順番変更)などができません。イミュータブルオブジェクトといいます。
タプルは、 (1, 2) のように丸括弧を使って作成します。また、丸括弧を省略して、 1, 2 と書いてもタプルになります。

return文に , で戻り値を設定

, で区切っているので、上記のタプルで戻り値を宣言していることになります。
今回の場合、2要素のタプルが、test関数から戻ってきます。

関数の戻り値を、複数変数に代入

関数からの戻り値が、複数個で要素数がわかっている場合は、複数変数に直接代入することが可能です。これをアンパック代入といいます。

以下の2つの代入方法は同意です。

a, b = test()
li = test() a = li[0] b = li[1]

さらに、test関数から2要素タプルが戻ってくることがわかっているが、片方の要素を使わない場合など以下のように、 _ などの使用しにくい変数に代入しておくということがあります。(ここで、変数に _ を使用するのが良いかどうかはさておき)

a, _ = test() print(a)

投稿2017/04/13 05:49

terapyon

総合スコア313

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

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

papi_tokei

2017/04/13 14:25

丁寧な回答をありがとうございます。 アンダースコアは変数だったのですね。 初めて知りましたorz
terapyon

2017/04/14 01:06

正確には、アンダースコアを変数として定義しています。 ここではaも変数です。 変数として定義できないものとして、予約語や多くの記号、頭が数字などがあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問