dポイントプレゼントキャンペーン実施中!

python でdefの中で変数をreturnしたいのですが、listを使わず複数個の結果をカンマで区切ってreturnすることは可能でしょうか?
こんな感じです⤵︎ (a, b定義済)
def A():
 if a == 1:
  return a
 if b == 1:
  return b
print(A())

希望しているアウトプット:
a, b

以下のようなことも試してみましたが、returnではなくprint & アウトプットにNoneがついてしまってダメでした、、
def A():
 Alist = []
 if a == 1:
  Alist.append(a)
 if b == 1:
  Alist.append(b)
 print(*Alist, sep=", ")
print(A())

上記のプログラムのアウトプット:
a, b
None


稚拙な文章ではございますが、ご存知の方よろしくお願いしますm(_ _)m

A 回答 (2件)

あー、ちなみに。



二番目の方、

def A():
 Alist = []
 if a == 1:
  Alist.append(a)
 if b == 1:
  Alist.append(b)
 print(*Alist, sep=", ")
print(A())

で、

a, b
None

が印字されるのは、A()は関数じゃなくって手続き(プロシージャ)になってるから、です。Python流に言うと「A()はNoneを返す関数」だから、ですね。
A():本体内で印字するように指定してますが、何もreturnされていません。従ってNoneが返ります。
つまり、この場合のprint(A())だと、事実上print(None)しろ、って言ってるんで、Pythonは律儀にNoneを印字してるのです。
それだけ、です。
だからやるなら、

def A():
 Alist = []
 if a == 1:
  Alist.append(a)
 if b == 1:
  Alist.append(b)
 return Alist

でしょうね。
    • good
    • 1

うん、ちょっと何やりたいか分かりませんね。



基本的に、Pythonは、returnで複数の値を返す事自体は可能です。
その場合はタプルで返りますね。

>>> def foo():
    return 1, 2

>>> foo()
(1, 2)
>>>

でもこのコードだとちとおかしい。

def A():
 if a == 1:
  return a
 if b == 1:
  return b

何故なら、returnが意味するのは「関数から脱出します」って事なんで、aが1の時に即刻脱出するんで、if b == 1:以下は実行されません。
多分messyだけど、こういう事がしたいのかしらん。

def A():
  if a == 1:
    if b == 1:
      return a, b
    else:
      return a
  else:
    if b == 1:
      return b
    • good
    • 1
この回答へのお礼

私の拙い文章から質問を汲み取っていただいてありがとうございます!!!
なぜreturnが一個目しかアウトプットされないかの理由も分からなかったので、大変参考になりました。とてもわかりやすい説明ありがとうございます!泣 (大感謝)
文末の
def A():
  if a == 1:
    if b == 1:
      return a, b
    else:
      return a
  else:
    if b == 1:
      return b
で解決いたしました!
cametan_42様のご丁寧な回答にただただ感謝です。泣
ベストアンサーに選ばさせていただきます。m(_ _)m

お礼日時:2020/12/13 03:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!