python基础面试题

1. 为什么学习Python?

  1. 全球主流的编辑语言
    Python , 是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,Python 已经成为继Java,C++之后的的第三大语言。 特点:简单易学、免费开源、高层语言、可移植性强、面向对象、可扩展性、可嵌入型、丰富的库、规范的代码等。
  2. 无所不能的编程语言
    Python除了极少的事情不能做之外,其他基本上可以说全能,Python可以做系统运维、云计算开发、图形处理、金融分析、游戏开发、数学处理数据库编程、网络编程、WEB编程、PYMO引擎、黑客编程、爬虫开发、机器学习、人工智能等等。
  3. 企业越来越热衷的语言
    Python强大的生态圈注定它了应用广泛,国内的豆瓣、搜狐、金山、通讯、盛大、网易、百度、阿里、土豆、新浪等,国外:谷歌、NASA、YOUTU、FACEBOOK、红帽等企业都在广泛应用。
  4. 国家政策推动支持
    国务院发布了《新一代人工智能发展规划》,人工智能正式纳入国家发展战略,开启了国内人工智能产业发展的新篇章。2017年Python还被列入全国计算机等级考试,山东省小学课程加入了Python,浙江省、北京市、山东省已把Python纳入信息技术课程和高考的内容体系。

2. 通过什么学习Python?

通过网上各种学习视频,比如小甲鱼,慕课的七月老师以及各大Python的交流论坛等。


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

  1. python语言,是一种面向对象、直译式计算机程序设计语言,Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写。
  2. Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。
  3. Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很多人还把Python作为一种“胶水语言”(glue language)使用。使用Python将其他语言编写的程序进行集成和封装。

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

1. 概念

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

2. 区别

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

3. python

  • Python 的采用了类似Java的编译模式,先将Python程序编译成Python字节码,然后由一个专门的Python字节码解释器负责解释执行字节码。
  • python是解释型语言,它通过python解释器实现向底层语言的映射。我们知道python虚拟机是由C语言编写的,所以python程序会转化为C程序而执行。比如,python中的所有对象都会在C中有对应的PyObject结构体。python的list、dict等数据类型也要在C中有对应的表示。而像生成器、迭代器等语法结构需要相应的支持。

5. python解释器种类及特点?

Python是一门解释器语言,代码想运行,必须通过解释器执行,Python存在多种解释器,分别基于不同语言开发,每个解释器有不同的特点,但都能正常运行Python代码,以下是常用的五种Python解释器:

  1. CPython
    当 从Python官方网站下载并安装好Python2.7后,就直接获得了一个官方版本的解释器:Cpython,这个解释器是用C语言开发的,所以叫 CPython,在命名行下运行python,就是启动CPython解释器,CPython是使用最广的Python解释器。
  2. IPython
    IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的,好比很多国产浏览器虽然外观不同,但内核其实是调用了IE。
  3. PyPy
    PyPy是另一个Python解释器,它的目标是执行速度,PyPy采用JIT技术,对Python代码进行动态编译,所以可以显著提高Python代码的执行速度。
  4. Jython
    Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
  5. IronPython
    IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

在Python的解释器中,使用广泛的是CPython,对于Python的编译,除了可以采用以上解释器进行编译外,技术高超的开发者还可以按照自己的需求自行编写Python解释器来执行Python代码,十分的方便!


6. 位和字节的关系?

  • 最小的存储单位称为位(bit):只能容纳两个值(0或1)之一,不能在一个位中存储更多的信息。位是计算机存储的基本单位。
  • 字节(byte)是常用的计算机存储单位。
    字节的标准定义:一个字节均为8位。由于上述所讲每个位或者是0或者是1,所以一个8位的字节包含256种可能的0,1组合。
  • 对于一种给定的计算机设计,字(word)是自然的存储单位。
    一个英文字符和英文标点占用一个字节,一个中文字符和中文标点占用2个字节。

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

  • utf-8中一个字母或者数字等于一个字节,一个汉字等于3个字节,表情等于4个字节

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)

