3.1 函数

选择题

1.在 Python 中,以下哪个不是函数的 作用?

A 提高代码的执行效率

B 实现代码的重复使用

C 增强代码的可读性

D 使程序结构更加清晰

正确答案 A 我的答案 B

答案解析 函数主要目的是实现代码的重复使 用、增强可读性和使程序结构清晰, 但不一定能直接提高代码执行效率, 函数调用等操作可能会带来一定开销。

2.在嵌套函数中,内函数可以访问外函 数的?

B 全局变量

C 局部变量和全局变量

D 都不能访问

正确答案 C 我的答案 A

答案解析 内函数可以访问外函数的局部变量以 及全局变量。

3.以下关于变量作用域,说法错误的 是?

A 局部变量仅在函数内部有效

B 全局变量在整个程序中有效

C 函数内部不能访问全局变量

D 全局变量可以在函数内部使用 global 关键字修改

正确答案 C 我的答案 D

答案解析 函数内部可以访问全局变量,但不能 直接修改,除非使用 global 关键字

总结:我将D项理解为global修改的是全局变量,没仔细读

4.在函数内部定义的变量,其作用域 是?

A 整个程序

B 函数外部

C 函数内部

D 根据情况而定

正确答案 C 我的答案 D

答案解析 函数内部定义的变量是局部变量,作用域仅在函数内部

总结:我想到的是可以使用global关键字对局部变量修改,所以作用域也就修改为了全局,所以选择了D项

3.3模块与包

选择题

1.从模块中导入所有内容的方式是?

A import 模块名

B from 模块名 import 内容

C from 模块名 import *

D import 模块名 as 别名

正确答案 C 我的答案 A

答案解析:from 模块名 import * 可以导入模 块中的所有内容,但不建议在实际开 发中大量使用,因为可能会导致命名 空间污染等问题。

总结:我认为 import 模块名 导入了整个模块也就导入所有内容;需要区分“导入模块”和“导入模块中的所有内容”这两个概念。

2.Python 的内置模块?

A 需要通过 pip 安装后才能使用

B 是 Python 解释器自带的,可直接 导入使用

C 只有特定版本的 Python 才有

D 不能在自定义模块中使用

正确答案 B 我的答案 A

答案解析 内置模块是 Python 解释器自带的标 准库模块,如 keyword、os 等,可 以直接导入使用,无需安装,在所有 安装了 Python 解释器的电脑上都可 运行

3.从模块中导入子模块的方式是?

A import 模块名。子模块名

B from 模块名 import 子模块名

C import 子模块名

D from 子模块名 import 内容

正确答案 B 我的答案 D

答案解析 from 模块名 import 子模块名可以 从模块中导入指定的子模块, import 模块名。子模块名这种语法 不对,import 子模块名会报错(除 非子模块在搜索路径中),from 子 模块名 import 内容是从子模块中导 入特定内容而非导入子模块本身。

3.4异常处理机制

选择题

1.访问一个字典中不存在的键时,会触 发?

A AttributeError

B KeyError

C TypeError

D IndexError

正确答案 B 我的答案 A

答案解析 当访问字典中不存在的键时,会触发 KeyError 异常。AttributeError 与 对象属性相关,TypeError 是类型不 匹配操作,IndexError 主要针对序 列索引越界等问题。

2.以下哪种不是 Python 中的异常处理 方式?

A 捕获单个异常

B 捕获多个异常

C 捕获全部异常

D 都不是

正确答案 D 我的答案 C

答案解析 Python 中的异常处理方式有捕获单 个异常、捕获多个异常和捕获全部异 常。

总结:我做的时候就想了捕获所有异常,而全部异常不符合我就直接选择了C

3.在捕获异常时,如果 except 子句中 的异常类型与实际发生的异常不匹 配,会发生什么

A 程序自动将异常类型转换为匹配的 类型后处理

B 忽略该异常,程序继续执行

C 异常不会被捕获,程序终止

