Python 基础问题(一)

前言

最近事情比较多,攒了蛮多东西没有写博客了,所以抓紧写一下。这一篇的话算是一个Python基础篇吧。也有助于自己日后复习。基本是都是一些面试会问到的问题。会持续更新!然后我觉得有句话说得好,细节决定成败,无论在哪一方面都是这样子!


本节问题:

  1. Python和Java、PHP、C、C#、C++等其他语言的对比?
  2. 简述解释型和编译型编程语言?
  3. 代码中要修改不可变数据会出现什么问题? 抛出什么异常
  4. print 调用 Python 中底层的什么方法?
  5. 简述你对 input()函数的理解?
  6. Python解释器种类以及特点?
  7. Python2 中 range 和 xrange 的区别?
  8. 位和字节的关系?
  9. b、B、KB、MB、GB 的关系?
  10. 请至少列举5个 PEP8 规范(越多越好)。
  11. python递归的最大层数?递归函数停止的条件?
  12. ascii、unicode、utf-8、gbk 区别?
  13. 字节码和机器码的区别?
  14. 三元运算规则以及应用场景?
  15. 列举 Python2和Python3的区别?

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

  • 1.Python

    优势:简单易学,能够把用其他语言制作的各种模块很轻松地联结在一起。

    劣势:速度较慢,且有一些特定情况下才会出现(无法重现)的 bug

  • 2.C/C++

    优势:可以被嵌入任何现代处理器中,几乎所有操作系统都支持 C/C++,跨平台性非常好

    劣势:学习难度大,且拥有大量极为复杂的功能交互方式,容易造成资源浪费

  • 3.Java

    优势:世界上使用范围最广的语言Java

    劣势:占用大量内存,并且启动时间较长

  • 4.C#

    优势:全面集成.Net 库,提供出色的功能与完美的库访问能力

    劣势:跨平台能力太差,且在国内就业环境不太好,收入较低

  • 5.JavaScript

    优势:学习难度低,并且掌握了 JavaScript 语言就等于成为能同时开发网页、后台、移动端的全栈工程师

    劣势:过于依赖浏览器,且代码在用户电脑上运行,容易被别有用心的坏人恶意利用

  • 6.SQL

    优势:开发速度快,安全性好

    劣势:SQL开发速度是靠牺牲运行速度换来的,且可移植性极差

  • 7.PHP

    优势:社区庞大而活跃,易于快速上手

    劣势:运行速度慢,且错误处理机制比较糟糕,需要支持大量旧版本的功能

开发语言:

高级语言:Python Java、PHP C# Go ruby C++… ===》 字节码

低级语言:C、汇编 ===》 机器码


语言之间的对比:

  • PHP类:适用于写网页,局限性

  • Python Java: 即可以写网页 也可以写后台功能

    • Python执行效率低,开发效率高

    • Java执行效率高, 开发效率低


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

1.编译型语言:在程序执行之前,有一个编译过程,将源程序翻译成机器码(CPU指令)、以二进制文件形式存在,之后再执行的时候直接执行,不再需要翻译的过程;坏处则是难以支持许多动态特性;

  • C

  • C++

2.解释型语言:在执行的时候将程序翻译成机器码(CPU指令),所以运行速度要慢于编译型语言,每次执行都需要一个翻译的过程;大部分CPU时间花在了解释器运行上面;好处是实现起来非常简单,也很容易添加新特性;

  • Python

  • Java


代码中要修改不可变数据会出现什么问题? 抛出什么异常

会抛出异常,终止程序

s = "璐璐真好看"

s[1] = 's'

print(s)

结果:
TypeError: ‘str’ object does not support item assignment

print() 用 sys.stdout.write() 实现,不过print()能接收多个参数输出,write()只能接收一个参数,所以write()不会自动换行。

Python3中的input()用sys.stdin.readline()实现。


简述你对 input()函数的理解?

接收用户的标准输入,并返回字符串


Python解释器种类以及特点?

常见的Python解释器:

1、Cpython(最常用的版本)
Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。

2、Jyhton
Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。

3、IronPython
Python的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行。(与Jython类似)

4、PyPy(特殊)
Python实现的Python,将Python的字节码字节码再编译成机器码。


Python2 中 range 和 xrange 的区别?

range(start, stop, step)返回一个递增或递减的数字列表,列表的元素值由三个参数决定:

start表示列表开始的值,可省,默认为“0”

stop表示列表结束的值,该参数不可缺少

参数step表示步长,可省,默认值为“1”

range返回的是一个列表,一次性计算并返回所有的值

xrange是一个类,返回的是一个生成器:

生成器是一个可迭代对象,在对生成器进行迭代时,元素是逐个被创建的

使用xrange()进行遍历,每次遍历只返回一个值

一般来看,在对大序列进行迭代的时候,因为xrange的特性,所以它会比较节约内存

因此,xrange的执行效率要高于range

详细对比


