python基础面试题
1、为什么学习Python?
2、通过什么途径学习的Python?
3、Python和Java、PHP、C、C#、C++等其他语言的对比?
PHP是用来做网站的,其实从技术角度,属于第一代的后端技术(植入式脚本技术),现在最新的后端技术,已经发展到第三代了(MVC架构),因此从技术上讲,PHP早该过时了,但由于市场需求的存在,所以它依然是做网站后台的主流之一。。就类似于WindowsXP一样,技术上太淘汰了,但市场却依然是主流,普及度依然很高。缺点一大堆,但又个最主要的优势,就是简单。。。MVC虽好,但学习难度远比PHP要高的多。php是世界上最好的语言xd
C++是面向对象的C语言,由于偏底层,所以性能非常高,仅次于C语言,主要用在一个要求高性能的领域。。。这个不好说,因为实际需求上,用处挺杂的,而且也确实不太好学。。因为它把C语言面向过程的那套东西,和JAVA面向对象的那些东西,堆砌到了一起。。也就同时把两种完全不同的思想揉在了一起。。个人的理解是,它就像周星驰电影里的那个“要你命3000”,把苍蝇拍,杀虫剂,手枪,手榴弹,灭鼠灵,用一根麻绳串在一起。。。杀虫可以,灭鼠可以,杀人也可以,堪称无所不能。。。但用起来,真是麻烦死了。。所以对于很多人来说,认可它的地位,承认它的功能,但敬而远之。
JAVA是今天真正意义上的大道正宗,名门正派。。。。丐帮有降龙十八掌,华山派有独孤九剑。。但你却很难说出,少林派有什么武功特别强。。而它又是公认的名门正宗。。。这其实就已经说明问题了,JAVA没有什么特别强的方面,但每个方面都不弱。。整体平均值,便非常高。。JAVA还有一个比较突出的优势,就是它是安卓系统的官方开发语言。。既然说到了少林,就不得不提一下武当。。。那就是微软的官方语言C#。。。.C#和JAVA相比,其实80%都是一样的。。几乎等于学一门,会两门,C#比JAVA稍微简单一些,IDE也好一些,其实比JAVA更适合新手,但由于之前不能跨平台,所以流行度比JAVA低,但确是游戏开发行业的第一大语言。。JAVA与C#基本可以看成一门语言的两种方言。。英式英语和美式英语的差别一样。。说到底还是半斤八两。。。一个是传统应用和安卓系统的第一大语言,一个是WINDOWS系统和游戏开发的第一大语言。。而且学一门会两门,你还要求啥?
6、位和字节的关系?
位(bit),数据存储是以“字节”(Byte)为单位,数据传输是以大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位,是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。
7、b、B、KB、MB、GB 的关系?
8、请至少列举5个 PEP8 规范(越多越好)。
9、通过代码实现如下转换:
二进制转换成十进制:v = “0b1111011”
十进制转换成二进制: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递归的最大层数?
python默认递归最大的层数是998 不过这个值是可以通过sys.setrecursionlimit(1000)来设置
12、求结果:
v1 = 1or3
1
v2 = 1and3 =====> 3
v3 = 0and2and1 =======> 0
v4 = 0and2or1========>0 and 2 or1
v5 = 0and2or1or4
1
v6 = 0orFlase and1
False
13、ascii、unicode、utf-8、gbk 区别?
14、字节码和机器码的区别?
15、三元运算规则以及应用场景?
16、列举 Python2和Python3的区别?
(1)Print
在 Python 2 中, print 被视为一个语句而不是一个函数,这是一个典型的容易弄混的地方,因为在 Python 中的许多操作都需要括号内的参数来执行。如果在 Python 2 中你想要你的控制台输出 ”hellow word”,你应该写下这样的 print 语句:
print "hellow word"
在使用 Python 3 时,print()会被显式地视为一个函数,因此要输出上面相同的字符串,你可以使用这种非常简单且易于使用的函数语法
print("hellow word")
这种改变使得 Python 的语法更加一致,并且在不同的 print 函数之间进行切换更加容易。就方便性而言,print()语法也与 Python 2.7 向后兼容,因此您的 Python 3 print()函数可以在任一版本中运行。
(2)整数的除法
在 Python 2 中,您键入的任何不带小数的数字,将被视为整数的编程类型。虽然乍看起来这似乎是一个简单的处理编程类型的方法,但有时候当你试图除以整数以期望获得一个带小数位的答案(称为浮点数),如:
5 / 2 = 2.5
然而,在 Python 2 中,整数是强类型的,并且不会变成带小数位的浮点数,即使这样做具有直观上的意义。
当除法/符号的任一侧的两个数字是整数时,Python 2进行底除法,使得对于商x,返回的数字是小于或等于x的最大整数。这意味着当你写下 5 / 2 来对这两个数字相除时,Python 2.7 将返回最大的小于或等于 2.5 的整数,在这种情形下:
a = 5 / 2print a#a=2
-
a = 5 / 2
-
print a
-
#a=2
为解决这个问题,你可以在 5.0 / 2.0 中添加小数位,以得到预期的答案 2.5。
在 Python 3 中,整数除法变得更直观,如
-
a = 5 / 2
-
print(a)
-
#a=2.5
你也可以使用 5.0 / 2.0 返回 2.5,但是如果你想做底层划分,你应该使用 “//” 这样的 Python 3 语法,像这样:
-
b = 5 // 2
-
print(b)
-
#b=2
在 Python 3 中的这种修改使得整数除法更为直观,并且它的特点是不能向后兼容 Python 2.7。
(3)支持 Unicode
当编程语言处理字符串类型时,也就是一个字符序列,它们可以用几种不同的方式来做,以便计算机将数字转换为字母和其他符号。
Python 2 默认使用 ASCII 字母表,因此当您输入“Hello word!”时, Python 2 将以 ASCII 格式处理字符串。被限定为在多种扩展形式上的数百个字符,用ASCII 进行字符编码并不是一种非常灵活的方法,特别是使用非英语字符时。
要使用更通用和更强大的Unicode字符编码,这种编码支持超过128,000个跨越现今和历史的脚本和符号集的字符,你必须输入
u“Hello,word!” #前缀 u 代表 Unicode。
Python 3 默认使用 Unicode,这节省了程序员多余的开发时间,并且您可以轻松地在程序中直接键入和显示更多的字符。因为 Unicode 支持更强大的语言字符多样性以及 emoji 的显示,所以将它作为默认字符编码来使用,能确保全球的移动设备在您的开发项目中都能得到支持。
(4)后续发展
Python 3 和 Python 2 之间的最大区别不是语法上的,而是事实上 Python 2.7 将在 2020 年失去后续的支持,Python 3 将继续开发更多的功能和修复更多的错误。
最近的发展包括格式化的字符串,类创建的简单定制,和用一种更干净的句法方式来处理矩阵乘法。
Python 3 的后续开发意味着,开发人员可以对问题被及时解决抱有信心,并且随着时间的推移更多的功能将被添加进来,程序也会变得更加有效。
17、用一行代码实现数值交换:a = 1 b = 2
a,b = b,a
18、Python3和Python2中 int 和 long的区别?
int(符号整数):通常被称为是整数或整数,没有小数点的正或负整数
long(长整数):无限大小的整数,这样写整数和一个大写或小写的L。
19、xrange和range的区别?
1.range和xrange都是在循环中使用,输出结果一样。
2.range返回的是一个list对象,而xrange返回的是一个生成器对象(xrange object)。
3.xrange则不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少,因而性能非常好。
注意:Python 3.x已经去掉xrange,全部用range代替。
20、文件操作时:xreadlines和readlines的区别?
二者使用时相同,但返回类型不同,xreadlines返回的是一个生成器,readlines返回的是list
21、列举布尔值为False的常见值?
0 , [ ] , " , ( ) , { }
22、字符串、列表、元组、字典每个常用的5个方法?
字符串:
-
words = ‘today is a wonderfulday‘
-
print(words.strip(‘today‘))#如果strip方法指定一个值的话,那么会去掉这两个值
-
print(words.count(‘a‘))#统计字符串出现的次数
-
print(words.index(‘is‘))#找下标
-
print(words.index(‘z‘))#找下标如果元素不找不到的话,会报错
-
print(words.find(‘z‘))#找下标,如果元素找不到的话,返回-1
列表:
-
sample_list = [‘a‘,1,(‘a‘,‘b‘)] #创建列表
-
sample_list = [‘a‘,‘b‘,0,1,3] # Python 列表操作
-
value_start = sample_list[0] #得到列表中的某一个值
-
end_value = sample_list[-1] #得到列表中的某一个值
-
del sample_list[0] #删除列表的第一个值
-
sample_list[0:0] = [‘sample value‘] #在列表中插入一个值
元祖:
-
#元组也是一个list,他和list的区别是元组的元素无法修改
-
tuple1 = (2,3,4,5,6,4,7)
-
print(type(tuple1))
-
print(tuple1[:7])
-
print(tuple1[:5:-1])
字典
-
dict = {‘ob1‘:‘computer‘, ‘ob2‘:‘mouse‘, ‘ob3‘:‘printer‘}
-
#每一个元素是pair,包含key、value两部分。key是Integer或string类型,value 是任意类型。键是唯一的,字典只认最后一个赋的键值。
-
-
D.get(key, 0) #同dict[key],多了个没有则返回缺省值,0。[]没有则抛异常
-
D.has_key(key) #有该键返回TRUE,否则FALSE
-
D.keys() #返回字典键的列表
-
D.values()
-
D.items()
23、lambda表达式格式以及应用场景?
lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。
lambda所表示的匿名函数的内容应该是很简单的,如果复杂的话,干脆就重新定义一个函数了,使用lambda就有点过于执拗了。
lambda就是用来定义一个匿名函数的,如果还要给他绑定一个名字的话,就会显得有点画蛇添足,通常是直接使用lambda函数。如下所示:
-
# 需求:将列表中的元素按照绝对值大小进行升序排列
-
list1 = [3,5,-4,-1,0,-2,-6]
-
print(sorted(list1, key=lambda x: abs(x))) #[0, -1, -2, 3, -4, 5, -6]
24、pass的作用?
1、空语句
2、保证格式完整
3、占位语句
25、*arg和**kwarg作用
所以从以上的示例可以看到*arg和**kwarg的作用为:
1、函数调用里的*arg和**kwarg:
(1)*arg:元组或列表“出现”
**kwarg:字典“出没”
(2)分割参数
2、函数定义时传的*arg /**kwarg:
(1)接收参数
26、is和==的区别
==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等
is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。
27、简述Python的深浅拷贝以及应用场景?
字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝指拷贝数据集合的所有层。所以对于只有一层的数据集合来说深浅拷贝的意义是一样的,比如字符串,数字,还有仅仅一层的字典、列表、元祖等.
应用场景:比如在CMDB系统中,我们定义了一个报警模版call给所有的服务器使用,此时有一批特殊应用的服务器需要不通的报警参数,我们既不想单独新建模版来一个一个添加报警参数,又不想修改默认模版而影响其他机器的报警阈值。此时我们就需要用深拷贝来完成。
28、Python垃圾回收机制?
Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题。通过“分代回收”(generation collection)以空间换取时间来进一步提高垃圾回收的效率。
29、Python的可变类型和不可变类型?
可变:列表、字典
对于可变类型,无论创建多少个可变类型,只要值相同,都不指向同个内存地址(除非进行复制操作,那么他们将会指向同一个地址)。
不可变:数字、字符串、元祖
对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收)。
30、求结果:
-
v = dict.fromkeys([ 'k1', 'k2'],[])
-
v[‘k1’]. append( 666)
-
print(v)
-
v[‘k1’] = 777
-
print(v)
-
结果为:
<<<{'k1': [666], 'k2': [666]}
31、求结果
[6, 6, 6, 6]
32、列举常见的内置函数?
1、abs() 此函数返回数字的绝对值。
a = 5 b = -10 print(abs(a)) #输出3 print(abs(b)) #输出5
2、all() 此函数用于判断给定的可迭代参数 iterable 中的所有元素是否都不为 0、都不为False 或者iterable都 为空,如果是返回 True,否则返回 False。
print(all(['a', 'b', 'c', 'd'])) # True print(all(['a', 'b', '', 'd'])) # False print(all([0, 1,2, 3])) # False print(all(('a', 'b', '', 'd'))) # False print(all((0, 1,2, 3))) # False print(all([])) # True print(all(())) # True
3、any() 函数用于判断给定的可迭代参数 iterable 是否全部为空对象,如果都为空、都为0、或者都为false,则返回 False,如果不都为空、不都为0、不都为false,则返回 True。
print(any(['a', 'b', 'c', 'd'])) # True print(any(['a', 'b', '', 'd'])) # True print(any([0, 1,2, 3])) # True print(any(('a', 'b', '', 'd'))) # True print(any((0, 1,2, 3))) # True print(any([])) # False print(any(())) # False
4、bin() 返回一个整数 int 或者长整数 long int 的二进制表示。
print(bin(10)) #0b1010 print(bin(20)) #0b10100
5、bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False。
传入布尔类型时,按原值返回
参数如果缺省,则返回False
传入字符串时,空字符串返回False,否则返回True
传入数值时,0值返回False,否则返回True
传入元组、列表、字典等对象时,元素个数为空返回False,否则返回True.
print(bool()) #False print(bool(True)) #True print(bool("")) #False print(bool("123")) #True print(bool(0)) #False print(bool(1)) #True print(bool([])) #False 若元祖和字典为空时 也为False ,不为空 则为True
6、chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。(只能输入数字)
print(chr(65)) #A print(chr(97)) #a print(chr(100)) #d
7、cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。(python3已经删除了)
8、compile() 函数将一个字符串编译为字节代码。语法:compile(source, filename, mode[, flags[, dont_inherit]])
import re pattern=re.compile('[a-zA-Z]') result=pattern.findall('as3SiOPdj#@23awe') print(result)
9、complex(real,imag) 函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。
print(complex(1, 2)) #(1 + 2j) print(complex(1)) #(1 + 0j) print(complex("3")) #(3+0j)
10、dict() 函数用于创建一个字典。
print(dict(a='a',b='b')) #{'b': 'b', 'a': 'a'}
11、dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
12、python divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
13、enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
14、eval() 函数用来执行一个字符串表达式,并返回表达式的值。
15、execfile() 函数可以用来执行一个文件。
16、float() 函数用于将整数和字符串转换成浮点数。
17、frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
18、getattr() 函数用于返回一个对象属性值。
19、hash() 用于获取取一个对象(字符串或者数值等)的哈希值。
20、help() 函数用于查看函数或模块用途的详细说明。
21、hex() 函数用于将10进制整数转换成16进制整数。
22、id() 函数用于获取对象的内存地址。
23、input() 输入函数
24、int() 函数用于将一个字符串会数字转换为整型。
25、isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
isinstance() 与 type() 区别:
type() 不会认为子类是一种父类类型,不考虑继承关系。
isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()。
26、len() 方法返回对象(字符、列表、元组等)长度或项目个数。
27、list() 方法用于将元组转换为列表。
28、locals() 函数会以字典类型返回当前位置的全部局部变量。
29、long() 函数将数字或字符串转换为一个长整型。
30、max() 方法返回给定参数的最大值,参数可以为序列。
31、memoryview() 函数返回给定参数的内存查看对象(Momory view)。
32、min() 方法返回给定参数的最小值,参数可以为序列。
33、oct() 函数将一个整数转换成8进制字符串。
34、open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。
35、ord() 函数与chr()函数相反,输入字符返回数字
36、pow() 方法返回 xy(x的y次方) 的值。函数是计算x的y次方,如果z在存在,则再对结果进行取模,其结果等效于pow(x,y) %z
37、print() 输出函数
38、range() 函数可创建一个整数列表,一般用在 for 循环中。
39、reload() 用于重新载入之前载入的模块。
40、everse() 函数用于反向列表中元素。
41、round() 方法返回浮点数x的四舍五入值。
42、set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
43、str() 函数将对象转化字符串
44、sum() 方法对系列进行求和计算。
45、tuple() 元组 tuple() 函数将列表转换为元组。
46、type() 返回对象类型。
47、unichr() 该函数和chr()函数功能基本一样, 只不过是返回 unicode 的字符。
48、vars() 函数返回对象object的属性和属性值的字典对象。
49、xrange() 函数用法与 range 完全相同,所不同的是生成的不是一个数组,而是一个生成器。
50、__import__() 函数用于动态加载类和函数 。如果一个模块经常变化就可以使用 __import__() 来动态载入。
33、filter、map、reduce的作用?
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表
-
In [11]: for i in map(lambda x:x*x,[1,2,3,4]):
-
...: print(i)
-
...:
-
1
-
4
-
9
-
16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
-
In [12]: def is_odd(n):
-
...: return n % 2 == 1
-
-
In [15]: for i in filter(is_odd,[1,2,3]):
-
...: print(i)
-
...:
-
1
-
3
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 fucntools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数
-
-
In [19]: from functools import reduce
-
-
In [20]: def add(x,y):
-
...: return x+y
-
...: reduce(add,range(1,101))
-
...:
-
Out[20]: 5050
34、一行代码实现9*9乘法表
print ('\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))
35、如何安装第三方模块?以及用过哪些第三方模块?
在Python中,安装第三方模块,是通过setuptools这个工具完成的。Python有两个封装了setuptools的包管理工具:easy_install和pip。目前官方推荐使用pip
如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了。
如果你正在使用Windows,确保安装时勾选了pip和Add python.exe to Path。
在命令提示符窗口下尝试运行pip,如果Windows提示未找到命令,可以重新运行安装程序添加pip。
现在,让我们来安装一个第三方库——bs4 pip install bs4
用过的第三方模块 bs4/pymysql/redis/lxml/tkinter/urllib/requests等
36、至少列举8个常用模块都有那些?
Django Flask Scrapy Tkinter Pygame numpy pillow-python pymysql pip
37、re的match和search区别?
match只找字符串的开始位置,而search是全盘查找
38、什么是正则的贪婪匹配?
1、贪婪匹配
总是尝试匹配尽可能多的字符
2、非贪婪匹配
是尝试匹配尽可能少的字符
39、求结果: a. [ i % 2 for i in range(10) ] b. ( i % 2 for i in range(10) )
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
<generator object <genexpr> at 0x000000000552E938>
40、求结果: a. 1 or 2 b. 1 and 2 c. 1 < (2==2) d. 1 < 2 == 2
1 or 2 ===>11 and 2===>21 < (2==2) =====>False1<2==2 ======>True
41、def func(a,b=[]) 这种写法有什么坑?
def func(a,b=[]):
b.append(a)
print(b)
func(1)
func(1)
func(1)
func(1)
输出:
[1]
[1, 1]
[1, 1, 1]
[1, 1, 1, 1]
函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第二次执行还是用第一次执行的时候实例化的地址存储,所以三次执行的结果就是 [1, 1, 1] ,想每次执行只输出[1] ,默认参数应该设置为None。
42、如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?
a = '1,2,3' listA= a.split(',') print(listA)
43、如何实现[‘1’,’2’,’3’]变成[1,2,3] ?
a= ['1', '2', '3'] b=[int(i) for i in a] print(b)
44、比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?
a = [1,2,3] 和 b = [(1),(2),(3) ] 都是列表 b = [(1,),(2,),(3,) ] 是列表里面套元组
45、如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?
a= [i*i for i in range(1,11)] print(a)
46、一行代码实现删除列表中重复的值 ?
a = [1,2,3,4,5,1,2,3,4,5] b=set(a) print(b)
47、如何在函数中设置一个全局变量 ?
def a(): global b b=123 a() print(b)
48、logging模块的作用?以及应用场景?
可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;
print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则可以由开发者决定将信息输出到什么地方,以及怎么输出;
49、请用代码简答实现stack 。
class Stack(object): def __init__(self): self.stack = [] def push(self, value): # 进栈 self.stack.append(value) def pop(self): #出栈 if self.stack: self.stack.pop() else: raise LookupError('stack is empty!') def is_empty(self): # 如果栈为空 return bool(self.stack) def top(self): #取出目前stack中最新的元素 return self.stack[-1]
50、常用字符串格式化哪几种?
tuple形式
print 'hello %s and %s' % ('df', 'another df')
字典形式
可以和json文件相互转换,所以,当配置文件使用字符串设置的时候,就显得相当方便。
print 'hello %(first)s and %(second)s' % {'first': 'df', 'second': 'another df'}
format形式
print 'hello {first} and {second}'.format(first='df', second='another df')
51、简述 生成器、迭代器、可迭代对象 以及应用场景?
52、用Python实现一个二分查找的函数。
53、谈谈你对闭包的理解?
54、os和sys模块的作用?
sys模块主要是用于提供对python解释器相关的操作
OS模块是Python标准库中的一个用于访问操作系统功能的模块,使用OS模块中提供的接口,可以实现跨平台访问
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作用以及应用场景?