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

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

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

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

Q&A

解決済

1回答

9232閲覧

関数名にカンマを使用する意味について

yohehe

総合スコア48

Python 3.x

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

0グッド

1クリップ

投稿2019/01/25 15:19

以下のグラフ表記の最後のline,=ax.plot()のline部分にカンマを置く意味がわかりません。
line,でなくともlineで動作すると思うのですが、line,にする意味についてどうしてもわからず、今までなんとなくうやむやにしていました。
すみませんが、カンマがないと困るときなどの件についてアドバイスをいただけますと幸いです。カンマがないと困ることがあるのでしょうか。

以下迷路の図を設定するプログラムを本よりプログラムを書き出したものです。

python

1import numpy as np 2import matplotlib.pyplot as plt 3 4#迷路を作成する 5fig=plt.figure(figsize=(5,5)) 6ax=plt.gca() 7#赤い線を描く 8plt.plot([1,1],[0,1],color="red",linewidth=2) 9plt.plot([1,2],[2,2],color="red",linewidth=2) 10plt.plot([2,2],[2,1],color="red",linewidth=2) 11plt.plot([2,3],[1,1],color="red",linewidth=2) 12#状態を示す文字s0-s8を描く 13plt.text(0.5,2.5,"S0",size=14,ha="center") 14plt.text(1.5,2.5,"S1",size=14,ha="center") 15plt.text(2.5,2.5,"S2",size=14,ha="center") 16plt.text(0.5,1.5,"S3",size=14,ha="center") 17plt.text(1.5,1.5,"S4",size=14,ha="center") 18plt.text(2.5,1.5,"S5",size=14,ha="center") 19plt.text(0.5,0.5,"S6",size=14,ha="center") 20plt.text(1.5,0.5,"S7",size=14,ha="center") 21plt.text(2.5,0.5,"S8",size=14,ha="center") 22plt.text(0.5,2.3,"start",ha="center") 23plt.text(2.5,0.3,"GOAL",ha="center") 24 25#描画範囲の設定と目盛りを消す設定 26ax.set_xlim(0,3) 27ax.set_ylim(0,3) 28plt.tick_params(axis="both",which="both",bottom="off",top="off", 29 labelbottom="off",right="off",left="off",labelleft="off") 30#現在地s0 に緑丸を描画する 31line,=ax.plot([0.5],[2.5],marker="o",color="g",markersize=60) 32

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

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

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

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

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

guest

回答1

0

ベストアンサー

要素数1のタプルを受け取るときにしばしば使います。(註)

Python

1>>> def ret_tuple(): 2... return (1,) 3... 4>>> t = ret_tuple() 5>>> print(type(t), t) 6<class 'tuple'> (1,) 7>>> print(type(t[0]), t[0]) 8<class 'int'> 1 9>>> 10>>> t, = ret_tuple() 11>>> print(type(t), t) 12<class 'int'> 1

関数名にカンマを使用する意味

カンマが付いているのは関数名ではなく代入のターゲットリストです。
Python 言語リファレンス » 単純文 - 代入文 (assignment statement)


註: 実際には、代入の右辺はイテラブルであれば何でも良いです。

投稿2019/01/25 15:23

編集2019/01/25 15:35
LouiS0616

総合スコア35660

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

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

yohehe

2019/01/25 15:30

なるほど、関数名ではなく代入文なんですね。python勉強し始めてうやむやにしてた部分がはっきりしました。 LouiS0616様、ありがとうございます。勉強になります。
hayataka2049

2019/01/25 15:35 編集

>要素数1のタプル iterableなら何でも良いので厳密には間違いです。 質問文のコードだとlistですね。線を1つしかプロットしていないから要素数1のlistになると。 Returns: lines A list of Line2D objects representing the plotted data. https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.plot.html
LouiS0616

2019/01/25 15:33

@hayataka2049 さん おっしゃるとおりです。回答に反映しておきます。
yohehe

2019/01/25 15:46

代入の右辺はイテラブルであれば何にでも使えるのですね。 ax.plotで1つの要素のリストとしてaxのモジュールでプログラム上出力されており、そのリストの要素1つをタプルとしてlineに代入しているとの認識でよろしいでしょうか。 なかなか理解が追いつかなくすみません。
yohehe

2019/01/25 15:53

a=list([0]) b,=a print(type(b,)) #b,はintとして認識 c=a print(type(c)) #cはlistとして認識 typeを調べると理解できそうです。もう少し勉強してみます。
yohehe

2019/01/25 15:53

hayataka2049様、ありがとうございます。
LouiS0616

2019/01/25 16:34

b, という変数ができるわけではないです。 結果は変わりませんが、次のように書いた方が実際的でしょう。 a=list([0]) # これも a = [0] で良い b,=a print(type(b)) # 確かに b, でも渡せるけれど、変数はあくまでも b
hayataka2049

2019/01/25 16:45

>ax.plotで1つの要素のリストとしてaxのモジュールでプログラム上出力されており、 出力されている、というより「ax.plotがそのような値を返す」と表現したほうが正確ですし、かえってわかりやすいとは思います。たぶん理解している内容は合っているのだと思いますが。 >そのリストの要素1つをタプルとしてlineに代入しているとの認識でよろしいでしょうか。 別にタプルは関係なかったりします。シーケンスアンパッキングという機能です。 https://note.nkmk.me/python-tuple-list-unpack/ 引数リストの最後の,はあってもなくても同じなんですね。そういえばリストのリテラルとかも同じ仕様か。何かメリットがある仕様なのでしょうかね。 call ::= primary "(" [argument_list [","] | comprehension] ")" https://docs.python.jp/3/reference/expressions.html#calls
hayataka2049

2019/01/26 03:28

本当ですね。ありがとうございます。
yohehe

2019/01/26 05:46

LoiS0616様、quiqui様,hayataka2049様、アドバイスありがとうございます。 時間かかってますが、タプルであることは関係ないこと、カンマを用いることでの変数と代入文との違いが少し理解ができてきました。FAQについてもありがとうございます。 line,にすることでlineのtypeはlistではない変数として利用が可能。後でこのlineからデータを取得する場合にlistではなく、typeが変更した変数としても利用でき、この先にlistからデータ取得などの場合にtypeの切り替えなどで用いることはできそうですね 詳細なご指摘、ありがとうございます。
LouiS0616

2019/01/26 05:58

三要素なら a, b, c = [1, 2, 3] といったふうに、 二要素なら a, b = [1, 2] といったふうにシーケンスを分解して受け取れます。 一要素のときは同様に a = [1] である…と言いたいところなんですが、これだと直接受け取っているのと見分けがつかないので a, = [1] と受け取らなければならないのです。
yohehe

2019/01/26 06:47

LouiS0616様。 なるほど、いまいちだった頭の中のモヤモヤがこの説明で晴れました!!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問