位和字节的关系?

  1. 位或比特(bit)。一个电子线路单元称为一个“位”(bit),它有两个稳定的工作状态,分别以“0”和“1”表示。是计算机中最小的数据单位。
    1. 字节(byte)。8位二进制数称为一个“字节”(byte,简写B)。它是计算机存储信息的基本单位,也是计算机存储空间大小的最基本容量单位。

b、B、KB、MB、GB 的关系?

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

byte就是字节

3.1byte=8bit

4.1byte就是1B

5.一个字符=2字节

6.1KB=1024B

字节就是Byte,也是B

位就是bit也是b

转换关系如下:
1GB= 1024MB 1MB=1024KB 1KB=1024B 1B= 8b


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

1、缩紧。四个空格的缩紧,不要混合使用tap和空格

2、右括号前不要加空格

3、函数左括号前不要加空格。Fun(n)

4、函数默认参数使用的赋值符左右省略空格

5、操作符左右各加一个空格

6、长数可以使用_来分割,123_456_789

7、命名规范:
尽量单独使用小写字母‘l’,大写字母‘O’等容易混淆的字母。

模块:命名尽量短小,使用全部小写的方式,可以使用下划线。

包:命名尽量短小,使用全部小写的方式,不可以使用下划线。

类:的命名使用CapWords的方式,模块内部使用的类采用_CapWords的方
式。

异常命名使用CapWords+Error后缀的方式。

类的属性(方法和变量)命名使用全部小写的方式,可以使用下划线。

类的属性有3种作用域public、non-public和subclass API,可以理解成C++中的public、private、protected,non-public属性前,前缀一条下划线。

类的属性若与关键字名字冲突,后缀一下划线,尽量不要使用缩略等其他方式。
为避免与子类属性命名冲突,在类的一些属性前,前缀两条下划线。比如:类Foo中声明a,访问时,只能通过Foo._Fooa,避免歧义。如果子类也叫Foo,那就无能为力了。

类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。
全局变量:尽量只在模块内有效,类似C语言中的static。实现方法有两种,一是all机制;二是前缀一个下划线。

函数:命名使用全部小写的方式,可以使用下划线。

常量:命名使用全部大写的方式,可以使用下划线。


python递归的最大层数?递归函数停止的条件?

Python递归最大层数为998

递归停止条件:
递归的终止条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果选择是继续调用自身,还是return;返回终止递归。
终止的条件:

  1. 判断递归的次数是否达到某一限定值
  2. 判断运算的结果是否达到某个范围等,根据设计的目的来选择

ascii、unicode、utf-8、gbk 区别?

ascii:

    A:00000010 8位 一个字节

ascii
8位一个字节,1个字节表示一个字符.即: 2 ** 8 = 256,所以ASCII码最多只能表示256个字符.

unicode:

    A:00000000 00000001 00000010 00000100 32位 四个字节

    中:00000000 00000001 00000010 00000100 32位 四个字节

unicode
俗称万国码,把所有的语言统一到一个编码里.解决了ascii码的限制以及乱码的问题.
unicode码一般是用两个字节表示一个字符,特别生僻的用四个字节表示一个字符.

utf-8:

    A:00000110 8位 一个字节

    中:00000010 00000110 16位 两个字节
utf-8
新的问题出现了,如果统一成unicode编码,乱码问题从此消失了.但是如果你写的文本基本上都是英文的,
用Unicode编码比ascii编码需要多一倍的存储空间,在存储和传输上十分不方便.
utf-8应用而生,它是一个”可变长的编码方式”,如果是英文字符,则采用ascii编码,占用一个字节.
如果是常用汉字,就占用三个字节,如果是生僻的字就占用4~6个字节.

gbk:

    A:00000110 8位 一个字节

    中:00000010 00000110 16位 两个字节

gbk
国内版本,一个中文字符 == 两个字节 英文是一个字节

1,各个编码之间的二进制,是不能互相识别的,会产生乱码。

2,文件的存储,传输,不能是unicode (只能是utf-8 utf-16 gbk gbk2312 ascii等)


字节码和机器码的区别?

机器码:是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂

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


三元运算规则以及应用场景?

规则:为真时的结果 if 判定条件 else 为假时的结果

应用场景:在赋值变量的时候,可以直接加判断,然后赋值


列举 Python2和Python3的区别?

1、默认编码:2–>ascii,3–>utf-8

2、print的区别:python2中print是一个语句,不论想输出什么,直接放到print关键字后面即可。python3里,print()是一个函数,像其他函数一样,print()需要你将要输出的东西作为参数传给它。

3、input的区别:

python2有两个全局函数,用在命令行请求用户输入。第一个叫input(),它等待用户输入一个python表达式(然后返回结果)。

第二个叫做raw_input(),用户输入什么他就返回什么。python3 通过input替代了他们。

4、字符串:

python2中有两种字符串类型:Unicode字符串和非Unicode字符串。Python3中只有一种类型:Unicode字符串。

5、xrange()

python2里,有两种方法获得一定范围内的数字:range(),返回一个列表,还有xrange(),返回一个迭代器。

python3 里,range()返回迭代器,xrange()不再存在。


今天先写这么多吧!

赏瓶可乐吧(*^▽^*)