検索ガイド -Search Guide-

単語と単語を空白で区切ることで AND 検索になります。
例: python デコレータ ('python' と 'デコレータ' 両方を含む記事を検索します)
単語の前に '-' を付けることで NOT 検索になります。
例: python -デコレータ ('python' は含むが 'デコレータ' は含まない記事を検索します)
" (ダブルクオート) で語句を囲むことで 完全一致検索になります。
例: "python data" 実装 ('python data' と '実装' 両方を含む記事を検索します。'python data 実装' の検索とは異なります。)
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
>>

【Python 雑談・雑学】 関数への引数の渡し方 - 複数の個別の引数を取るのなら、ちゃんとアンパックして渡しましょう - 投稿一覧へ戻る

Published 2020年6月6日12:19 by mootaro23

SUPPORT UKRAINE

- Your indifference to the act of cruelty can thrive rogue nations like Russia -

ちょっとうっかり、的話題です。


次のような関数があります。


from typing import Union

def multiply(*args: Union[int, float]):
if len(args) == 0:
raise ValueError('少なくとも1つの引数が必要です')

total = 1
for arg in args:
total *= arg

return total



単純ですね。1つ以上の int もしくは float の引数を受け取り、それらの積を返します。


呼び出しは次の通りです。


inputs = (3, 5, 2)
total = multiply(inputs)



さて、答えは?


print(total) # (3, 5, 2)



期待通りでしたか?
えっ、違いました!?何故でしょう?


multiply(*args) は、例えば mutiply(3, 5, 2) というような引数を期待しています。


ですが、total = multiply(inputs) は mutiply((3, 5, 2)) を呼び出しています。


別々の数値を期待している関数に、1つのタプルを渡しているだけです。


結局のところ 1 * (3, 5, 2) が返ってきているだけですね。


ここでは、inputs 変数に入っているタプルの要素を個別に渡してあげなければなりません。


個別に渡すには、そうですね、アンパックして渡してあげればいいわけです。


ですから...


total = multiply(*inputs)
print(total) # 30



が正解です。


何てことないことですけど、たまに見落としがちではないでしょうか。
この記事に興味のある方は次の記事にも関心を持っているようです...
- People who read this article may also be interested in following articles ... -
【Python 雑談・雑学】 関数への引数の渡し方・受け取り方 - *args、**kwargs を利用した引数の渡し方、パラメータの受け取り方、総復習 -
【Python 雑談・雑学】 デコレータ (decorators) を理解しよう - デコレータ、オリジナル関数からの引数の渡し方、受け取り方
【 Effective Python, 2nd Edition 】引数として受け取った値を関数内で複数回「消費」する場合には要注意! イテレータ ( iterator ) とコンテナ ( container ) の違いをちゃんと認識しよう!
【 Effective Python, 2nd Edition 】* 書式 (starred expression) をアンパックで活用しよう!
【 Effective Python, 2nd Edition 】アンパックのちょっとした使い方 - 1: 一時変数を使わずにスワップする、2: インデックス番号を用いないでネストしている iterable の要素を取り出す -
【Python 雑談・雑学 + coding challenge】シーケンス ( sequence ) における インデックス ( index ) を使った要素 1 つの取り出しと、スライス ( slice ) を利用した場合の取り出しの違いをちゃんと理解していますか?
【 Effective Python, 2nd Edition 】keyword-only arguments (キーワード指定のみ引数) と positional-only arguments (位置指定のみ引数) を使いこなして、コードの読解性と将来的な拡張性を高めよう!