全国计算机等级考试二级Python易错真题详解-4-函数和模块化编程-单选题

文摘   2024-10-28 22:30   江苏  

全国计算机等级考试二级Python易错真题详解-4-函数和模块化编程-单选题

函数和模块化编程(单选题)

说明:

  • 本文中的题目,全都来自全国计算机等级考试二级Python语言程序设计考试的真题,且都为易错题。题干最后如有编号,则是 python123 平台上的题号,以方便学生查找和索引。

  • 在满分为 100 分的二级Python考试中,单选题总共占 40 分。本文为Python语言中函数和模块化相关的解析,这部分一般占 4分 左右。函数可能是二级考试中相对 知识点较少 ,但却 较难或最难理解 的一章,尤其是 全局变量和局部变量 等知识点。

  • 面向对象:Python 学习爱好者、Python 二级备考的大学生

之前的相关文章在这儿:

  1. 全国计算机等级考试二级Python易错真题详解-Python语言基础

  2. Python中为什么round(1.5)和round(2.5)都等于2?round()函数详解

  3. 全国计算机等级考试二级Python易错真题详解-数值类型 

  4. Python中的三元运算符是啥?在哪些场景可用?又有啥要注意的?

  5. 全国计算机等级考试二级Python易错真题详解-流程控制-单选题

