Python 面试题

位和字节的关系?
    位是电子计算机中最小的数据单位,第一位的状态只能是0或1
    字节:8个二进制位构成1个字节,它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字
    
b, B, KB, MB, GB的关系?
    b:bit 位,一字节有8bit
    B, KB, MB, GB之间进制是1024
    
列举至少5个pep8规范
    http://www.jingang.ga/article/33
    
10 求结果:
    v1 = 1 or 3
    v2 = 1 and 3
    v3 = 0 and 2 and 1
    v4 = 0 and 2 or 1
    v5 = 0 and 2 or 1 or 4
    v6 = 0 or False and 1
    
    python 中的and 从左到右计算表达式,若所有值 均为真,则返回最后一个值,若存在假,返回第一个假值
    or 也从左到右计算表达式, 返回第一个为真的值。

11 ascill, unicode, utf8, gbk区别
    ascill 只能表示英文,8位
    unicode 中文,英文都是32位
    utf8 中文16位,英文8位
    gbk 中文16位,英文8位
    除了unicode都用4字节存储,其它的中文2字节,英文1字节
    
12 字节码和机器码的区别
    机器码机器可以直接执行的代码,字节码是中间状态的二进制代码,需要直译器转译后才能成为机器码

13 三元运算的编写格式:
    res = a if a >1 else b

16 用一行代码进行数据交换
    a =1 
    b =2 
    a,b = b,a

18 xrange 的range的区别
    在python2 中有xrange, range, range直接返回一个列表,而xrange则是生成器。
    在python3中,range代替了xrange
    
19 如何实现字符串的反转?如name = 'wupeiqi',如何反转成'iqiepuw'
    
    name = 'wupeiqi'
    name = list(name)
    name.reverse()
    new_name = ''
    for i in name:
        new_name+= I
        
20 文件操作时xreadlines和readlines的区别

    xreadlines返回一个生成器,readlines返回的则是一个列表,循环时二者效果相同。区别是xreadlines并没有一次将所有数据读取。

21 列举布尔值为False 的常见值

    ''(空), 0, None, [], (), {}, -0, 0.0

22 列举字符串,列表,元组,字典 每个类型常用的5个方法

    字符串:count, replace,upper, lower,join, strip,split

    列表:reverse, insert, pop,extend, copy,sort,count

    元组:count,index,

    字典:clear, pop,update, get,copy, keys, values, items

23 is 和 ==的区别

    python中对象包括:三个基本要素, id,type, value

    is同一性运算符 ==比较操作符。

    当值在通用对象池中时(如小整数-5 ~257)a is b,否则只有连续赋值时,a is b才为True.

    

>>> a = 256
>>> b = 256
>>> a is b
True
>>> a == b
True
>>> a = 257
>>> b = 257
>>> a is b
False
>>> a == b
True
>>> a = b = 257
>>> a is b
True
>>> a == b
True

 

24 1,2,3,4,5能组成多少个互不相同的且无重复的三位数

    排列组合60,A5

num_list =[(x, y, z) for x in range(1,6) for y in range(1,6) for z in range(1,6) if ((x != y) and (y != z) and (x != z))]


25 什么是反射 ,应用场景有哪些

本质是:通过字符串的形式,导入模块,通过字符串的形式,去模块寻找指定函数并执行,或者去对象中操作(查找,获取,删除,添加)成员。

动态导入模块?

26 简述python 深浅拷贝

    深拷贝在内存中重新开辟一块空间,存储拷贝的数据。数据之间的修改都不会相互影响。

    浅拷贝则是存储了地址引用,当源数据被修改时,拷贝的数据也会有变化。

27 python 垃圾回收机制

    python中垃圾回收是以引用计数为主,分代收集为辅。当一个对象的引用数为0,python虚拟机应付回收这个对象内存。

28 python的可变类型与不可变类型的区别
    可变数据类型有:列表,字典
    不可变数据类型: 整型,浮点型,字符串型,无组。
    对于不可变类型,变量所指向的地址的值是不可改变的,改变变量的值只是指向了新的地址。对于可变类型,变量指向的地址的值是可变的,除非重新赋值,否则都是对原地址的值进行修改。

29 

v = dict.fromkeys(['k1', 'k2'],[])
v['k1'].append(666)
print(v)
v['k1'] = 777
print(v)


{'k1': [666], 'k2': [666]}
{'k1': 777, 'k2': [666]}

30 一行代码实现删除代码中重复的值

ls = ['a', 'b', 1, 4,  'a','b']
ls = list(set(ls))

31 如何实现 ‘1,2,3’ 变成['1','2','3']

a = '1,2,3'
l = [x for x in a.split(',')]

32 如何实现['1','2','3']变成[1,2,3]

a = ['1','2','3']
l = [int(x) for x in a]

33.比较:a=[1,2,3]和b=[(1),(2),(3)] c=[(1,),(2,),(3,)]的区别

a是一列表,b是列表里面套集合,c是列表里套元组

34 如何用一行代码生成[1,4,9,16,25,36,49,64,81,100]

[x*x for x in range(1,11)]

35 常用字符串格式化有哪几种

% 点位符

format函数

36 什么是断言,应用场景有哪些

Python的assert是用来检查一个条件,如果它为真,就不做任何事。如果它为假,则会抛出AssertError并且包含错误信息。

断言主要应用场景:运行检查程序逻辑,检查约定,程序常量等

比如在程序运行前检查数据库是否连接上了,类似一个不变量

再比如,在做接口时,约定传入的字符串首字母大小,测试时用来检查传入的参数符合要求。

38 有一个多层嵌套的列表A=[1,2,[3,4,["434",]]],请写一段代码遍历A中的每一个元素并打印出来 

def recur_print(arg):
    for i in arg:
        if isinstance(i, list):
            recur_print(i)
        else:
            print(i)
recur_print(A)

39 a = range(10) , a[::-3] = [9.6.3.0]

40 从虚拟环境中退出的命令是:deactivate

41 将列表内的元素根据位数合并成字典

lst = [1,2,4,8,16,32,64,128,256,512,1024,32769,65536,4294967296]
d = {}
for i in lst:
    d[len(str(i))] = []

for j in lst:
    d[len(str(j))].append(j)

#

lst = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 32769, 65536, 4294967296]

dic = {}
for l in lst:
    if len(str(l)) in dic.keys():
        dic[len(str(l))].append(l)
    else:
        dic[len(str(l))] = [l,]


print(dic)

42 将二维数组转换成一维数组

lst = [[1,2,3],[4,5,6],[7,8,9]] 转换成[1,2,3,4,5,6,7,8,9]

import numpy as np

lst =[[1,2,3],[4,5,6],[7,8,9]]

arr = np.array(lst)
numpy_lst = arr.reshape((9,))
new_lst = list(numpy_lst)
print(new_lst)

37 有两个字符串列表a和b,每个字符串是由逗号分隔的一些字符

a = ['a,1',
     'b,3,22',
     'c,3,4', ]

b = ['a,2',
     'b,1',
     'd,2']

按首字母合并a和b到c

c = [
    'a,1,2',
    'b,3,22,1',
    'c,3,4',
    'd,2']

a.什么是http协议?

http协议是 超文本传输协议的简称。

一次请求一次响应之后断开连接(无状态,短连接)

格式包括:请求头 + 请求体, 请求头之间用\r\n隔开,请求体之间用\r\n\r\n隔开。

常见的请求头有:user-agent, content-type

常见的请求方式有:GET, POST, ...(共8种)

 

b.Django生命周期(django请求一个网址到得到响应之间发生了什么)

 

上一篇:数据库多表查询

下一篇:pep8 规范