今天的面试题

第1题:python2和python3的range(100)的区别

range()函数的含义

range函数是一个用来创建算数级数序列的通用函数,返回一个[start, start + step, start + 2 * step, ...]结构的整数序列

range()函数的特性

  1. 如果step参数缺省,默认1;如果start参数缺省,默认0。
  2. 如果step是正整数,则最后一个元素(start + i * step)小于stop。
  3. 如果step是负整数,则最后一个元素(start + i * step)大于stop。
  4. step参数必须是非零整数,否则抛出VauleError异常。

注意:range函数返回一个左闭右开([left,right))的序列数

  • python2中的range返回一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表
>>> list=range(10)
>>> print list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • python3中的range返回的是一个迭代器
>>> range(10)
range(0, 10)
>>> type(range(10))
<class 'range'>
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> type(list(range(10)))
<class 'list'>

for i in range(1,10)在python2和python3中都可以使用,但是要生成1-10的列表,就需要用list(range(1,10))

第2题:在Python中读取大文件

  • 利用生成器generator
def read_in_block(file_path):
BLOCK_SIZE = 1024
with open(file_path, "r") as f:
while True:
block = f.read(BLOCK_SIZE) # 每次读取固定长度到内存缓冲区
if block:
yield block
else:
return # 如果读取到文件末尾,则退出 def test3():
file_path = "/tmp/test.log"
for block in read_in_block(file_path):
print block
  • 迭代器进行迭代遍历:for line in file
def test4():
with open("/tmp/test.log") as f:
for line in f:
print line

for line in f 这种用法是把文件对象f当作迭代对象, 系统将自动处理IO缓冲和内存管理, 这种方法是更加pythonic的方法。 比较简洁。

Pythonic追求的是对Python语法的充分发挥,写出的代码带Python味儿,而不是看着向C或JAVA

第3题:如何避免转义,给字符串加哪个字母表示原始字符串?

这个就面试题的要点是几个特殊Python3字符串前缀u、b、r

  • 无前缀 & u前缀

字符串默认创建即以Unicode编码存储,可以存储中文。

string = 'a'  等效于  string = u'a'
Unicode中通常每个字符由2个字节表示
u'a' 即 u'\u0061' 实际内存中为 [0000 0000] [0110 0001]
  • b前缀

字符串存储为Ascll码,无法存储中文。

  • r前缀

与上述两种不是一样的东西了。

r前缀就相当于三引号,主要解决的是 转义字符,特殊字符 的问题,其中所有字符均视为普通字符。

所以这道题的正确答案是r前缀

第4题:python中断言方法举例?

assert 语句,在需要确保程序中的某个条件一定为真才能让程序运行的话就非常有用

下面做一些assert用法的语句供参考:

assert 1==1
assert 2+2==2*2
assert len(['my boy',12])<10
assert range(4)==[0,1,2,3]

这里介绍几个常用断言的使用方法,可以一定程度上帮助大家对预期结果进行判断。

  • assertEqual
  • assertNotEqual
  • assertTrue
  • assertFalse
  • assertIsNone
  • assertIsNotNone

assertEqual 和 assertNotEqual

  1. assertEqual:如两个值相等,则pass
  2. assertNotEqual:如两个值不相等,则pass

使用方法:

assertEqual(first,second,msg)其中firstsecond进行比较,如果相等则通过;

msg为失败时打印的信息,选填;

断言assertNotEqual反着用就可以了。

assertTrue和assertFalse

  1. assertTrue:判断bool值为True,则pass
  2. assertFalse:判断bool值为False,则Pass

使用方法:

assertTrue(expr,msg)其中express输入相应表达式,如果表达式为真,则pass;

msg选填;

断言assertFalse如果表达式为假,则pass

assertIsNone和assertIsNotNone

  1. assertIsNone:不存在,则pass
  2. assertIsNotNone:存在,则pass

使用方法:

assertIsNone(obj,msg)检查某个元素是否存在

第5题:列出python中可变数据类型和不可变数据类型,并简述原理

不可变数据类型:

数值型、字符串型string和元组tuple

不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址),如下图用id()方法可以打印对象的id.

可变数据类型:

列表list和字典dict

允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化

相同的值在内存中可能会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

写在后面

好啦,今天的面试题分解又完毕了,是不是又学到新东西了呢,希望在你升职加薪的路上为你“点火”

