python工程师面试题-朋友去面试Python工程师,又带回来几道基础题,Python面试题No10...

第1题: print 调用 Python 中底层的什么方法?

print

print() 用 sys.stdout.write() 实现

import sys

print("hello")

sys.stdout.write("hello")

print("world")

# 结果:

# hello

# helloworld

上述代码你应该可以总结一下。

sys.stdout.write()结尾没有换行,而print()是自动换行的。

write()只接收字符串格式的参数。

print()能接收多个参数输出,write()只能接收一个参数输出。

input

Python3中的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 的区别?

首先我们看看range:

range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列。注意这里是生成一个序列。

xrange的用法与range相同,即xrange([start,] stop[, step])根据start与stop指定的范围以及step设定的步长,它所不同的是xrange并不是生成序列,而是作为一个生成器。即她的数据生成一个取出一个。

两者用法相同,不同的是 range 返回的结果是一个列表,而 xrange 的结果是一个生成器,前者是

直接开辟一块内存空间来保存列表,后者是边循环边使用,只有使用时才会开辟内存空间,所以相对来说,xrange比range性能优化很多,因为他不需要一下子开辟一块很大的内存,特别是数据量比较大的时候。

注意:

xrange和range这两个基本是使用在循环的时候。

当需要输出一个列表的时候,就必须要使用range了。

第3题: 4G 内存怎么读取一个 5G 的数据?

方法一

可以通过生成器,分多次读取,每次读取数量相对少的数据(比如 500MB)进行处理,处理结束后在读取后面的 500MB 的数据。

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))

方法二

可以通过 linux 命令 split 切割成小文件,然后再对数据进行处理,此方法效率比较高。可以按照行数切割,可以按照文件大小切割。

第4题:在except中return后还会不会执行finally中的代码?怎么抛出自定义异常?介绍一下 except 的作用和用法?

会继续处理 finally 中的代码;用 raise 方法可以抛出自定义异常

except: #捕获所有异常

except: <异常名>: #捕获指定异常

except:<异常名 1, 异常名 2> : 捕获异常 1 或者异常 2

except:<异常名>,<数据>:捕获指定异常及其附加的数据

except:<异常名 1,异常名 2>:<数据>:捕获异常名 1 或者异常名 2,及附加的数据

第5题:在Python中输入某年某月某日,判断这一天是这一年的第几天?(可以用 Python 标准库)

方法一

year = int(input("请输入4位数字的年份:")) #获取年份

month = int(input("请输入月份:")) #获取月份

day = int(input("请输入是哪一天:")) #获取日

if month == 1:

count = day

elif month == 2:

count = 31 + day

elif (month >= 3) and ((year % 4 == 0 and year % 100 != 0) or year % 400 == 0):

if month == 3:

count = 31 + 29 + day

if month == 4:

count = 31 + 29 + 31 + day

if month == 5:

count = 31 + 29 + 31 + 30 + day

if month == 6:

count = 31 + 29 + 31 + 30 + 31 + day

if month == 7:

count = 31 + 29 + 31 + 30 + 31 + 30 + day

if month == 8:

count = 31 + 29 + 31 + 30 + 31 + 30 + 31 + day

if month == 9:

count = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + day

if month == 10:

count = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day

if month == 11:

count = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day

if month == 12:

count = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + day

else:

if month == 3:

count = 31 + 28 + day

if month == 4:

count = 31 + 28 + 31 + day

if month == 5:

count = 31 + 28 + 31 + 30 + day

if month == 6:

count = 31 + 28 + 31 + 30 + 31 + day

if month == 7:

count = 31 + 28 + 31 + 30 + 31 + 30 + day

if month == 8:

count = 31 + 28 + 31 + 30 + 31 + 30 + 31 + day

if month == 9:

count = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + day

if month == 10:

count = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day

if month == 11:

count = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day

if month == 12:

count = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + day

print("第" + str(count) + "天")

互联网找到了几个解法

方法二

import datetime

y = int(input("请输入4位数字的年份:")) # 获取年份

m = int(input("请输入月份:")) # 获取月份

d = int(input("请输入是哪一天:")) # 获取“日”

targetDay = datetime.date(y, m, d) # 将输入的日期格式化成标准的日期

dayCount = targetDay - datetime.date(targetDay.year - 1, 12, 31) # 减去上一年最后一天

print("%s是%s年的第%s天。" % (targetDay, y, dayCount.days))

方法三

import datetime

dtime = input("请输入求天数的日期(20191111):")

tnum = datetime.datetime.strptime(dtime,"%Y%m%d").strftime("%j")

print(dtime + "在一年中的天数是: " + tnum + "天。")

面试系列,本次写到10篇截止

对于python面试来说,基础占了很大的一个部分,你只需要夯实基础即可

剩下的多数为算法部分,我们半年后继续写完后续涉及算法的章节。

她专科学历

27岁从零开始学习c,c++,python编程语言

29岁编写百例教程

30岁掌握10种编程语言,

用自学的经历告诉你,学编程就找梦想橡皮擦

欢迎关注她的公众号,非本科程序员

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值