这份文档《Python笔试题(1)》包含了初级到中级水平的Python编程语言测试题目,适用于准备面试或自我评估的程序员。
【Python基础知识】
1. Python中的赋值语句支持多重赋值,如A项 `x = y = z = 1` 可以同时初始化多个变量;而B项 `x = (y = z + 1)` 是非法的,因为Python不支持这种右赋值操作。
2. 在命令行运行 `python my.py v1 v2`时,`sys.argv` 列表会包含脚本名以及所有传入参数。因此要获取v2的参数值应使用C项 `argv[2]`。
3. 当执行 `print 1.2 - 1.0 == 0.2` 返回 `False`, 这是因为Python中浮点数表示存在精度问题,所以B项 浮点数无法精确表示 是正确解释。
4. 定义函数时如果局部变量与全局同名不会影响到全局变量值。代码D项 报错是正确的答案。
【Python数据类型】
5. Python的映射类型为 D 选项 dict, 是一种键值对的数据结构;
6. 字符串格式化中,正确使用百分号 `%` 进行占位和替换的是D选项 `GNUs Not %s %% % UNIX`, 其中`s`代表字符串,而`%`用于转义。
7. Python 2.7 中定义Unicode编码的书写方式为 C 选项 `a = u中文`, 前缀u表示这是一个Unicode字符串;
8. 执行 `print a < b < c` 返回D选项 True, 因这是按字母顺序排序的结果;
9. 当执行代码 `print a > b or c`,其中`or`逻辑短路返回C 选项c的值。
10. 定义元组时单个元素需要加逗号表示这是一个元组。因此A项 (1) 不合法。
【Python语法】
11. 如果有变量a和b都等于整数123, 那么B项 a is b 是正确的,因为两个字符串的值相同,则它们指向内存中的同一位置。
12. 协程允许在一个线程中运行多个并发任务,但其调度通常由程序自身控制。因此D选项 Linux 中协程的调度由操作系统控制是错误的理解。
13. 函数参数定义时如果在可变参数`*args`后面直接跟具名参数,则C项 `def myfunc(*args, a=1):` 是不合法的。
14. 列表推导式 `[i**i for i in range(3)]` 会返回A选项 [1, 1, 4],因为每个元素是其自身的幂次方的结果。
15. 在闭包示例中执行 `bar(2)(3)` 返回8。因此 A项 bar(2)(3) == 8 是正确的。
【Python异常处理】
16. 使用`tryexceptelsefinally`块时,无论是否发生异常,最终的代码都会被执行;所以a的值为D选项5。
17. 对于深浅拷贝的理解,执行 `a.append(5)` 和 `a[4].append(c)` 会影响到列表 a 和 b,但不会影响到 c和d。因此错误描述是B项 b == [1,2,3,4,[a,b,c],5]。
【函数装饰器】
18. 函数`dec(f)`定义了一个装饰器,返回一个新的函数 `wrapper`, 该函数会将原始函数的返回值乘以 n 。所以执行带 `@dec` 的 `foo` 函数后结果为 A项 def foo(*args, **kw): return f(*args, **kw) * n。