1.print和input调用底层的什么方法?
#print调用sys.stdout.write()实现
import sys
print('hello')
sys.stdout.write('hello')
print('world')
#结果
#hello
#helloworld
总结:1.sys.stdout.write()输出不换行,print换行
2.两者接收的输出参数均为字符串型,sys.stdout.write()只能接收一个字符串输出,print可以接收多个字符串输出
#input调用sys.stdin.readline()实现
import sys
a=sys.stdin.readline()
print(a,len(a))
b=input()
print(b,len(b))
#结果
#hello
#hello
#6
#hello
#hello 5
2.range和xrange的区别
(1).range([start],stop[,step]),根据start与stop指定的范围与step设定的步长生成一个序列
(2).xrange([start],stop[,step]),根据start与stop指定的范围与step设定的步长生成一个生成器,即数据生成一个取出一个
两者用法相同,不同的是range生成一个序列,直接开辟一块存储空间来保存列表,而xrange生成的是一个生成器,变循环边使用,只有当使用时才会开辟空间,所以相对来说,xrange比range相比性能优化很多,特别是数据量比较大的时候。
两者基本是在循环时使用,不过当需要输出一个列表时,就必须要使用range了。
3.4G内存怎么读取一个5G的数据
(1).通过生成器,分多次读取,每次读取一部分
def get-lines():
with open('big.data','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命令把文件分割成小文件,然后在对数据进行处理,此方法效率较高,可以按照行数分割,也可以按照文件大小分割
4.在except中return后还会不会执行finally中的代码?怎么抛出自定义异常?介绍一下except的用法和功能?
(1).会继续处理finally中的代码
(2).用raise方法可以抛出自定义异常
(3).except用法及功能:
- except:#捕获所有异常
- except:<异常名>:#捕获指定异常
- except:<异常名1,异常名2>:#捕获异常1或异常2
- except:<异常名>,<数据>:#捕获指定异常,及其附加的数据
- except:<异常名1,异常名2>,<数据>:#捕获异常1或异常2,及其附加的数据
5.列表[1,2,3,4,5],请使用map方法输出[1,4,9,16,25],输出大于10的数,最终输出[16,25]
a=map(lambda x: x**2,[1,2,3,4,5])
list=[i for i in a]
print(list)
list=[i for i in list if i>10]
print(list)
#结果
#[1,4,9,16,25]
#[16,25]
6.参数*args,*kwargs
- 如果我们不确定要往函数中传入多少个参数,或者我们想往函数中以列表和元组的形式传参数时,那就使要用*args;
- 如果我们不知道要往函数中传入多少个关键词参数,或者想传入字典的值作为关键词参数时,那就要使用**kwargs。
- args和kwargs这两个标识符是约定俗成的用法,你当然还可以用*tom和**jarry,但是这样显的不专业。
7.使用三元运算符
Python中并没有三元运算符,不过有类似的实现方法
三元操作符格式为
[on_true] if [expression] else [on_false]
x=int(input('请输入第一个数'))
y=int(input('请输入第二个数'))
big=x if x>y else y
print(big)
#结果
#请输入第一个数:12
#请输入第二个数:10
#12