python基础面试,重点全在这篇文章里

第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)其中first与second进行比较,如果相等则通过;
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学习qun:前226,中间的是745,后面三个数是469。都是自学成功并且成功就业的,在彼此的沟通可以我们可以得到很多学习经验,学习始终靠自己,当你掌握了一个好的学习方法,系统的学习方式,你会发现其实学习Python并没有那么难,有问题在qun里随时问我,qun内含有不少的资学xi资料,且工作不忙的时候帮助大家解答问题。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值