一. 选择题(每题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修饰