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

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

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

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

Q&A

解決済

2回答

389閲覧

import先のプログラムを書き換えず戻り値の数を増やしたい

mikumikuDM

総合スコア82

Python

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

0グッド

0クリップ

投稿2022/08/11 17:45

前提

importの使い方に関する質問です。
初歩的な質問かと思われますが初心者なため調べてもわからず質問させていただきます。

test2というプログラムの中でtest1というプログラムをimportして使っています。
このtest1というプログラムはreturn でxという1つの値を返します。
ここで新たにtest3というプログラムでtest1をimportして使用したいのですが、
test3ではtest1のreturnをxとyの2つ取得したいです。
ただしtest2のプログラムを書き換えることはできません。
test1をどのように書けばよろしいでしょうか?
もしtest1を書き換えるだけではできないのであればできないと書き、test3もどのように書けばいいか教えてください。

実現したいこと

test3でReturnvalueから値を2つ取得する

該当のソースコード

test1

python

1def Returnvalue(a): 2 x = a + 1 3 y = a + 2 4 return x

test2

python

1from test1 import Returnvalue 2x = Returnvalue(1) 3print(x)

test3

python

1from test1 import Returnvalue 2x,y = Returnvalue(1) 3print(x) 4print(y)

補足情報(FW/ツールのバージョンなど)

Q:どうしてtest2を書き換えられないの?
A:test2のようなtest1をimportして使用しているプログラムが無限にあるためすべて書き換えることが現実的ではないからとします。

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

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

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

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

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

TakaiY

2022/08/12 05:40

test3からは、test1ではなく、新に作ったtest4関数を呼ぶようにすべきだと思いますが、そうしない理由は何ですか。 test1を「使用しているプログラムが無限にある」のであれば、なおさらです。
guest

回答2

0

test1は

python

1def Returnvalue(a): 2 x, y = return_tuple(a): 3 return x 4 5def return_tuple(a): 6 x = a + 1 7 y = a + 2 8 return x, y

にして、test3ではreturn_tupleを使う。

投稿2022/08/12 04:26

quickquip

総合スコア11051

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

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

mikumikuDM

2022/08/16 17:51

こちら行いたいことはReturnvalueから値を2つ取得することとなっております。
quickquip

2022/08/17 01:43

こちらは解決したいことに対して「Returnvalueから値を2つ取得する」という手段を採用するのがおかしいという趣旨の回答です。
quickquip

2022/08/17 01:44

後になって過去の自分をぶん殴りたくなること間違いなし。
mikumikuDM

2022/08/17 08:37

quickquip様が何を解決したいことだと思っていらっしゃるかはわかりませんがそれはおそらく勘違いかと思われます。 Returnvalueから値を2つ取得するという質問に対してそれにそわない解答をするのであればこちらとしては迷惑でしかありませんので今後私の質問には解答しないようにお願いします。
mikumikuDM

2022/08/17 08:51

また、「後になって過去の自分をぶん殴りたくなること間違いなし。」というコメントは質問の内容に関係なく、 相手を不快にさせている目的のコメントにしかみえませんので、もうコメントしないでください。迷惑です。
quickquip

2022/08/17 08:58

それはおかしいです。質問者さんが欲しい回答だったかどうかと、回答の評価は別の問題です。 検索などでこの質問にたどり着いた別の人が、tatsu99さんの回答だけを見たのではバランスが悪くて、"こういうことをしたいならむしろこういう構造にした方がいい"というタイプの回答は必要です。 この質問はXY問題の一種(弱いXY問題?)に陥っていて、"解決したいこと"に対して"Returnvalueから値を2つ取得する"という解決方法を先に質問してしまっています。その点に対するカウンターです。 https://ja.meta.stackoverflow.com/questions/2701/#answer-2702 > 自分が直面している 実際の問題 ではなく、自分で考えた 解決法 について質問してしまうことです。
mikumikuDM

2022/08/17 10:15 編集

私のコメントの都合の悪いところが無視されているようなので再度言いますが、quickquip様がが何を解決したいことだと思っていらっしゃるかはわかりませんがそれはおそらく勘違いかと思われます。 こちらとしてもいいたいことはありますが、「後になって過去の自分をぶん殴りたくなること間違いなし。」というような攻撃的な発言をする人と話し合う気はありません、迷惑ですのでもうコメントしないでください。
guest

0

ベストアンサー

デフォルト引数値を使用しては、いかがでしょうか。
Returnvalueに引数bを追加します。
呼び出し側で、bを指定しないと1が採用されます。
test1

python3

1def Returnvalue(a,b=1): 2 x = a + 1 3 y = a + 2 4 if b==1: 5 return x 6 else: 7 return x,y 8

test2は変更なし

test3

python3

1from test1 import Returnvalue 2x,y = Returnvalue(1,2) 3print(x) 4print(y) 5

test2の実行結果
2

test3の実行結果
2
3

投稿2022/08/11 23:26

tatsu99

総合スコア5458

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

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

mikumikuDM

2022/08/16 17:56 編集

ありがとうございます!デフォルト引数値を使用することで設定されていないtest1には影響せずに test3でReturnvalueから値を2つ取得することができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問