python web面试题整理-从放弃到入门-day01

第一部分Python基础题

1.为什么学习Python?

2.通过什么途径学习的Python?

3.Python和Java、PHP、C、C#、C++等其他语言的对比?

是一种面向对象、直译式计算机程序设计语言,Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写。

4.简述解释型和编译型编程语言?

概念:
编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。
解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!

区别:
编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。如C、C++、Delphi、Pascal,Fortran。
解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好。如Java、Basic.

 通俗的讲,编译语言是在编译后可以直接运行,而解释语言的执行需要一个解释环境。

5.Python解释器种类以及特点?

CPython

由C语言开发的 使用最广的解释器,在命名行下运行python,就是启动CPython解释器.

IPython

基于cpython之上的一个交互式计时器 交互方式增强 功能和cpython一样

PyPy

目标是执行效率 采用JIT技术 对python代码进行动态编译,提高执行效率

JPython

运行在Java上的解释器 直接把python代码编译成Java字节码执行

IronPython

在微软 .NET 平台上的解释器,把python编译成. NET 的字节码

6.位和字节的关系?

位:我们常说的bit,位就是传说中提到的计算机中的最小数据单位:说白了就是0或者1;计算机内存中的存储都是01这两个东西。

字节:英文单词:(byte),byte是存储空间的基本计量单位。1byte
存1个英文字母,2个byte存一个汉字。规定上是1个字节等于8个比特(1Byte = 8bit)。

7.b、B、KB、MB、GB 的关系?
b 比特bit / 位
B——字节
KB——千比特
MB——兆比特
GB——吉比特

1 B = 8b (8个bit/ 位) 一个字节(byte)等于8位(bit)
1 kB = 1024 B (kB - kilobajt)
1 MB = 1024 kB (MB - megabajt)
1 GB = 1024 MB (GB - gigabajt)

bit就是位,也是b,也叫比特位,是计算机表示数据最小的单位

byte就是字节,1byte就是1B,一个字符=2字节

8.请至少列举5个 PEP8 规范(越多越好)。

1.变量命名规则:

不能与关键字重名,必须以数字字母下划线组成,且不能以数字开头

2.导包规则:

# 推荐这样写

import random

import sys

# 不推荐这样写

import random, sys

# 一行多个包可以这样写。

from random import random, randint

3.缩进

每一级使用四个空格缩进,要么都是用空格,要么都是用tab键,不要空格和tab键混用

4.每行最大字符限时为79个,除了长导包语句,和url地址

5.多个变量,之间使用逗号分隔,逗号与前变量相邻,与后变量之间空一格。

9.通过代码实现如下转换:

  • 二进制转换成十进制:v = “0b1111011”

int(v,2)

  • 十进制转换成二进制:v = 18

bin(v)

  • 八进制转换成十进制:v = “011”

int(v,8)

  • 十进制转换成八进制:v = 30

oct(v)

  • 十六进制转换成十进制:v = “0x12”

int(v,16)

  • 十进制转换成十六进制:v = 87

hex(v)

10.请编写一个函数实现将IP地址转换成一个整数。

如 10.3.9.12 转换规则为:

def ipfunc(ip):
    a = ip.split('.')
    s = ''
    l = []
    for i in a:
        #v = “0b1111011” 将十进制转换为二进制、去掉前面默认的0b,
        i = bin(int(i))[2:]
        #自动补8位,没有的用0代替
        i = i.rjust(8, '0')
        #加入新的列表中
        l.append(i)
    #最后拼接到一个新的字符串
    s = s.join(l)
    print(s)
    #00001010000000110000100100001100
    print(int(s,2))
    #167971084,二进制转十进制


ipfunc("10.3.9.12")

11.python递归的最大层数?

import sys


def test():
    #获取python递归的最大层数
    s=sys.getrecursionlimit()
    #输出结果1000
    print(s)
    #设置python递归的最大层数
    sys.setrecursionlimit(800)
    s2 = sys.getrecursionlimit()
    # 输出结果是800
    print(s2)


test()

12.求计算结果?

v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 3 and 2
v4 = 0 and 3 or 2
v5 = 0 and 3 or 2 or 4
v6 = 0 or False and 1

print(v1)   #结果:1
print(v2)   #结果:3
print(v3)   #结果:0
print(v4)   #结果:2
print(v5)   #结果:2
print(v6)   #结果:False

13.ascii、unicode、utf-8、gdk的区别?

  1. ASCII码使用一个字节编码,所以它的范围基本是只有英文字母、数字和一些特殊符号 ,只有256个字符。
  2. Unicode能够表示全世界所有的字节
  3. GBK是只用来编码汉字的,GBK全称《汉字内码扩展规范》,使用双字节编码。
  4. UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC
    3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

