Python3エンジニア認定基礎試験 ④ 関数

defキーワードによる関数の定義と呼び出しを学ぶ分野です。ローカル変数とグローバル変数のスコープ、global文の使い方、位置引数とキーワード引数の違いや併用時のルールが頻出です。引数のデフォルト値の評価タイミングや、可変オブジェクト(リストなど)をデフォルト値にしたときに値が引き継がれる有名な落とし穴も繰り返し問われます。誤った呼び出しで起きるTypeErrorやNameErrorなど、例外の種類とあわせて整理すると理解が深まります。実務でも必須となる基本を確実に固めましょう。出題数40問。

この分野の問題40問を、選択肢・正解・解説つきで掲載しています。まず自分で解答を考えてから「正解と解説を見る」を開いて答え合わせをしてください。

クイズモードで挑戦 →

111Pythonで関数を定義するために使用する正しいキーワードはどれですか。

  1. Adef
  2. Bfunction
  3. Cdefine
  4. Dfunc
正解と解説を見る

正解:Adef

Pythonで関数を定義するにはキーワードdefを使用します。

この問題の解説ページを開く →

112defに続けて関数名、丸括弧で囲んだ仮引数のリストを書いた後、末尾に記述する正しい記号はどれですか。

  1. A; (セミコロン)
  2. B, (カンマ)
  3. C: (コロン)
  4. D{ (波括弧)
正解と解説を見る

正解:C: (コロン)

関数定義の末尾にはコロン「:」を記述します。

この問題の解説ページを開く →

113Pythonで関数を呼び出す際の説明として正しいものはどれですか。

  1. A丸括弧「()」は省略できる
  2. B必ず引数を3つ以上渡さなければならない
  3. C丸括弧「()」は省略できない
  4. Dキーワード引数を先に記述しなければならない
正解と解説を見る

正解:C丸括弧「()」は省略できない

Pythonでは関数を呼び出すときに丸括弧「()」は省略できません。

この問題の解説ページを開く →

114関数の呼び出しとその返り値に関する記述として「誤っている」ものはどれですか。

  1. A呼び出した関数は返り値を変数に代入できる
  2. B関数を呼び出すときは常に返り値を変数に代入しなければならない
  3. C関数そのものを変数に代入して呼び出すこともできる
  4. D返り値を変数に代入せずに呼び出すのが基本的な使い方である
正解と解説を見る

正解:B関数を呼び出すときは常に返り値を変数に代入しなければならない

返り値を変数に代入せずに呼び出すのが基本的な使い方であり、代入は必須ではありません。

この問題の解説ページを開く →

115関数内で扱う「ローカル変数」の有効範囲(スコープ)に関する記述として正しいものはどれですか。

  1. A関数内で定義したすべての変数は関数の外側でもその変数名で参照できる
  2. B関数の内側と外側で同名の変数がある場合は常にエラーになる
  3. C関数内で定義した変数はプログラムのどこからでも書き換えられる
  4. D関数内で定義された変数は関数の外側では参照できない
正解と解説を見る

正解:D関数内で定義された変数は関数の外側では参照できない

関数内で定義されているローカル変数は関数の外側では参照できません。

この問題の解説ページを開く →

116次のコードを実行したとき、出力される結果として正しいものはどれですか。\nx = 100\ndef do_local():\n x = 200\ndo_local()\nprint(x)

  1. A200
  2. B100
  3. CError
  4. DNone
正解と解説を見る

正解:B100

変数の有効範囲が異なるため、do_local()関数内でxに代入してもグローバル変数は上書きされません。

この問題の解説ページを開く →

117関数の外側で定義されたグローバル変数に関数内部から値を代入するために使用する文はどれですか。

  1. Aglobal文
  2. Blocal文
  3. Cextern文
  4. Dpublic文
正解と解説を見る

正解:Aglobal文

関数の外側で定義されたグローバル変数に値を代入するにはglobal文を使います。

この問題の解説ページを開く →

118次のコードを実行したとき、出力される結果として正しいものはどれですか。\nx = 100\ndef do_global():\n global x\n x = 200\ndo_global()\nprint(x)

  1. A100
  2. BError
  3. C200
  4. DNone
正解と解説を見る

正解:C200

global文を使用しているため、do_global()関数内でグローバル変数xの値が200に上書きされます。

この問題の解説ページを開く →

119関数内で定義されている変数を関数の外側で参照しようとした場合に発生するエラー(例外)の種類はどれですか。

  1. ATypeError
  2. BValueError
  3. CSyntaxError
  4. DNameError
正解と解説を見る

正解:DNameError

関数の内側で定義した変数を外側で参照するとNameErrorが発生します。

この問題の解説ページを開く →

120変数の有効範囲を表す言葉としてテキスト内で紹介されている適切な用語はどれですか。

  1. Aゾーン
  2. Bエリア
  3. Cスコープ
  4. Dスペース
正解と解説を見る

正解:Cスコープ

変数の有効範囲は「スコープ」とも呼ばれます。

この問題の解説ページを開く →

121引数に「キーワード=値」の形式で与える引数のことを何と呼びますか。

  1. A位置引数
  2. Bデフォルト引数
  3. Cキーワード引数
  4. D可変長引数
正解と解説を見る

正解:Cキーワード引数

「キーワード=値」の形式で与える引数をキーワード引数と呼びます。

この問題の解説ページを開く →

122引数に値だけを指定する形式の引数のことを何と呼びますか。

  1. Aキーワード引数
  2. Bデフォルト引数
  3. C位置引数
  4. D無名引数
正解と解説を見る

正解:C位置引数

値だけの引数の形式を位置引数と呼びます。

この問題の解説ページを開く →

123位置引数とキーワード引数を混ぜて関数を呼び出す際の規則として正しいものはどれですか。

  1. Aキーワード引数の後に位置引数を与えてもよい
  2. Bキーワード引数と位置引数は交互に配置しなければならない
  3. C位置引数の後にキーワード引数を与えるのが正しい方法である
  4. D位置引数より先にキーワード引数を与えなければならない
正解と解説を見る

正解:C位置引数の後にキーワード引数を与えるのが正しい方法である

位置引数の後にキーワード引数を与えるのが正しい方法です。

この問題の解説ページを開く →

124関数呼び出しにおいて、存在しないキーワード引数を与えて呼び出した場合に発生するエラー(例外)は何ですか。

  1. ATypeError
  2. BNameError
  3. CValueError
  4. DAttributeError
正解と解説を見る

正解:ATypeError

存在しないキーワード引数を与えて関数を呼び出した場合はTypeErrorが発生します。

この問題の解説ページを開く →

125次の記述のうち、引数 y への指定が重複しており、エラー(TypeError)が発生する呼び出し方はどれですか。ただし関数は def function(x, y="foo", z="bar"): と定義されているものとする。

  1. Afunction("spam", y="ham", z="eggs")
  2. Bfunction("spam", "ham", y="foo", z="eggs")
  3. Cfunction("spam", "ham", z="eggs")
  4. Dfunction("spam", z="eggs")
正解と解説を見る

正解:Bfunction("spam", "ham", y="foo", z="eggs")

仮引数に位置引数として""ham""を渡した後にキーワード引数でy=""foo""を重複して指定することはできません。

この問題の解説ページを開く →

126引数のデフォルト値に関する説明として正しいものはどれですか。

  1. A引数のデフォルト値は関数が定義された時点で評価され再評価は行われない
  2. B引数のデフォルト値は関数の実行時に毎回再評価される
  3. Cデフォルト値が設定された引数は呼び出し時に省略することができない
  4. Dデフォルト値には数値しか設定することができない
正解と解説を見る

正解:A引数のデフォルト値は関数が定義された時点で評価され再評価は行われない

引数のデフォルト値は、関数が定義された時点で評価され、関数の実行時に再評価は行われません。

この問題の解説ページを開く →

127次のコードを実行した結果として正しいものはどれですか。\ndefault_message_1 = "Hello"\ndef message(message_1=default_message_1, message_2=""):\n print(f"{message_1} {message_2}")\ndefault_message_1 = "こんにちは。"\nmessage_2 = "world"\nmessage(message_2=message_2)

  1. AHello world
  2. Bこんにちは world
  3. CHello
  4. Dこんにちは
正解と解説を見る

正解:AHello world

関数定義時点でmessage_1のデフォルト値は""Hello""に評価されているため、定義後に変数の中身を変えても影響しません。

この問題の解説ページを開く →

128引数のデフォルト値を「リスト」などの可変オブジェクトにした場合の挙動として正しいものはどれですか。

  1. Aその引数に値が加えられるたびにデフォルト値も変更されていく
  2. B関数を呼び出すたびに空のリストに初期化される
  3. Cデフォルト値にリストを指定すると常にSyntaxErrorになる
  4. D関数内部でリストを変更することは一切できない
正解と解説を見る

正解:Aその引数に値が加えられるたびにデフォルト値も変更されていく

引数のデフォルト値をリストにすると、その引数に値が加えられるたびにデフォルト値も変更されていきます。

この問題の解説ページを開く →

129次のコードを実行したときの2行目の出力結果として正しいものはどれですか。\ndef function(number, default_arg_list=[]):\n default_arg_list.append(number)\n return default_arg_list\nprint(function(2))\nprint(function(2, [3, 4]))\nprint(function(3))

  1. A[2]
  2. B[3, 4, 2]
  3. C[1, 3]
  4. D[2, 3, 4]
正解と解説を見る

正解:B[3, 4, 2]

2回目の呼び出しでは第2引数として[3, 4]が明示的に指定されているため、その末尾に2が加わり[3, 4, 2]となります。

この問題の解説ページを開く →

130次のコードを実行したときの3行目の出力結果として正しいものはどれですか。\ndef function(number, default_arg_list=[]):\n default_arg_list.append(number)\n return default_arg_list\nprint(function(2))\nprint(function(2, [3, 4]))\nprint(function(3))

  1. A[2, 3]
  2. B[2]
  3. C[3, 4, 2]
  4. D[1, 3]
正解と解説を見る

正解:A[2, 3]

1回目でデフォルトリストに2が追加され、3回目では引数が省略されているため同じデフォルトリストに3が追加されて[2, 3]となります。

この問題の解説ページを開く →

131引数の省略時に毎回空のリストを生成したい場合、実務で推奨されるデフォルト値の設定方法はどれですか。

  1. Aデフォルト値を空リスト「[]」にする
  2. Bデフォルト値を「None」にして関数内で空リストを代入する
  3. Cデフォルト値を「0」にする
  4. Dデフォルト値を「()」にする
正解と解説を見る

正解:Bデフォルト値を「None」にして関数内で空リストを代入する

引数の省略時に空のリストにするには、デフォルト値をNoneにして関数内で判定し空リストを代入するのが避けるべき挙動を防ぐ方法です。

この問題の解説ページを開く →

132関数の仮引数の先頭に「*」を1つ付けた場合、その引数には何が格納されますか。

  1. A指定済みの実引数を除くキーワード引数のディクショナリ
  2. B指定済みの実引数を除く位置引数のタプル
  3. C関数に渡されたすべての引数のリスト
  4. D関数の戻り値のリスト
正解と解説を見る

正解:B指定済みの実引数を除く位置引数のタプル

*が先頭に付いた仮引数には、指定済みの実引数を除く位置引数のタプルが入ります。

この問題の解説ページを開く →

133関数の仮引数の先頭に「**」を2つ付けた場合、その引数には何が格納されますか。

  1. A指定済みの実引数を除く位置引数のタプル
  2. B関数に渡されたすべての引数のリスト
  3. C関数の戻り値のディクショナリ
  4. D指定済みの実引数を除くキーワード引数のディクショナリ
正解と解説を見る

正解:D指定済みの実引数を除くキーワード引数のディクショナリ

**が先頭に付いた仮引数には、指定済みの実引数を除くキーワード引数のディクショナリが入ります。

この問題の解説ページを開く →

134次のコードを実行した際、print(args) によって出力される内容として正しいものはどれですか。\ndef function(name, *args, **kwargs):\n print(args)\nfunction("spam", "ham", kwarg1="eggs")

  1. A('spam',)
  2. B{'kwarg1': 'eggs'}
  3. C['ham']
  4. D('ham',)
正解と解説を見る

正解:D('ham',)

第1引数""spam""はnameに渡され、残りの位置引数""ham""がタプルとして*argsに格納されるため('ham',)となります。

この問題の解説ページを開く →

135次のコードを実行した際、print(kwargs) によって出力される内容として正しいものはどれですか。\ndef function(name, *args, **kwargs):\n print(kwargs)\nfunction("spam", "ham", kwarg1="eggs", kwarg2="spamhameggs")

  1. A{'kwarg1': 'eggs', 'kwarg2': 'spamhameggs'}
  2. B('ham',)
  3. C{'kwarg1': 'eggs'}
  4. D('eggs', 'foo')
正解と解説を見る

正解:A{'kwarg1': 'eggs', 'kwarg2': 'spamhameggs'}

キーワード引数として指定された部分がディクショナリとして**kwargsに格納されます。

この問題の解説ページを開く →

136関数に定義する引数のことを「仮引数」と呼ぶのに対し、関数を呼び出す際に指定する引数のことを何と呼びますか。

  1. A有効引数
  2. B内部引数
  3. C実引数
  4. D設定引数
正解と解説を見る

正解:C実引数

関数を呼び出す際に指定する引数は「実引数」と呼びます。

この問題の解説ページを開く →

137リストやタプルの要素を位置引数に展開して関数に渡す(アンパックする)ために先頭に付ける記号はどれですか。

  1. A&
  2. B*
  3. C**
  4. D#
正解と解説を見る

正解:B*

リストおよびタプルは、*を先頭に付けることで、要素を位置引数に展開して関数に渡せます。

この問題の解説ページを開く →

138ディクショナリの要素をキーワード引数として展開して関数に渡すために先頭に付ける記号はどれですか。

  1. A&
  2. B*
  3. C$
  4. D**
正解と解説を見る

正解:D**

ディクショナリは**を先頭に付けることで、キーワード引数として指定・展開できます。

この問題の解説ページを開く →

139区切り文字 sep で連結する関数 concat(*args, sep) が定義済みとします。出力結果が「spam&ham&eggs」となるよう、空欄に入る正しい記述はどれですか。\nwords = ["spam", "ham", "eggs"]\noptions = {"sep": "&"}\nprint(concat(空欄))

  1. Awords, options
  2. B*words, options
  3. C*words, **options
  4. Dwords, sep=options
正解と解説を見る

正解:C*words, **options

words(リスト)を*で、options(ディクショナリ)を**でアンパックして渡すことで、正しく展開されます。

この問題の解説ページを開く →

140lambda(ラムダ)式に関する説明として正しいものはどれですか。

  1. A無名関数と呼ばれる種類の関数で単一の式しか持てないという特徴がある
  2. B複数の式を内包することができる名前付きの関数定義である
  3. C通常の関数定義と同様にdefキーワードを使用する
  4. D戻り値を返すことができない使い捨ての処理である
正解と解説を見る

正解:A無名関数と呼ばれる種類の関数で単一の式しか持てないという特徴がある

lambda式は無名関数と呼ばれる種類の関数で、通常の関数定義とは異なり、単一の式しか持てない特徴があります。

この問題の解説ページを開く →

141lambda式の書式として、テキストに記載されている正しい形式はどれですか。

  1. Alambda: 引数 -> 式
  2. Bdef lambda(引数): 式
  3. Clambda(引数) { 式 }
  4. Dlambda 引数: 式
正解と解説を見る

正解:Dlambda 引数: 式

lambda式は「lambda 引数: 式」という書き方をし、式の結果が返り値になります。

この問題の解説ページを開く →

142次のコードを実行した結果として正しい出力はどれですか。\nfunc = lambda a, b: (b + 1, a * 2)\nx, y = 1, 2\nx, y = func(x, y)\nprint(x, y)

  1. A1 2
  2. B3 2
  3. C2 3
  4. D2 1
正解と解説を見る

正解:B3 2

引数a=1, b=2となり、(2+1, 1*2)を実行して(3, 2)というタプルが返され、x, yに代入されます。

この問題の解説ページを開く →

143ドキュメンテーション文字列(docstring)に関する記述として正しいものはどれですか。

  1. Aプログラムの実行速度を向上させるための特殊な命令文である
  2. Bクラスや関数を説明するためのコメントである
  3. C関数内部のローカル変数をすべてグローバル化する機能である
  4. D必ず関数の最終行に記述しなければならないコメントである
正解と解説を見る

正解:Bクラスや関数を説明するためのコメントである

docstringは、クラスや関数を説明するためのコメントです。

この問題の解説ページを開く →

144docstringをプログラム内から参照する際に使用する、正しい属性名はどれですか。

  1. A__docstring__
  2. B__document__
  3. C__docs__
  4. D__doc__
正解と解説を見る

正解:D__doc__

docstringは __doc__ という属性で参照できます。

この問題の解説ページを開く →

145テキストにおいて、zip()関数に関する説明として正しいものはどれですか。

  1. A複数のリストを1つの巨大なリストに結合する関数
  2. B反復可能体の要素をランダムに並び替える関数
  3. Cリストの要素を文字列に変換して連結する関数
  4. D複数の反復可能体から並列で要素を取得できる関数
正解と解説を見る

正解:D複数の反復可能体から並列で要素を取得できる関数

zip()関数を使うと、複数の反復可能体から並列で要素を取得できます。

この問題の解説ページを開く →

146次のコードを実行した際、forループは合計で何回繰り返されますか。\nfor n, c in zip([1, 2, 3], ["1", "2", "3"]):\n pass

  1. A1回
  2. B2回
  3. C6回
  4. D3回
正解と解説を見る

正解:D3回

2つのリストの要素数はそれぞれ3つであり、並列に要素を取得するためforループは3回実行されます。

この問題の解説ページを開く →

147Pythonにおいて、文字列に対して「文字列 * 数値」の乗算を行った場合の結果はどうなりますか。

  1. ASyntaxErrorが発生する
  2. B文字列がその数値の分だけ個数並んだものになる
  3. C文字列が数値に変換されて計算される
  4. DTypeErrorが発生する
正解と解説を見る

正解:B文字列がその数値の分だけ個数並んだものになる

文字列の倍は、文字列をその個数分だけ並べたものになります(例:""2"" * 2 は ""22"")。

この問題の解説ページを開く →

148次のコードを実行した結果として正しい出力はどれですか。\nfor n, c in zip([1, 2, 3], ["1", "2", "3"]):\n print(c * n)

  1. A1\n22\n333
  2. B1\n2\n3
  3. C1\n2\n33
  4. D11\n22\n333
正解と解説を見る

正解:A1\n22\n333

1回目は"1"*1で「1」、2回目は"2"*2で「22」、3回目は"3"*3で「333」が改行で3行に出力されます。

この問題の解説ページを開く →

149Pythonで関数を利用することのメリットとしてテキストで挙げられている記述に当てはまらないものはどれですか。

  1. Aコードの再利用性が高まる
  2. Bプログラム全体の可読性が向上する
  3. C処理をまとめて1つの機能として定義できる
  4. Dプログラムのファイルサイズが必ず半分になる
正解と解説を見る

正解:Dプログラムのファイルサイズが必ず半分になる

再利用性の向上や可読性の向上は挙げられていますが、ファイルサイズが半分になるという記述はありません。

この問題の解説ページを開く →

150docstringの記述方法に関する説明として正しいものはどれですか。

  1. A1行目には詳細な説明を書き3行目に簡潔な要約を書く
  2. Bすべての行の先頭に必ずglobalキーワードを記述する
  3. C1行目には簡潔な要約を書き呼び出し方などの詳細な説明は1行空けて3行目から書き始める
  4. D改行を含めることはできず必ず1行で記述しなければならない
正解と解説を見る

正解:C1行目には簡潔な要約を書き呼び出し方などの詳細な説明は1行空けて3行目から書き始める

docstringは1行目に簡潔な要約を書き、詳細な説明は1行空けて3行目から書き始めます。

この問題の解説ページを開く →
Python3エンジニア認定基礎試験の全分野一覧へ戻る