1、Python怎样完成单例情势?
Python有两种体式格局可以完成单例情势,下面两个例子运用了差别的体式格局完成单例情势:
1、
class Singleton(type): def __init__(cls, name, bases, dict): super(Singleton, cls).__init__(name, bases, dict) cls.instance = None def __call__(cls, *args, **kw): if cls.instance is None: cls.instance = super(Singleton, cls).__call__(*args, **kw) return cls.instance class MyClass(object): __metaclass__ = Singleton print MyClass() print MyClass()
运用decorator来完成单例情势
def singleton(cls): instances = {} def getinstance(): if cls not in instances: instances[cls] = cls() return instances[cls] return getinstance @singleton class MyClass: …
2:什么是lambda函数?
Python许可你定义一种单行的小函数。定义lambda函数的情势以下:labmda 参数:表达式lambda函数默许返回表达式的值。你也可以将其赋值给一个变量。lambda函数可以接收恣意个参数,包括可选参数,然则表达式只要一个:
>>> g = lambda x, y: x*y >>> g(3,4) 12 >>> g = lambda x, y=0, z=0: x+y+z >>> g(1) 1 >>> g(3, 4, 7) 14
也可以直接运用lambda函数,不把它赋值给变量:
>>> (lambda x,y=0,z=0:x+y+z)(3,5,6) 14
假如你的函数非常简朴,只要一个表达式,不包括敕令,可以斟酌lambda函数。不然,你照样定义函数才对,毕竟函数没有这么多限定。
3:Python是怎样举行范例转换的?
Python供应了将变量或值从一种范例转换成另一种范例的内置函数。int函数可以将相符数学花样数字型字符串转换成整数。不然,返回毛病信息。
>>> int(”34″) 34 >>> int(”1234ab”) #不能转换成整数 ValueError: invalid literal for int(): 1234ab
函数int也可以把浮点数转换成整数,但浮点数的小数部份被截去。
>>> int(34.1234) 34 >>> int(-2.46) -2
函数°oat将整数和字符串转换成浮点数:
>>> float(”12″) 12.0 >>> float(”1.111111″) 1.111111
函数str将数字转换成字符:
>>> str(98) ‘98′ >>> str(”76.765″) ‘76.765′
整数1和浮点数1.0在python中是差别的。虽然它们的值相称的,但却属于差别的范例。这两个数在盘算机的存储情势也是不一样。
4:Python怎样定义一个函数
函数的定义情势以下:
def <name>(arg1, arg2,… argN): <statements>
函数的名字也必需以字母开首,可以包括下划线“ ”,但不能把Python的关键字定义成函数的名字。函数内的语句数目是恣意的,每一个语句至少有一个空格的缩进,以示意此语句属于这个函数的。缩进终了的处所,函数天然终了。
下面定义了一个两个数相加的函数:
>>> def add(p1, p2): print p1, “+”, p2, “=”, p1+p2 >>> add(1, 2) 1 + 2 = 3
函数的目标是把一些庞杂的操纵隐蔽,来简化顺序的构造,使其轻易浏览。函数在挪用前,必需先定义。也可以在一个函数内部定义函数,内部函数只要在外部函数挪用时才可以被实行。顺序挪用函数时,转到函数内部实行函数内部的语句,函数实行终了后,返回到它脱离顺序的处所,实行顺序的下一条语句。
5:Python是怎样举行内存治理的?
Python的内存治理是由Python得诠释器担任的,开辟人员可以从内存治理事件中解放出来,致力于应用顺序的开辟,如许就使得开辟的顺序毛病更少,顺序更硬朗,开辟周期更短
6:怎样反序的迭代一个序列?
how do I iterate over a sequence in reverse order
假如是一个list, 最快的解决方案是:
list.reverse() try: for x in list: “do something with x” finally: list.reverse()
假如不是list, 最通用然则稍慢的解决方案是:
for i in range(len(sequence)-1, -1, -1): x = sequence[i] <do something with x>
7:Python内里怎样完成tuple和list的转换?
函数tuple(seq)可以把一切可迭代的(iterable)序列转换成一个tuple, 元素稳定,排序也稳定。
比方,tuple([1,2,3])返回(1,2,3), tuple(’abc’)返回(’a’.’b',’c').假如参数已经是一个tuple的话,函数不做任何拷贝而直接返回本来的对象,所以在不确定对象是否是tuple的时刻来挪用tuple()函数也不是很消耗的。
函数list(seq)可以把一切的序列和可迭代的对象转换成一个list,元素稳定,排序也稳定。
比方 list([1,2,3])返回(1,2,3), list(’abc’)返回['a', 'b', 'c']。假如参数是一个list, 她会像set[:]一样做一个拷贝
8:Python面试题:请写出一段Python代码完成删除一个list内里的反复元素
可以先把list从新排序,然后从list的末了最先扫描,代码以下:
if List: List.sort() last = List[-1] for i in range(len(List)-2, -1, -1): if last==List[i]: del List[i] else: last=List[i]
9:Python文件操纵的面试题
怎样用Python删除一个文件?
运用os.remove(filename)或许os.unlink(filename);
Python怎样copy一个文件?
shutil模块有一个copyfile函数可以完成文件拷贝
10:Python内里怎样生成随机数?
规范库random完成了一个随机数生成器,实例代码以下:
import random random.random()
它会返回一个随机的0和1之间的浮点数
11:怎样用Python来发送邮件?
可以运用smtplib规范库。
以下代码可以在支撑SMTP监听器的服务器上实行。
import sys, smtplib fromaddr = raw_input(”From: “) toaddrs = raw_input(”To: “).split(’,') print “Enter message, end with ^D:” msg = ” while 1: line = sys.stdin.readline() if not line: break msg = msg + line # 发送邮件部份 server = smtplib.SMTP(’localhost’) server.sendmail(fromaddr, toaddrs, msg) server.quit()
12:Python内里怎样拷贝一个对象?
平常来说可以运用copy.copy()要领或许copy.deepcopy()要领,险些一切的对象都可以被拷贝
一些对象可以更轻易的拷贝,Dictionaries有一个copy要领:
newdict = olddict.copy()
13:有无一个东西可以协助查找python的bug和举行静态的代码剖析?
有,PyChecker是一个python代码的静态剖析东西,它可以协助查找python代码的bug, 会对代码的庞杂度和花样提出正告
Pylint是别的一个东西可以举行coding standard搜检。
14:怎样在一个function内里设置一个全局的变量?
解决要领是在function的最先插进去一个global声明:
def f() global x
15:用Python婚配HTML tag的时刻,<.>和<.?>有什么区分?
当反复婚配一个正则表达式时刻, 比方<.*>, 当顺序实行婚配的时刻,会返回最大的婚配值
比方:
import re s = ‘<html><head><title>Title</title>’ print(re.match(’<.*>’, s).group())
会返回一个婚配而不是
而
import re s = ‘<html><head><title>Title</title>’ print(re.match(’<.*?>’, s).group())
则会返回
<.>这类婚配称作贪婪婚配 <.?>称作非贪婪婚配
16:Python内里search()和match()的区分?
match()函数只检测RE是否是在string的最先位置婚配, search()会扫描全部string查找婚配, 也就是说match()只要在0位置婚配胜利的话才有返回,假如不是最先位置婚配胜利的话,match()就返回none
比方:
print(re.match(’super’, ’superstition’).span())
会返回(0, 5)
而
print(re.match(’super’, ‘insuperable’))
则返回None
search()会扫描全部字符串并返回第一个胜利的婚配
比方:
print(re.search(’super’, ’superstition’).span())
返回(0, 5)
print(re.search(’super’, ‘insuperable’).span())
返回(2, 7)
17:怎样用Python来举行查询和替代一个文本字符串?
可以运用sub()要领来举行查询和替代,sub要领的花样为:sub(replacement, string[, count=0])
replacement是被替代成的文本
string是须要被替代的文本
count是一个可选参数,指最大被替代的数目
例子:
import re p = re.compile(’(blue|white|red)’) print(p.sub(’colour’,'blue socks and red shoes’)) print(p.sub(’colour’,'blue socks and red shoes’, count=1))
输出:
colour socks and colour shoes colour socks and red shoes
subn()要领实行的效果跟sub()一样,不过它会返回一个二维数组,包括替代后的新的字符串和统共替代的数目
比方:
import re p = re.compile(’(blue|white|red)’) print(p.subn(’colour’,'blue socks and red shoes’)) print(p.subn(’colour’,'blue socks and red shoes’, count=1))
输出
(’colour socks and colour shoes’, 2) (’colour socks and red shoes’, 1)
18:引见一下except的用法和作用?
Python的except用来捕捉一切非常, 因为Python内里的每次毛病都邑抛出 一个非常,所以每一个顺序的毛病都被看成一个运行时毛病。
一下是运用except的一个例子:
try: foo = opne(”file”) #open被错写为opne except: sys.exit(”could not open file!”)
因为这个毛病是因为open被拼写成opne而形成的,然后被except捕捉,所以debug顺序的时刻很轻易不知道出了什么问题
下面这个例子更好点:
try: foo = opne(”file”) # 这时刻except只捕捉IOError except IOError: sys.exit(”could not open file”)
19:Python中pass语句的作用是什么?
pass语句什么也不做,平常作为占位符或许建立占位顺序,pass语句不会实行任何操纵,比方:
while False: pass
pass一般用来建立一个最简朴的类:
class MyEmptyClass: pass
pass在软件设计阶段也常常用来作为TODO,提示完成响应的完成,比方:
def initlog(*args): pass #please implement this
20:引见一下Python下range()函数的用法?
假如须要迭代一个数字序列的话,可以运用range()函数,range()函数可以生成等差级数。
如例:
for i in range(5) print(i)
这段代码将输出0, 1, 2, 3, 4五个数字
range(10)会发生10个值, 也可以让range()从别的一个数字最先,或许定义一个差别的增量,以至是负数增量
range(5, 10)从5到9的五个数字
range(0, 10, 3) 增量为三, 包括0,3,6,9四个数字
range(-10, -100, -30) 增量为-30, 包括-10, -40, -70
可以一同运用range()和len()来迭代一个索引序列
比方:
a = ['Nina', 'Jim', 'Rainman', 'Hello'] for i in range(len(a)): print(i, a[i])
21:有两个序列a,b,大小都为n,序列元素的值恣意整形数,
无序;请求:经由过程交流a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
将两序列合并为一个序列,并排序,为序列Source
拿出最大元素Big,次大的元素Small
在余下的序列S[:-2]举行中分,获得序列max,min
将Small加到max序列,将Big加大min序列,从新盘算新序列和,和大的为max,小的为min。
Python代码
def mean( sorted_list ): if not sorted_list: return (([],[])) big = sorted_list[-1] small = sorted_list[-2] big_list, small_list = mean(sorted_list[:-2]) big_list.append(small) small_list.append(big) big_list_sum = sum(big_list) small_list_sum = sum(small_list) if big_list_sum > small_list_sum: return ( (big_list, small_list)) else: return (( small_list, big_list)) tests = [ [1,2,3,4,5,6,700,800], [10001,10000,100,90,50,1], range(1, 11), [12312, 12311, 232, 210, 30, 29, 3, 2, 1, 1] ] for l in tests: l.sort() print print “Source List: ”, l l1,l2 = mean(l) print “Result List: ”, l1, l2 print “Distance: ”, abs(sum(l1)-sum(l2)) print ‘-*’*40
输出效果
Source List: [1, 2, 3, 4, 5, 6, 700, 800] Result List: [1, 4, 5, 800] [2, 3, 6, 700] Distance: 99 -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* Source List: [1, 50, 90, 100, 10000, 10001] Result List: [50, 90, 10000] [1, 100, 10001] Distance: 38 -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* Source List: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Result List: [2, 3, 6, 7, 10] [1, 4, 5, 8, 9] Distance: 1 -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* Source List: [1, 1, 2, 3, 29, 30, 210, 232, 12311, 12312] Result List: [1, 3, 29, 232, 12311] [1, 2, 30, 210, 12312] Distance: 21 -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
以上就是(周全)python面试题的典范示例总结的细致内容,更多请关注ki4网别的相干文章!