Python面试快问快答,理论要的就是速度与精准,Python面试题No2的更多相关文章

  1. OpenGL快问快答

    OpenGL快问快答 本文内容主要来自对(http://www.opengl.org/wiki/FAQ)的翻译,随机加入了本人的观点.与原文相比,章节未必完整,含义未必雷同,顺序未必一致.仅供参考. ...

  2. 10个Python面试常问的问题

    概述 Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.下面我收集了10个Python面试官经常问的问题,供大家参考学习. 类继承 有如下的 ...

  3. Python面试常问的10个问题

    很多人想找Python工作,面试往往在基础知识点采坑了 Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.下面我收集了10个Python面试 ...

  4. Redis快问快答

    本随笔的回答来自 http://www.runoob.com/redis/redis-tutorial.html 另一个不错的教程: https://www.yiibai.com/redis/redi ...

  5. mysql快问快答

    1.查看mysql版本 select version(); show variables like 'version'; 2.mysql 可以按timestamp排序吗? 可以 3.怎么查询商户下是否 ...

  6. python面试必问 知识整理

      一 数据类型 1 数字 整型与浮点型   #整型int 作用:年纪,等级,身份证号,qq号等整型数字相关 定义: age=10 #本质age=int(10) #浮点型float 作用:薪资,身高, ...

  7. Python | 面试必问,线程与进程的区别,Python中如何创建多线程?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题第20篇文章,我们来聊聊Python当中的多线程. 其实关于元类还有很多种用法,比如说如何在元类当中设置参数啦,以及一 ...

  8. IT关键词,面试知识问与答

    二叉树遍历的三种方式? 遍历是指依次访问⼆叉树中的每个元素.有三种遍历⽅法,分别是前序遍历. 中序遍历和后序遍历.它们是按照访问根节点和⼦节点的先后顺序命名的. • 前序遍历:先访问根节点,然后访问左 ...

  9. python基础之面试常问

    目录 python相对其他语言有什么特点? python内存管理机制,gc机制的了解,gc回收三种算法. lambda函数 高级函数 map.reduce.filter.sorted等. 简述六种基本 ...

随机推荐

  1. Luogu P3619 魔法 【贪心/微扰证明】

    题目描述 cjwssb知道是误会之后,跟你道了歉.你为了逗笑他,准备和他一起开始魔法.不过你的时间不多了,但是更惨的是你还需要完成n个魔法任务.假设你当前的时间为T,每个任务需要有一定的限制ti表示只 ...

  2. javascript---DOM大编程2

    编程挑战 现在利用之前我们学过的JavaScript知识,实现选项卡切换的效果. 效果图: 文字素材: 房产: 275万购昌平邻铁三居 总价20万买一居    200万内购五环三居 140万安家东三环 ...

  3. 解题报告:hdu 1073 Online Judge

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1073 Problem Description Ignatius is building an Onli ...

  4. Struts2 第三个程序 namespacce的用法

    1.创建web项目,添加struts2支持的类库,在web.xml中配置struts2过滤器. 2.创建名为UserAction的Action对象,并分别在其中编写add()和update()方法,用 ...

  5. Xcode7 使用AFNetWorking 报错 添加Security.framework

    Undefined symbols for architecture x86_64: "_SecCertificateCopyData", referenced from: _AF ...

  6. Hackonacci Matrix Rotations 观察题 ,更新了我的模板

    https://www.hackerrank.com/contests/w27/challenges/hackonacci-matrix-rotations 一开始是没想到观察题的.只想到直接矩阵快速 ...

  7. easy ui diglog 点击关闭,触发事件

    $('#dialogDiv').dialog({ onClose:function(){ alert('11111111') ; }});

  8. Oracle Mysql的jdbc连接

    Oracle和MySql的jdbc或连接池中的连接,写下来以便随时参考 Oracle: driverClassName=oracle.jdbc.driver.OracleDriver url=jdbc ...

  9. 特性property

    #property装饰器用于将被装饰的方法伪装成一个数据属性,在使用时可以不用加括号而直接引用# class People:# def __init__(self,name,weight,height ...

  10. Jboss服务器使用

    一.作者前言 早上坐地铁的时候,阅览about JAVA.了解到一个程序猿,对于服务器的使用,最起码的熟悉那么几种,例如tomcat,jboss,weblogic,websphere,还有Nginx. ...