ないですかね?
xという引数を入力したら、
複数の値を変数に格納して返す、
しかしこの返す関数はもちろん引数に関連づけられていなければならないので、
x[0],x[1],x[2]・・・などという形になる。
ところが、このような形で返す関数を作れるのか・・・?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/04/20 23:17
回答5件
0
ミュータブルなオブジェクトを渡すことで、出力変数っぽいものを作ることは可能です。
Python
1def function(x, out): 2 out.append(x) 3 out.append(2*x) 4 5arr = [] 6function(10, arr) 7print(arr) # => [10, 20]
ただ、Pythonの場合タプルを返すのが一般的でしょう。
Python
1def function(x): 2 return x, 2*x 3 4arr = list(function(10)) 5print(arr) # => [10, 20]
この場合どのように値を受け取るかは、呼び出し側が選択できます。
上記の例のようにすぐにリストにしても良いですし、アンパックして受け取るのも良いです。
どちらを選択すべきかは状況に依りますが、呼び出し元の自由度が高い後者が好みです。個人的に。
投稿2021/04/20 12:59
編集2021/04/20 13:01総合スコア35668
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/04/20 14:10
退会済みユーザー
2021/04/21 01:09
2021/04/21 13:03 編集
0
xという引数を入力したら、
複数の値を変数に格納して返す、
しかしこの返す関数はもちろん引数に関連づけられていなければならないので、
x[0],x[1],x[2]・・・などという形になる。
気持ち的にはこういうことがしたいのでしょうか。
(という想定で回答を書きますが、外しているかもしれません)
python
1x = None 2 3def f(arg): 4 arg = [1, 2, 3] 5 6print(x) # None 7f(x) 8print(x) # [1, 2, 3]
回答
無理です。
他の話
Pythonの関数は「スコープの外側の変数に対して代入すること」自体はできます。global
文やnonlocal
文を使います。
7. 単純文 (simple statement) — Python 3.9.4 ドキュメント
python
1x = None 2 3def f(): 4 global x 5 x = [1, 2, 3] 6 7print(x) # None 8f() 9print(x) # [1, 2, 3]
これは「上位スコープの変数を、関数の内側から上位スコープにいるのと同じように扱えるようにしているだけ」です。ですから、たとえば外側の変数の名前がy
だったらまったく期待通りには動作しません。
global
文やnonlocal
文をバシバシ使ってコーディングするのはまったくおすすめできない方針ですが、そういうものがあるということは知っておくと、いずれ使いたくなるときが来るかもしれません。
投稿2021/04/20 15:53
編集2021/04/20 15:55総合スコア30935
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。