第一部分 Python基础篇(80题)
1、为什么学习Python?
上一份工作需要使用Python,并且目前Python是比较热门的脚本语言,开发简介方便。
2、通过什么途径学习的Python?
3、Python和Java、PHP、C、C#、C++等其他语言的对比?
C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言。C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,但是,由于这些改进增加语言的复杂度,也为另一部分所诟病。Java则吸取了C++的教训,取消了指针操作,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C++/C。一般而言,C,C++,java被视为同一系的语言,它们长期占据着程序使用榜的前三名。
C#语言,C#是一种面向对象的、运行于.NET Framework之上的高级程序设计语言。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角。
Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。
PHP(PHP: Hypertext Preprocessor的缩写,中文名:“PHP:超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP支持几乎所有流行的数据库以及操作系统;最重要的是PHP可以用C、C++进行程序的扩展。
python语言,是一种面向对象、直译式计算机程序设计语言,Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写。
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很多人还把Python作为一种“胶水语言”(glue language)使用。使用Python将其他语言编写的程序进行集成和封装
4、简述解释型和编译型编程语言?
编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。
解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!
区别:
编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。
解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好。
通俗的讲,编译语言是在编译后可以直接运行,而解释语言的执行需要一个解释环境。
Java很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。
5、Python解释器种类以及特点?
当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。
由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。
CPython
当我们从Python官方网站下载并安装好Python 3.5后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。
CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。
IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
小结
Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
6、位和字节的关系?
1byte=8bit
最小的存储单位称为位(bit):
只能容纳两个值(0或1)之一,不能在一个位中存储更多的信息。位是计算机存储的基本单位。
字节(byte)是常用的计算机存储单位。
字节的标准定义:一个字节均为8位。由于上述所讲每个位或者是0或者是1,所以一个8位的字节包含256种可能的0,1组合
7、b、B、KB、MB、GB 的关系?
1b=1024B
1B=1024KB
1KB=1024MB
1MB=1024GB
8、请至少列举5个 PEP8 规范(越多越好)。
这里不具体阐述,丢个连接自己体会。
9、通过代码实现如下转换:
二进制转换成十进制:v = “0b1111011”
二进制数转换成十进制数:二进制数从右向左每位数乘以2的次方(从0开始,从右向左依次+1),然后相加求和即可
如:0101转成十进制为:1*2^0+0*2^1+1*2^2+0*2^3 =1+0+4+0=5
算法实现:
#coding=utf-8
b=raw_input("请输入一个二进制数:".decode("utf-8").encode("gbk"))
sum=0
for i in range(len(b)):
sum+=int(b[len(b)-1-i])*pow(2,i)
print u"转换成十进制数是:",sum
十进制转换成二进制:v = 18
八进制转换成十进制:v = “011”
十进制转换成八进制:v = 30
十六进制转换成十进制:v = “0x12”
十进制转换成十六进制:v = 87
10、请编写一个函数实现将IP地址转换成一个整数。
如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001
12 00001100
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
11、python递归的最大层数?
12、求结果:
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 Flase and 1
13、ascii、unicode、utf-8、gbk 区别?
14、字节码和机器码的区别?
15、三元运算规则以及应用场景?
16、列举 Python2和Python3的区别?
17、用一行代码实现数值交换:
a = 1
b = 2
18、Python3和Python2中 int 和 long的区别?
19、xrange和range的区别?
20、文件操作时:xreadlines和readlines的区别?
21、列举布尔值为False的常见值?
22、字符串、列表、元组、字典每个常用的5个方法?
23、lambda表达式格式以及应用场景?
24、pass的作用?
25、*arg和**kwarg作用
26、is和==的区别
27、简述Python的深浅拷贝以及应用场景?
28、Python垃圾回收机制?
29、Python的可变类型和不可变类型?
30、求结果:
v = dict.fromkeys([‘k1’,’k2’],[])
v[‘k1’].append(666)
print(v)
v[‘k1’] = 777
print(v)
31、求结果:
32、列举常见的内置函数?
33、filter、map、reduce的作用?
34、一行代码实现9*9乘法表
35、如何安装第三方模块?以及用过哪些第三方模块?
36、至少列举8个常用模块都有那些?
37、re的match和search区别?
38、什么是正则的贪婪匹配?
39、求结果: a. [ i % 2 for i in range(10) ] b. ( i % 2 for i in range(10) )
40、求结果: a. 1 or 2 b. 1 and 2 c. 1 < (2==2) d. 1 < 2 == 2
41、def func(a,b=[]) 这种写法有什么坑?
42、如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?
43、如何实现[‘1’,’2’,’3’]变成[1,2,3] ?
44、比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?
45、如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?
46、一行代码实现删除列表中重复的值 ?
47、如何在函数中设置一个全局变量 ?
48、logging模块的作用?以及应用场景?
49、请用代码简答实现stack 。
50、常用字符串格式化哪几种?
51、简述 生成器、迭代器、可迭代对象 以及应用场景?
52、用Python实现一个二分查找的函数。
53、谈谈你对闭包的理解?
54、os和sys模块的作用?
55、如何生成一个随机数?
56、如何使用python删除一个文件?
57、谈谈你对面向对象的理解?
58、Python面向对象中的继承有什么特点?
59、面向对象深度优先和广度优先是什么?
60、面向对象中super的作用?
61、是否使用过functools中的函数?其作用是什么?
62、列举面向对象中带爽下划线的特殊方法,如:new、init
63、如何判断是函数还是方法?
64、静态方法和类方法区别?
65、列举面向对象中的特殊成员以及应用场景
66、1、2、3、4、5 能组成多少个互不相同且无重复的三位数
67、什么是反射?以及应用场景?
68、metaclass作用?以及应用场景?
69、用尽量多的方法实现单例模式。
70、装饰器的写法以及应用场景。
71、异常处理写法以及如何主动跑出异常(应用场景)
72、什么是面向对象的mro
73、isinstance作用以及应用场景?
74、写代码并实现:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would
have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1]
75、json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型?
76、json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?
77、什么是断言?应用场景?
78、有用过with statement吗?它的好处是什么?
79、使用代码实现查看列举目录下的所有文件。
80、简述 yield和yield from关键字。