D 抛出新的异常 正确答案 C 我的答案 A

答案解析 如果 except 子句中的异常类型与实 际发生的异常不匹配,异常不会被捕 获,程序会终止。Python 不会自动 转换异常类型,也不会忽略异常,更 不会抛出新的异常(除非在 except 子句中有手动抛出新异常的代码,但 这不是因为异常类型不匹配导致 的)。

总结:这个知识点不清楚,不确定能不能转换异常,正确:Python 不会自动 转换异常类型,也不会忽略异常,更 不会抛出新的异常

3.5迭代器与生成器

1.以下关于生成器和迭代器的区别, 错误的是?

A 生成器是一种特殊的迭代器,具有 更简洁的语法

B 迭代器需要实现iter() 和next() 方 法,生成器只需要实现 yield 关键 字

C 生成器可以处理无限序列,迭代器 通常用于有限序列 D 生成器在内存使用上更高效,因为 是惰性求值

正确答案 B 我的答案 B

答案解析 生成器也是迭代器,它同样需要实 现迭代器协议(本质上也实现了 iter() 和__next__() 方法,只是 通过 yield 关键字来隐式实现),A 选项正确。生成器可以处理无限序 列,并且由于惰性求值在内存使用 上更高效,C 和 D 选项正确。生成 器不仅仅是使用 yield 关键字,它 在实现上也是基于迭代器协议的, 只是语法上更简洁方便创建,B 选 项错误。

总结:纠结B项,因为我不知道只需要实现关键字是否正确,没有考虑这两个方法即: iter() 和__next__() 方法

2.在自定义迭代器或生成器中,如果 需要在迭代过程中访问外部变量,(将外部变量作为参数传递给迭代器 或生成器类的构造函数) 是正确的

3.5正则表达式

选择题

1.以下哪个量词表示出现 0 次或 1 次?

A *

B +

C {n}

D ?

正确答案 D 我的答案 B分

答案解析 ?作为限定符,表示其修饰对象只能 出现 0 次或 1 次(懒惰匹配),* 表 示出现 0 次或多次(贪婪),+ 表 示出现 1 次或多次(贪婪),{n} 表 示出现 n 次。

2.在单行模式下,. 可以匹配?

A 任何字符,包括换行符

B 除换行符外的任何字符

C 只有字母和数字

D 只有空白字符

正确答案 A 我的答案 B

答案解析 在单行模式下,. 可以匹配任何的字 符,包括换行符;在多行模式下,. 不可以匹配换行符。 B 除换行符外的任何字符

3.以下哪个是贪婪匹配模式?

A *?

B +?

C {n,m}?

D 空白 什么也不加

正确答案 D 我的答案 A

答案解析 在 Python 的 re 模块中,量词后面 不加问号默认为贪婪模式,如表示尽 可能多地匹配字符,而?、+?、 {n,m}? 等是懒惰匹配模式(在量词 后加问号表示尽可能少地匹配字 符)。

4.re.search 函数的作用是?

A 从字符串起始位置搜索第一个匹配 项

B 从字符串任意位置搜索第一个匹配 项

C 搜索所有匹配项

D 替换所有匹配项

正确答案 B 我的答案 A

答案解析 re.search 函数从文本中获取第一个 符合正则表达式模式的字符的位置, 并返回一个匹配对象,如果没有匹配 到就返回 None,它是从字符串任意 位置开始搜索第一个匹配项。

5.在多行模式下,^ 和 $ 可以匹配? A 整个文本的开头和结尾

B 每一行的开头和结尾

C 任意位置

D 只有空行的开头和结尾

正确答案 B 我的答案 A

答案解析 在多行模式下,^ 和可以匹配到每一 行的开始和结束;在单行模式下,和 只能匹配到文本的开头和结尾。

3.7装饰器

选择题

在装饰器中,如果想要在函数执行 前进行一些操作,应该在哪个位置 添加代码?

