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

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

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

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

Q&A

解決済

3回答

1836閲覧

キーワード可変長引数について

dareshi

総合スコア16

Python

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

0グッド

0クリップ

投稿2018/04/30 11:46

キーワード可変長引数の使い方がまったく分かりません。
def foo(**kargs):
print(kargs)

foo(bar="bar",hoge="hoge",num=999)
このコードを使って細部まで詳しく説明していただけるとありがたいです。

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

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

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

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

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

LouiS0616

2018/04/30 11:49

実行してみましたか?
dareshi

2018/04/30 11:52

はい、動作はしました。しかし、正直なところ初心者ということもあり、このキーワード可変長引数がどういうものなのか、どうしてこのような結果になっているのか分からない現状です。
guest

回答3

0

ベストアンサー

前提としてキーワード引数を理解する必要があります。

python

1def hoge(text="hoge"): 2 print(text) 3 4hoge() #=> hoge 5hoge(text="fuga") #=> fuga

このように振る舞います。省略した場合はデフォルト値が入れられ、明示的に「名前=値」として呼び出すとデフォルト値以外を指定できます。

キーワード可変長引数は、任意の名前のキーワード引数として渡した引数を、受け取る側では辞書として取り扱えるような仕組みです。

python

1def hoge(**kargs): 2 print(kargs) 3 4hoge(text="hoge") 5#=> {'text': 'hoge'} 6hoge(string="hoge") 7#=> {'string': 'hoge'} 8hoge(text="hoge", string="fuga") 9#=> {'string': 'fuga', 'text': 'hoge'}

このように引数名と値の辞書になります。

こんな機能、普通に使う分にはほとんど必要になることはないのですが、たまに使わざるを得ないときがあります。初心者に説明するのは骨なので書きません。いずれにせよ当分使う機会はないはずです。

次からは自分で調べてください・・・

参考:
Pythonの可変長引数(*args, **kwargs)の使い方 | Python / note.nkmk.me

投稿2018/04/30 12:05

編集2018/04/30 12:33
hayataka2049

総合スコア30933

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

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

LouiS0616

2018/04/30 12:20

> キーワード可変長引数は好きな名前のデフォルト引数を作れる機能です。 個人的には『...んん?』となってしまいました。 デフォルト引数は関数の実装時に決めるものであって、呼び出し側が影響できる範疇にないと私は思っているのですが、その点についてどのようにお考えでしょうか。
hayataka2049

2018/04/30 12:22 編集

たしかに。あまり厳密な書き方ではなかったですね。「任意の名前のデフォルト引数として渡せる。受け取る側からは名前と値が対応づいた辞書に見える」と説明すべきでした。
LouiS0616

2018/04/30 12:24

デフォルト引数って、文字通りデフォルト値が決まっている仮引数ですよね。 キーワード引数とは親和性が高いだけで、概念がそもそも異なるように思うのですが...
hayataka2049

2018/04/30 12:31

異論ありません。修正しておきます
guest

0

キーワード可変長引数が「ある時」

def foo(**kargs): print(kargs) foo(bar="bar",hoge="hoge",num=999)

キーワード可変長引数が「ない時」

def foo(kargs={}): print(kargs) foo({bar:"bar",hoge:"hoge",num:999}) # もしくはfoo(dict(bar="bar",hoge="hoge",num=999))

「ない時」が理解できれば、「ある時」は「ない時」の亜種だと感じられると思います。

投稿2018/04/30 20:16

YouheiSakurai

総合スコア6142

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

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

0

キーワード付きで与えられた引数を、kargsに辞書としてまとめます。
『何がわからないのか』わからないので、これ以上何を説明したらいいのかわかりません。

  • そもそも関数を理解していない?
  • 辞書を理解していない?
  • 実引数のキーワード指定を理解していない?
  • etc.

投稿2018/04/30 11:58

LouiS0616

総合スコア35660

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

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

dareshi

2018/04/30 12:07

すみません、おおざっは過ぎました……。 具体的には、辞書と、実引数を理解していない、ということです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問