一. 选择题(每题1分,共20分)
- 下列哪个语句在Python中是非法的? ( B )
A. x = y = z = 1 B. x = (y = z + 1)
C. x, y = y, x D. x += y
2.关于Python内存管理,下列说法错误的是 ( B )
A. 变量不必事先声明 B. 变量无须先创建和赋值而直接使用
C. 变量无须指定类型 D. 可以使用del释放资源
-
在Python3中执行如下语句后得到的结果是? ( D )
>>> world="world" >>> print "hello"+ world
A. helloworld B. "hello"world
C. hello world D. 语法错误
-
下面哪个不是Python合法的标识符( B )
A. int32 B. 40XL C. self D. name -
下列哪种说法是错误的( AD )
A. 除字典类型外,所有标准对象均可以用于布尔测试
B. 空字符串的布尔值是False
C. 空列表对象的布尔值是False
D. 值为0的任何数字对象的布尔值是False -
下列表达式的值为True的是 ( A )
A. 5+4j > 2-3j B. 3>2>2
C. (3,2)< (‘a’,‘b’) D. ‘abc’>‘xyz’ -
Python不支持的数据类型是 ( A )
A. char B. int C. float D. list -
type(1+2L*3.14)结果是: ( C )
A. <type ‘int’> B. <type ‘long’>
C. <type ‘float’> D. <type ‘str’> -
关于字符串下列说法错误的是 ( B )
A. 字符应该视为长度为1的字符串
B. 字符串以\0标志字符串的结束
C. 既可以用单引号,也可以用双引号创建字符串
D. 在三引号字符串中可以包含换行回车等特殊字符 -
以下不能创建一个字典的语句是 ( C )
A. dict1 = {}
B. dict2 = { 3 : 5 }
C. dict3 = dict( [2 , 5] ,[ 3 , 4 ] )
D. dict4 = dict( ( [1,2],[3,4] ) ) -
下面不能创建一个集合的语句是 ( C )
A. s1 = set () B. s2 = set (“abcd”)
C. s3 = (1, 2, 3, 4) D. s4 = frozenset( (3,2,1) ) -
下列Python语句正确的是 ( D )
A. min = x if x < y else y B. max = x > y ? x : y
C. if (x > y) print x D. while True : pass -
以下哪个为创建分配内存的方法 ( AB )
A. new () B. init()
C. del() D. 没有正确答案 -
以下哪个对象不属于Itarable 的 ( D )
A. list B. tuple
C. dict D. float -
关于创建进程的方式,说法错误的是 (D )
A. fork B. Process
C. Process的子类 D. 都不对 -
关于类型转换,说法错误的有(多选) ( C )
A. int <-> float B. tuple <-> list
C. list<-> dict D. str <-> list -
以下哪个类型不可以进行切片操作 ( D )
A. str B. list
C. tuple D. dict -
以下哪个属于可变对象 ( B )
A. 数值类型(int,float) B. list
C. tuple D. str -
实现以下哪个方法可以让对象像函数一样被调用 ( C )
A. str() B. iter()
C. call() D. next() -
以下哪个不属于面向对象的特征 ( D )
A. 封装 B. 继承
C. 多态 D. 复合
二. 简答题(每题5分,共40分)
**
1. 请简述你对面向对象的理解
**
面向对象的编程—object oriented programming,简称:OOP,是一种编程的思想。OOP把对象当成一个程序的基本单元,一个对象包含了数据和操作数据的函数。面向对象的出现极大的提高了编程的效率,使其编程的重用性增高。
python面向对象的重要术语:
1.多态(polymorphism):一个函数有多种表现形式,调用一个方法有多种形式,但是表现出的方法是不一样的。
2.继承(inheritance)子项继承父项的某些功能,在程序中表现某种联系
3.封装(encapsulation)把需要重用的函数或者功能封装,方便其他程序直接调用
4.类:对具有相同数据或者方法的一组对象的集合
5.对象:对象是一个类的具体事例
**
2. 简述什么是深拷贝和浅拷贝
**
浅拷贝:
对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。注意:当内存销毁的时候,指向对象的指针,必须重新定义,才能够使用
深拷贝:深拷贝是指,拷贝对象的具体内容,二内存地址是自主分配的,拷贝结束之后俩个对象虽然存的值是一样的,但是内存地址不一样,俩个对象页互相不影响,互不干涉
**
3. 请简述Python中的内存管理机制
**
Python使用gc模块处理python对象以及python垃圾回收器的工作
gc.enable()——可自动进行垃圾回收;
gc.disable()——不可自动进行垃圾回收;
gc.set_threshold()——设置python垃圾回收的阈值;
gc.set_debug()——设置垃圾回收的调试标记,调试信息会被写入std.err;
gc.get_objects()——返回收集器跟踪的所有对象的列表,不包括返回的列表。
Python的内存管理机制主要包括三个方面:引用计数机制、垃圾回收机制、内存池机制
**
4. 请写出创建生成器的方式(最好用代码)
**
方式一: 将列表生成式的中括号改成小括号
列表生成式 a = [x*2 for x in range(100000000000)]
生成器 a = (x*2 for x in range(100000000000))
调用的时候 next(a)
def creatnum():
a,b = 0,1
for i in range(5):
yield b
a,b = b,a+b
**
5. 请简述dict的特性
**
字典中key的值不可改变,value的值可以改变;
由于字典保存数据使用的是Hash存储方式 故字典无法使用切片方式
**
6. 请简述4G的内存如何做到可以读取5G的数据
**
#1 使用python的生成器,一小段一小段数据读取
# 生成器:具有yield的函数就是生成器,是一个可以返回迭代器的函数
# 迭代器:知道遍历位置的对象,有iter()和next()方法
# 代码举例:
def get_lines(): # 生成器
with open('file5G.py', 'r') as f:
while True:
data = f.readlines(100)
if data:
yield data
else:
break
f = get_lines() # 迭代器对象
print(next(f))
print(next(f))
print(next(f))
#2 Linux的split命令
# 可以把文件拆成一个个小文件进行操作
# 作用:split将一个文件分割成一个个指定大小的文件
# 使用语法: split [–help][–version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
# 常用的选项是-b按照字节切割,-l按照行数切割
# 在黑窗口中输入命令,使用举例:
python@ubuntu:~/Desktop$ split -l 2 requirements.txt re.txt
# 意思:按照两行切割requirements.txt文件,切割后的文件名叫re.txt。
# 回车后会生成好多re文件,里面都是两行代码
**
7. 简述read. readline. readlines的区别
**
read:读取整个文件
read([size])
方法从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止,它范围为字符串对象
f = open("a.txt")
lines = f.read()
print(lines)
print(type(lines))
f.close()
输出结果:
Hello
Welcome
What is the fuck...
<type 'str'> #字符串类型
readline:读取下一行,使用生成器方法。**
从字面意思可以看出,该方法每次读出一行内容,所以,读取时占用内存小,比较适合大文件,该方法返回一个字符串对象。
def pyReadLine(filename):
file_object1 = open('a.txt','r')
try:
while True:
line = file_object1.readline()
if line:
print ("line=",line)
else:
break
finally:
file_object1.close()
输出结果:
<type 'str'>
Hello
Welcome
What is the fuck...
readlines:读取整个文件到一个迭代器以供我们遍历
readlines()方法读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存。
f = open("a.txt")
lines = f.readlines()
print(type(lines))
for line in lines:
print(line)
f.close()
输出结果:
<type 'list'>
Hello
Welcome
What is the fuck...
**
8. 简述实例属性与类属性的区别以及实例方法与类方法,静态方法的区别
**
类属性和实例属性的区别
在Python中一切皆对象,类是一个特殊的对象即类对象,描述类的属性称为类属性,它属于类。类属性在内存中只有一份,所有实例对象公用,在__init__外部定义。
实例属性:用来描述类创建出来的实例对象,需要通过对象来访问,在各自对象的内存中都保存一份,在__init__
方法内部定义
实例方法、类方法、静态方法的区别
这三种方法都是保存在类的内存中,调用者不同。
实例方法由对象调用,至少一个self参数,self代表对象的引用。
类方法由类调用,至少一个cls参数,并且需要装饰器@classmethod修饰
静态方法由类调用,不需要参数,需要装饰器@staticmethod修饰