A 最外层函数开头

B 中间层函数开头

C 最内层函数开头,在调用被装饰函 数之前

D 最内层函数结尾,在返回被装饰函 数结果之后

正确答案 C 我的答案

答案解析 最内层函数负责添加功能,在最内 层函数开头,在调用被装饰函数之 前添加代码可以实现在函数执行前 进行操作,最外层函数主要用于获 取装饰器参数,中间层函数用于接 收被装饰函数,在这两个位置添加 代码不符合在函数执行前操作的逻 辑,最内层函数结尾添加代码是在 函数执行后进行操作。

详细可以参考下例进行理解

# 带参数的装饰器
def func1(prefix):
    def decorator(func):
        def wrapper(*args,**kwargs):
            result = func(*args,**kwargs)
            return f'{result},{prefix}'
        return wrapper
    return decorator
# 使用装饰器并传递参数
@func1('how are you?')
def greet(name):
    return f'hello,{name}'
# greet = func1('how are you?')(greet)
# 调用被装饰的函数
print(greet('Alice'))

3.8 文件操作

选择题

1.开文件后,使用什么方法可以一次读 取文件指针后面所有内容(在文本模 式下)?

A readline ()

B open()

C read ()

D write ()

正确答案 C 我的答案 A

答案解析 read () 方法在不传入参数时,会一 次性读取文件指针后面的所有内容并 返回字符串;readline () 读取单行数 据,open()打开文件,write () 用于 写入内容

2.写入文件时,write () 方法会?

A 在文件开头写入内容

B 在文件末尾追加内容

C 覆盖当前文件指针位置后面的内容

D 随机写入内容

正确答案 C 我的答案 B

答案解析 write () 方法将内容覆盖到当前文件 指针位置的后面,并移动文件指针到 新的写入位置,不是在开头写入、末 尾追加(除非是追加模式)或随机写 入。

3.获取文件大小使用 os 模块中的什么 函数?

A os.path.getsize ()

B os.getsize ()

C os.size ()

D os.path.length ()

正确答案 A 我的答案 B

答案解析 在 Python 中,使用 os.path.getsize () 函数获取指定文 件的大小(以字节为单位), os.getsize () 不是正确的函数名, os.size () 和 os.path.length () 也不 是用于获取文件大小的函数。

4.获取绝对路径使用 os 模块的什么函 数?

A os.path.abspath ()

B os.abs_path ()

C os.get_absolute_path ()

D os.path.absolute ()

正确答案 A 我的答案 D

答案解析 在 Python 中,使用 os.path.abspath () 函数将相对路径 转换为绝对路径,os.abs_path ()、 os.get_absolute_path () 和 os.path.absolute () 不是获取绝对路 径的标准函数。

3.12 网络基础知识

选择题

1.以下属于通用顶级域(gTLD)的是 ( )

A .com

B .cn

C .uk

D 以上都是

正确答案 A 我的答案 D

答案解析 通用顶级域(gTLD)如.com(商 业)、.org(组织)、.net(网络提 供商)等,.cn 是中国的国家代码顶 级域(ccTLD),.uk 是英国的国家 代码顶级域(ccTLD),A 选项正 确。

2.以下关于 IPv6 地址的说法,正确的 是( )

A IPv6 地址由 32 位二进制数组成

B IPv6 地址已经全面取代了 IPv4 地 址

C IPv6 地址通常表示为八组四位十六 进制数

D IPv6 地址空间比 IPv4 地址空间小

正确答案 C 我的答案 A

答案解析 IPv6 使用 128 位地址,通常表示为 八组四位十六进制数,C 选项正确。

总结:一眼看的选择错误的

3.在网络通信中,端口号的取值范围是 ( )

A 0 - 1023

B 1024 - 49151

C 49152 - 65535

D 0 - 65535

正确答案 D 我的答案 A 试

端口号是一个 16 位的二进制数,其 取值范围是 0 - 65535,D 选项正 确。