英文和数字占一个字节
中文占一个字符,也就是两个字节
字符 不等于 字节。
字符(char)是 Java 中的一种基本数据类型,由 2 个字节组成,范围从 0 开始,到 2^16-1。
字节是一种数据量的单位,一个字节等于 8 位。所有的数据所占空间都可以用字节数来衡量。例如一个字符占 2 个字节,一个 int 占 4 个字节,一个 double 占 8 个字节 等等。
1字符=2字节;
1Byte=8bit
1k=2^10;b:位;B:字节1kb=1024 位1kB=1024 字节。


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

  1. 代码编排

    1. 缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
    2. 每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。
    3. 类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。
  2. 文档编排

    1. 模块内容的顺序:模块说明和docstring—import—globals&constants—其他定义。其中import部分,又按标准、三方和自己编写顺序依次排放,之间空一行。
    2. 不要在一句import中多个库,比如import os, sys不推荐。
    3. 如果采用from XX import XX引用库,可以省略‘module.’,都是可能出现命名冲突,这时就要采用import XX。
  3. 空格的使用

    • 总体原则,避免不必要的空格。
    1. 各种右括号前不要加空格。
    2. 逗号、冒号、分号前不要加空格。
    3. 函数的左括号前不要加空格。如Func(1)。
    4. 序列的左括号前不要加空格。如list[2]。
    5. 操作符左右各加一个空格,不要为了对齐增加空格。
    6. 函数默认参数使用的赋值符左右省略空格。
    7. 不要将多句语句写在同一行,尽管使用‘;’允许。
    8. if/for/while语句中,即使执行语句只有一句,也必须另起一行。
  4. 注释

    • 总体原则,错误的注释不如没有注释。所以当一段代码发生变化时,第一件事就是要修改注释!
    • 注释必须使用英文,最好是完整的句子,首字母大写,句后要有结束符,结束符后跟两个空格,开始下一句。如果是短语,可以省略结束符。
    1. 块注释,在一段代码前增加的注释。在‘#’后加一空格。段落之间以只有‘#’的行间隔。
    2. 行注释,在一句代码后加注释。比如:x = x + 1 # Increment x
      但是这种方式尽量少使用。
    3. 避免无谓的注释。
  5. 文档描述

    1. 为所有的共有模块、函数、类、方法写docstrings;非共有的没有必要,但是可以写注释(在def的下一行)。
    2. 如果docstring要换行,用三引号。
  6. 命名规范

    • 总体原则,新编代码必须按下面命名风格进行,现有库的编码尽量保持风格。
    1. 尽量单独使用小写字母‘l’,大写字母‘O’等容易混淆的字母。
    2. 模块命名尽量短小,使用全部小写的方式,可以使用下划线。
    3. 包命名尽量短小,使用全部小写的方式,不可以使用下划线。
    4. 类的命名使用CapWords的方式,模块内部使用的类采用_CapWords的方式。
    5. 异常命名使用CapWords+Error后缀的方式。
    6. 全局变量尽量只在模块内有效,类似C语言中的static。实现方法有两种,一是all机制;二是前缀一个下划线。
    7. 函数命名使用全部小写的方式,可以使用下划线。
    8. 常量命名使用全部大写的方式,可以使用下划线。
    9. 类的属性(方法和变量)命名使用全部小写的方式,可以使用下划线。
    10. 类的属性有3种作用域public、non-public和subclass API,可以理解成C++中的public、private、protected,non-public属性前,前缀一条下划线。
    11. 类的属性若与关键字名字冲突,后缀一下划线,尽量不要使用缩略等其他方式。
    12. 为避免与子类属性命名冲突,在类的一些属性前,前缀两条下划线。比如:类Foo中声明__a,访问时,只能通过Foo._Foo__a,避免歧义。如果子类也叫Foo,那就无能为力了。
    13. 类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。
  7. 编码建议

    1. 编码中考虑到其他python实现的效率等问题,比如运算符‘+’在CPython(Python)中效率很高,都是Jython中却非常低,所以应该采用.join()的方式。
    2. 尽可能使用‘is’‘is not’取代‘==’,比如if x is not None 要优于if x。
    3. 使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自Exception。
    4. 异常中不要使用裸露的except,except后跟具体的exceptions。
    5. 异常中try的代码尽可能少。比如:
try:
value = collection[key]
except KeyError:
return key_not_found(key)
else:
return handle_value(value)

要优于

try:
# Too broad!
return handle_value(collection[key])
except KeyError:
# Will also catch KeyError raised by handle_value()
return key_not_found(key)
  1. 使用startswith() and endswith()代替切片进行序列前缀或后缀的检查。比如:
    Yes: if foo.startswith('bar'):优于
    No: if foo[:3] == 'bar':
  2. 使用isinstance()比较对象的类型。比如
    Yes: if isinstance(obj, int): 优于
    No: if type(obj) is type(1):
  3. 判断序列空或不空,有如下规则
    Yes: if not seq:
    if seq:
    优于
    No: if len(seq)
    if not len(seq)
    1. 字符串不要以空格收尾。
    2. 二进制数据判断使用 if boolvalue的方式。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • 第一部分 Python基础篇(80题) 1、为什么学习Python? Python相对于其他编程语言有很多优点: ...
    清清子衿木子水心阅读 1,705评论 0 1
  • 本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入...
    小小不懂11阅读 3,418评论 2 30
  • 一、 Python介绍 1.1、Python现状 python的创始人为吉多·范罗苏姆(Guido van Ros...
    Horne阅读 884评论 0 51
  • 今晚和超哥吃了久违的串串香,喝了2瓶鸡尾酒,在好几个小时的胡言乱语下,我很佩服我自己,依然能和邋遢的工作对接,和很...
    行走的骨头架阅读 369评论 0 1
  • Day2,8月29日作业:拍摄两张照片,早上七点和晚上七点的天空。 看到Linda老师布置的作业,第一个念头...
    飞云品文阅读 253评论 0 0