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

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

ただいまの
回答率

90.50%

  • Python

    7998questions

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

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 179

dareshi

score 10

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • LouiS0616

    2018/04/30 20:49

    実行してみましたか?

    キャンセル

  • dareshi

    2018/04/30 20:52

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

    キャンセル

回答 3

checkベストアンサー

+1

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

def hoge(text="hoge"):
    print(text)

hoge() #=> hoge
hoge(text="fuga") #=> fuga


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

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

def hoge(**kargs):
    print(kargs)

hoge(text="hoge")
#=> {'text': 'hoge'}
hoge(string="hoge")
#=> {'string': 'hoge'}
hoge(text="hoge", string="fuga")
#=> {'string': 'fuga', 'text': 'hoge'}


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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/30 21:20

    > キーワード可変長引数は好きな名前のデフォルト引数を作れる機能です。

    個人的には『...んん?』となってしまいました。
    デフォルト引数は関数の実装時に決めるものであって、呼び出し側が影響できる範疇にないと私は思っているのですが、その点についてどのようにお考えでしょうか。

    キャンセル

  • 2018/04/30 21:22 編集

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

    キャンセル

  • 2018/04/30 21:24

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

    キャンセル

  • 2018/04/30 21:31

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

    キャンセル

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/30 21:07

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

    キャンセル

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))

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    DOM要素を繰り返す方法(PHP)

    現在、DOMドキュメントにはXMLファイルが読み込んであります。 全てのhogeタグを繰り返し、タグより下の値を全て取得したいのです。 値を得る方法は、下記を使えば出来るというこ

  • 解決済

    PHPでuseを使った時にエラーになってしまう

    ネームスペースとuseステートメントに関して、聞きたいことがあります! 3つのファイルがあります。 /var/www/html/php/foo.php/var/www/html/

  • 解決済

    【Mockito】verifyでメソッドが1度でも呼ばれたか検証するには?

    Mockito.verifyメソッドを使った検証について質問なのですが、あるメソッドが1度でも呼ばれたかどうかを確認する方法はあるでしょうか? 特定の回数を指定するのではなく、1度

  • 解決済

    PHPのPOSTで同じ名前を使いまわすことはできますか?

    POSTに同じ名前を複数入力し、それをPHPからアクセスすることは可能でしょうか? 具体的に言いますと、不定の数のアドレスとそのほかの情報を入力できるフォームがあります。これら各

  • 解決済

    $hoge->foo()->bar()

    基礎的な質問となりますが、 PHPで //(1) $hoge->foo()->bar(); //(2) $hoge->foo->bar(); とは、どういうことなのでしょうか?

  • 受付中

    Pythonのclassについて

    初期化メソッドについてもやもやしていたんですが、 class Hoge:     def __init__(self, a, b):         self.a = a    

  • 解決済

    Rubyにてハッシュにネストしたハッシュを追加する方法

    タイトルの通りです。 既存のハッシュに新しくキーとバリューを追加する方法はstoreがあると思います。 しかしこれでネストしたハッシュを追加する事が出来ませんでした。 イメージ

  • 解決済

    Rubyのhash updateメソッドについて

    ruby (ver2.0)rubyのhash update(merge!)の動作について動作が理解できないのでどなたかご解説いただければと存じます 参考コード a={"Fo

同じタグがついた質問を見る

  • Python

    7998questions

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