- 締切済み
python: def関数での記述arg=
python: def関数での()記述内にarg=を書く意味と働き pythonで、defで関数定義をする際、引数を並べるやり方は理解したのですが、arg = と記述する意味ができずにいます 図のAでは実行すると100を出力します 5行目 f(arg = i)の ”arg =” の文法というか、これがはたしている役割がよくわかりません ためしにBのように arg= を撤去して、引数をiたった1つにすると9行目でエラーになります ( f(i)とするとエラーにならない) Cがエラー出ない理由もわかります 質問: 1) Bにおいて、5行目で arg = の果たしている役割を教えてください 2) Bにおいて9行目でf()では関数を呼び出せていないのは、arg = の不在と関係あると想像できますが、そのロジックを教えてください 【回答上のご注意】 回答は、解答(答え)を求めています わたしはプログラマーではないので、昭和的な「自分で考えろ」的なものは求めていません わからなければ答えない自由もあなたにはあります 不明点があれば説明いたします
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- cametan_42
- ベストアンサー率62% (162/261)
> このサイトは持っているテキスト本より参考になります 公式サイトですからね。 なるたけ、公式サイトで情報を検索出来るようにすべきです。 (とは言っても、「単語」、例えば「キーワード引数」とか知らないと検索出来ませんが) Pythonチュートリアル(公式サイト): https://docs.python.org/ja/3/tutorial/ あと、通読するには向かないけど、該当項目を索引から引きやすいWeb書籍(無料)として、次のようなブツがあります。 Think Python: https://cauldron.sakura.ne.jp/thinkpython/thinkpython/ThinkPython2.pdf なお、問題を見ましたが、ぶっちゃけ「試験の為だけの問題」であって、悪問の類です。 そもそもキーワード引数に与えるのは「実値」であって、グローバル変数を参照させるべきではない。 つまり、この問題は「プログラムを綺麗に書くためのスタイル」には則ってなく、単に知識を問うだけの問題で、こういうのは「悪問」でしょう。 プログラムを書く際のスタイルとしては何の役にも立ちゃしない。 んで、どこかは知らないけど、「Python資格試験」の類ってのはこういうのが多いんですよ。 しかも「資格試験」とか言っても「公的資格」でも何でもないんです。国家資格の「情報処理技術者」みたいなヤツを保証するわけでもない。 んで「資格試験」を行う側も、実は単なる利潤団体だったりするんで、問題も役に立たない、資格も結果役に立たなかったりするんです。
- cametan_42
- ベストアンサー率62% (162/261)
お礼
ありがとうございます 引数の要素数の使い方がわからなかったのですが、 必須引数 とオプション引数という概念を知らなかったので助かりました このサイトは持っているテキスト本より参考になります
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
Aの def f(arg = i) は、関数fの引数はargで、引数を省略して呼び出した時のデフォルト値はiです、という意味です。 引数は「arg」の方で、「i」は「引数ではなく、省略時の初期値」なので、間違わないように。 ですので def f(arg = i) print(i) と定義した時、引数に何を指定しても、常に「100」と表示されます。グローバルに定義した「i」をプリントしていて、引数をプリントしていませんから、最初の「i = 100」で代入した「100」が必ずプリントされます。50を引数に指定しても50とはプリントされません。 これは def f(arg = i) print(arg) と書かないと、引数を持つように定義した意味がありません。 def f(arg = i) print(i) と書くと def f(arg = i) print(100) と書いたのと同じになってしまいます。 Aは関数fを定義した時に「引数省略時はiになります」と定義しているので f() のように「引数を省略して呼び出す事が可能」です。 Bの def f(i) は、関数fの引数はiで、省略不可です、という意味です。 Bは関数fを定義した時に「引数は1つで必須です」と定義しているので f() のように「引数を省略して呼び出すとエラー」です。 Cは引数を2つ持った関数fを定義しています。 なので、呼び出す時も f(100, 23) のように、引数を2つ指定する必要があります。 引数が2つになっているだけで、Bと同じです。
お礼
ありがとうございます! めちゃくちゃわかりやすいです 引数がargで、「i」は省略時の初期値 資格問題が問うていることがわかりました 大変たすかりました
お礼
ありがとうございます わたしは書いたようにプログラマーではないのですが、バグチケットに修正したコードのスクリーンショットを海外のプログラマーが貼ることがあり、すこしでも読めたほうがいいかなと思い、空いた時間にpythonチュートリアル本を読むようになりました 別の質問もみかけましたらよろしくお願いします