14.字节码和机器码的区别?

  • 机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据。
    通常意义上来理解的话,机器码就是计算机可以直接执行,并且执行速度最快的代码。
  • 字节码(Bytecode)是一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件。字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码。
    通常情况下它是已经经过编译,但与特定机器码无关。字节码通常不像源码一样可以让人阅读,而是编码后的数值常量、引用、指令等构成的序列。

总结:字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。

15.三元运算规则及运用场景?

三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值格式

  • res = 值1 if 条件 else 值2
a = 6 if True else 5
#结果:6
print(a)

16.列举pyhton2和python3的区别?

print

py2:print语句,语句就意味着可以直接跟要打印的东西,如果后面接的是一个元组对象,直接打印

py3:print函数,函数就以为这必须要加上括号才能调用,如果接元组对象,可以接收多个位置参数,并可以打印

如果希望在 Python2 中 把 print 当函数使用,那么可以导入 future 模块 中的 print_function

下面有个示例:
python web面试题整理-从放弃到入门-day01_第1张图片
输入函数

py2:input_raw()

py3:input()

在使用super()的不同

py2:必须显示的在参数中写上基类

py:直接无参数调用即可

1/2的结果

py2:返回0

py3:返回0.5,没有了int和long的区别

编码

py2:默认编码ascii

py3:默认编码utf-8

而且为了在py2中使用中文,在头部引入coding声明,不推荐使用

字符串

py2:unicode类型表示字符串序列,str类型表示字节序列

py3::str类型表示字符串序列,byte类型表示字节序列

True和False

py2:True 和 False 在 Python2 中是两个全局变量,可以为其赋值或者进行别的操作,初始数值分别为1和0,虽然修改是违背了python设计的原则,但是确实可以更改

py3:修正了这个变量,让True或False不可变

迭代器

py2:当中许多返回列表的方法,如range,字典对象的 dict.keys()、dict.values() 方法, map、filter、zip;并且迭代器必须实现next方法

py3:将返回列表的方法改为了返回迭代器对象,内置了__next__,不用特意去实现next

nonlocal

py2:没有办法在嵌套函数中将变量声明为一个非局部变量,只能在函数中声明全局变量

py3:nonlocal方法实现了,示例如下:

def func():
 c = 1
    def foo():
        c = 12
    foo()
    print(c)
func()    #1
def func():
    c = 1
    def foo():
        nonlocal c
        c = 12
    foo()
    print(c)
func()   # 12

17.用一行代码实现数值交换?
a=1
b=2

a = 1
b = 2
#字符串也是可以的
a,b = b,a
print(a)
print(b)

18.python3和python2中int 和long的区别?

  • python2中有long类型
  • python3中没有long类型,只有int类型

19.xrange和range的区别?

两种用法介绍如下:

1.range([start], stop[, step]) 返回等差数列。构建等差数列,起点是start,终点是stop,但不包含stop,公差是step。
start和step是可选项,没给出start时,从0开始;没给出step时,默认公差为1。 例如:

复制代码

>>> range(10)                             #起点是0,终点是10,但是不包括10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1,10)                           #起点是1,终点是10,但是不包括10
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1,10,2)                         #起点是1,终点是10,步长为2
[1, 3, 5, 7, 9]
>>> range(0,-10,-1)                       #起点是1,终点是10,步长为-1 
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0,-10,1)                        #起点是0,终点是-10,终点为负数时,步长只能为负数,否则返回空
[]
>>> range(0)                              #起点是0,返回空列表
[]
>>> range(1,0)                            #起点大于终点,返回空列表
[]

复制代码

2.xrange([start], stop[, step]) xrange与range类似,只是返回的是一个"xrange object"对象,而非数组list。
要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。

例如:
复制代码

>>> lst = xrange(1,10)
>>> lst
xrange(1, 10)
>>> type(lst)
<type 'xrange'>
>>> list(lst)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

复制代码

区别如下:

1.range和xrange都是在循环中使用,输出结果一样。
2.range返回的是一个list对象,而xrange返回的是一个生成器对象(xrange object)。
3.xrange则不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少,因而性能非常好。

补充点:
复制代码

#以下三种形式的range,输出结果相同。

>>> lst = range(10)
>>> lst2 = list(range(10))
>>> lst3 = [x for x in range(10)]
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst3
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst == lst2 and lst2 == lst3
True

复制代码

注意:Python 3.x已经去掉xrange,全部用range代替。

20.文件操作时,xreadlines和readlines的区别?

  • xreadlines返回的是一个生成器类型,python3已经没有该方法.
  • readlines返回的是一个列表: [‘第一行\n’, ‘第二行\n’, ‘第三行’]

你可能感兴趣的:(python基础)