助け合いフォーラム

Cisco

CCNP ENCOR(350-401)
問題ID : 24273
問題を開く
Ciscoが検証用に用意しているCisco DNA Center に接続して、このCisco DNA Center が認識しているデバイスのリストを取得するPythonコードを作成した。 【?】にあてはまるものはどれか。

この問題はプレミアムコンテンツです。

上に戻る

関数定義部分の引数の使用方法について

公開日 2023/05/13

初歩的な質問で恐縮ですが、教えて下さい。
この問題の
def network_device_list(dnac, token):
の引数で、dnacはそれより上の行で既に現れたもので、tokenは現れて
いないものになっています。

この部分のdnacは、別の名前でもよいという理解で正しいでしょうか。
例えば
def network_device_list(test1, token):
として
その下を url = "https://{}/api/v1/network-device".format(test1['host'])
の様に、関数内で名前をあわせておけばよく、そのあとで
network_dvice_list(dnac, login)
としても、同じでしょうか。

また、url = "https://{}/api/----- の {} の部分は、どの様な
意味になるでしょうか。

すみませんが、ご存じのかたがおられましたら教えて下さい。
宜しくお願いします。

2023/05/13 13:01

この問題の
def network_device_list(dnac, token):
の引数で、dnacはそれより上の行で既に現れたもので、tokenは現れて
いないものになっています。

この部分のdnacは、別の名前でもよいという理解で正しいでしょうか。

別の名前でも良い、というか、ここはプログラミング言語の割と一般的な話になります。
def で始まる文は「関数定義」と言って、「こう言う名前で、こう言う引数をとり、こう言う処理をするもの」を記述しているものです。例示されたところで言うと、「引数に (関数内部で使用する名前として)dnac, token と言う2つの引数を取る network_device_list と言う関数を定義」していると言うことになります。そして、ここについてはご認識の通り「関数内で名前を合わせておけば良い」です。なので

そのあとで
network_dvice_list(dnac, login)
としても、同じでしょうか。

であってます。

変な例を出せば、こう言うのも問題なく動作するPythonコードです。関数の中で名前の不整合がなければ、関数の外で使ってる変数をそのままセットできます。

lower = 100
higher = 10

def kakezan(kakeru_kazu, kakerareru_kazu):
  return kakerareru_kazu * kakeru_kazu

print(kakezan(higher, lower))

また、url = "https://{}/api/----- の {} の部分は、どの様な
意味になるでしょうか。

これは str.format() と言う、文字列整形の様式ですね。省略されてますが設問のコードをちゃんと書けばこうですよね。

url = "https://{}/api/v1/network-device".format(host)

ここでは

  • 文字列= https://{}/api/v1/network-device
  • 文字列.format() に渡す引数は host
  • format構文に従い、{}(置換指定)host の値をセットする
  • host には(これは多分 network_device_list 関数のものなので)引数となる辞書dnachost キーの値をセットする

と言う指定になっているので、最終的には https://sandboxdnac.cisco.com/api/v1/network-device と言う文字列にする、と言うことになるのですね。
formatに指定できるパラメータは以下のドキュメントから「書式指定文字列の文法」とかへ飛んで見てみると色々見えてくるかと思います。
https://docs.python.org/ja/3/library/stdtypes.html#str.format


コメント

k kz5835

2023/05/14 01:56

arashi1977様 丁寧なご回答、誠に有難うございます。 大変勉強になりました。 有難うございました。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?