以下代码的执行结果是(  )。(#168882)

def maxcount():
    a, b = 100099
    for i in range(10):
        a *= b+1
        b *= a-1
    return a<b

maxcount()

A. False

B. 无输出

C. 执行错误

D. True

参考答案:B

解析:

做单选题有很多技巧,要想节省时间,需要先读下题干,再读下选项,然后像下面这样,先考虑下有无捷径可走!😄 正确答案是 无输出 。这题不需要精确计算,只要快速地判定:函数 maxcount() 虽然有返回值,但是在调用的地方(最后一行代码)却没有通过 print() 等方式输出其返回值,再加上 maxcount() 的函数体中也 没有任何输出语句 ,所以最终程序在控制台上没有产生任何输出。

以下关于Python的函数的描述,错误的是(  )。(#168693)

A. 用def定义了函数之后,就等同于运行函数的代码

B. python支持可选参数传递,定义的时候设置参数的默认值

C. python函数可以没有return语句,不返回值

D. python支持用名称传递参数,调用的时候,带名称的参数可以改变在参数序列中的位置

参考答案:A

解析:

  • 选项 用def定义了函数之后,就等同于运行函数的代码 错误。用def定义了函数之后,一般来说,只有在显式地调用函数之后函数体才会运行。

  • 选项 python支持可选参数传递,定义的时候设置参数的默认值 正确。

  • 选项 python函数可以没有return语句,不返回值 正确。但语言表述不够严谨,没有return语句的函数体,显示不返回值,但其实会隐含地返回一个 None

  • 选项 python支持用名称传递参数,调用的时候,带名称的参数可以改变在参数序列中的位置 正确,这是Python灵活便利的一个方面。

以下程序被调用后,能够正确执行的是(  )。(#168848)

def f(x,y=1,z=2):
    pass

A. f(y=2,z=3)

B. f(x=1,2)

C. f(1,3)

D. f(1,x=2,z=3)

参考答案:C

解析:

这题考察的是 非可选参数可选参数 在调用时要注意的地方。

注意:在Python编程中,pass是一个特殊的 空操作 关键字,用于表示一个语句的存在,但它不执行任何操作。pass 关键字在语法上需要一条语句,同时又不希望有任何实际操作的场景下非常有用。

  • 选项 f(y=2,z=3) 错误。因为 x 是必选参数,所以在调用 f() 时必须在第一个参数的位置传一个实际参数给形式参数 x

  • 选项 f(x=1,2) 错误。因为在调用 f(x=1,2) 时,x=1 这样写是一个关键字参数,而 2 是一个位置参数。按规定,关键字参数应该在位置参数的后面,而这儿正好反了;

  • 选项 f(1,3) 正确。此时实际参数 1 传给第1个形式参数 x ,实际参数 3 传给第2个形参 y ,而第3个形参 z 则使用函数定义中等于号 = 后面的默认值 2

  • 选项 f(1,x=2,z=3) 错误。因为根据函数 f() 的定义,在调用 f(1,x=2,z=3) 时,第一个参数 1因为没有指明参数名称,那它就是一个位置参数,即给函数定义中的第1个形式参数 x 传递一个值 1 ;但调用时的第二个参数又是 x=2 ,这样,对于同一个形式参数 x ,它竟然有两个实际参数的赋值,就会报错:TypeError: f() got multiple values for argument 'x'

以下跟全局变量、局部变量相关的部分,可能是整个Python二级考试中最难理解的部分, 拿下它,其它的都不怕啦!

关于Python函数的描述错误的是(  )。(#168642)

A. Python函数可以没有return语句,此时返回值为None

B. Python函数支持用名称传递参数

C. Python支持可选参数传递,但没有默认值的参数必须定义在有默认值参数的左侧

D. 函数内部使用的全局变量必须用global声明

参考答案:D

解析:

  • 选项 Python函数可以没有return语句,此时返回值为None 正确。当函数体中没有一条 return 语句时,其实它在函数体的最后隐含实现了 return None 这条语句,所以此时函数也有返回值,为 None,如下例:
def f():
    ...  # 函数中啥也不做

print(f())  # 输出:None
  • 选项 Python函数支持用名称传递参数 正确;

  • 选项 Python支持可选参数传递,但没有默认值的参数必须定义在有默认值参数的左侧 正确;

  • 选项 函数内部使用的全局变量必须用global声明 错误。因为在函数内使用全局变量,可以不必用 global 声明它,如下例中对简单类型 i 的读,以及列表类型 ls 的写(追加):

i = 100  # 全局变量整数i
ls = [12]  # 全局变量列表ls

def f():
    print(i)      # 此处i为全局变量
    ls.append(3)  # 此处1s为全局变量
    print(ls)     # 此处1s为全局变量
f()
'''
调用f()后,输出如下两行:
100
[1, 2, 3]
'''

以下关于 Python 的函数的描述,正确的是(  )。(#168578)

A. 函数内部使用外部定义的一个简单类型变量,需要显式声明其为全局变量

B. 函数内部定义了跟外部的全局变量同名的组合类型的变量,则函数内部引用的该名字的变量时不确定是外部的还是内部的

C. 函数内部改变了外部定义的组合类型变量的值,外部该变量的值不随之改变

D. 函数内部改变了外部定义的组合类型变量的值,外部该变量的值随之改变

参考答案:D

解析:

局部变量 可以简单理解成 在函数内部定义或创建的变量。与之对应的, 全局变量 可以简单理解成 在函数之外定义或创建的变量“函数内外” 好理解,那啥叫 “定义或创建的变量” 呢?可以简单理解成:“定义或创建”是指通过“=”符号赋值以及调用函数等方式,创建出来的新的对象。如:

num = 10          # 定义了一个整型变量num
name = "AI"       # 定义了一个字符串变量name
t = (123)     # 定义了一个元组变量t
ls = list("abc")  # 用内置函数list(),定义了一个列表变量ls
  • 选项 函数内部使用外部定义的一个简单类型变量,需要显式声明其为全局变量 错误。

    简单类型 是相对 组合类型 (或 容器类型 )而言的,如:整型(int)、浮点型(float)、复数(complex)、布尔(bool)、字符串(str)这些数据类型。当函数内部使用外部定义的一个简单类型变量,不需要显式声明其为全局变量,如下面的例子:

def func():  # 函数要先定义再使用,故前面放函数定义,后面放主程序
    print(a_global_var)  # 内部使用(输出变量的值),不需要显示声明

a_global_var =100  # 函数外的主程序中定义的一个整数变量(简单类型),在函数func的外部
func()  # 调用函数,通过第2行输出100
  • 选项 函数内部定义了跟外部的全局变量同名的组合类型的变量,则函数内部引用的该名字的变量时不确定是外部的还是内部的 错误。

    这儿的 组合类型 也叫 容器类型 ,是指那些包含多个数据元素的数据类型,即:元组(tuple)、列表(list)、集合(set)、字典(dict)等。

    在函数中 “定义” 了同名变量,即 某变量名 = xx 这样,变量名出现在赋值符号 = 左边的形式,那么 某变量名 在函数中的身份就是一个 局部变量 ,而不再是全局变量了。比如下列情况中函数 f() 中的列表 ls,出现在赋值号 = 的左边后(ls = [4,5,6]), ls 就成了一个仅在函数 f() 中起作用的局部变量了:

ls = [1,2,3]  # 定义一个全局变量,列表ls

def f():
    ls =[4,5,6]  # ls被赋值号定义,则此处为一个函数f()中的局部变量
    print(ls)    # 函数内部,同名情况下,局部变量优先级更高,执行到此输出:[4, 5, 6]

print(ls)  # 函数外的主程序中,访问的ls是全局变量ls,故输出:[1, 2, 3]
f()        # 函数中输出的ls是内部定义的局部变量ls,故输出:[4, 5, 6]
print(ls)  # 内外有别,出了函数后,在外部访问的ls是全局变量ls,故输出:[1, 2, 3]
  • 选项 函数内部改变了外部定义的组合类型变量的值,外部该变量的值不随之改变 错误。“函数内部改变了外部定义的组合类型变量的值”,类似如下代码,当这个组合类型变量是一个全局变量时,在函数内部改变了它的值,那么外部该变量的值也会随之改变,因为此时内外都是同一个全局变量。
ls = [1,2,3]  # 定义一个全局变量,列表ls

def f():
    ls.append(4# 此处 ls 追加一个4,没被赋值号=定义,故跟全局变量是同一个
    print(ls)    # 输出全局变量ls

print(ls)  # 调用f()函数之前,输出的全局变量ls中只有3个整数,故输出:[1, 2, 3]
f()        # 在函数f()中输出的ls是全局变量ls追加一个4之后的值,故输出:[1, 2, 3, 4]
print(ls)  # 出了函数后,在全局空间访问的列表ls是全局变量ls最新的值,故也输出:[1, 2, 3, 4]
  • 选项 函数内部改变了外部定义的组合类型变量的值,外部该变量的值随之改变 正确。跟前一个相反,前面错误,则这个正确。

关于全局变量和局部变量的描述,错误的选项是(  )。(#168883)

A. 在函数内部引用组合类型全局变量时,可以不通过global保留字声明

B. 局部变量标识符不能与任何全局变量的标识符相同,即严格不能重名

C. 在函数内部引用数值类型全局变量时,可以不使用global保留字声明

D. 全局变量在Python文件最外层声明时,语句前没有缩进

参考答案:B

解析:

在Python语言中局部变量可以是任意标志符,因为局部变量在函数结束时,并相当于被销毁,所以即使与全局变同名,也可以正常运行。在函数内部只是使用全局变量时,可以不用global声明。

  • 选项 在函数内部引用组合类型全局变量时,可以不通过global保留字声明 正确。前题已结合样例代码详细解释。

  • 选项 局部变量标识符不能与任何全局变量的标识符相同,即严格不能重名 错误。局部变量的标识符(变量名)可以和全局变量的标识符(变量名)相同,只不过在函数内部,在全局变量没有被 global 关键字修饰的前提下,同名的局部变量优先级更高,在函数中,局部变量的名称会屏蔽掉全局变量的名称。

  • 选项 在函数内部引用数值类型全局变量时,可以不使用global保留字声明 正确。看前题中的代码样例和解释。

  • 选项 全局变量在Python文件最外层声明时,语句前没有缩进 正确。全局变量在Python文件的最外层声明时,语句前没有缩进(空格或者Tab键)。

合集:计算机等级考试 Python二级考试

天马行空的大杂烩
“我不能选择那最好的,是那最好的选择我。”-泰戈尔 💖欢迎来到这里。我天马行空地写,您随心所欲地看。欢迎就我们感兴趣的内容交流学习😀🤝
 最新文章