1、Python如何實(shí)現(xiàn)單例模式? Python有兩種方式可以實(shí)現(xiàn)單例模式,下面兩個(gè)例子使用了不同的方式實(shí)現(xiàn)單例模式: 1、
class Singleton(type):def __init__(cls, name, bases, dict):super(Singleton, cls).__init__(name, bases, dict)cls.instance = Nonedef __call__(cls, *args, **kw):if cls.instance is None:cls.instance = super(Singleton, cls).__call__(*args, **kw)return cls.instanceclass MyClass(object):__metaclass__ = SingletonPRint MyClass()print MyClass()2、 使用decorator來實(shí)現(xiàn)單例模式
def singleton(cls):instances = {}def getinstance():if cls not in instances:instances[cls] = cls()return instances[cls]return getinstance@singletonclass MyClass:2、什么是lambda函數(shù)? Python允許你定義一種單行的小函數(shù)。定義lambda函數(shù)的形式如下:labmda 參數(shù):表達(dá)式lambda函數(shù)默認(rèn)返回表達(dá)式的值。你也可以將其賦值給一個(gè)變量。lambda函數(shù)可以接受任意個(gè)參數(shù),包括可選參數(shù),但是表達(dá)式只有一個(gè):
>>> 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函數(shù),不把它賦值給變量:
>>> (lambda x,y=0,z=0:x+y+z)(3,5,6)14如果你的函數(shù)非常簡單,只有一個(gè)表達(dá)式,不包含命令,可以考慮lambda函數(shù)。否則,你還是定義函數(shù)才對,畢竟函數(shù)沒有這么多限制。 3、Python是如何進(jìn)行類型轉(zhuǎn)換的? Python提供了將變量或值從一種類型轉(zhuǎn)換成另一種類型的內(nèi)置函數(shù)。int函數(shù)能夠?qū)⒎蠑?shù)學(xué)格式數(shù)字型字符串轉(zhuǎn)換成整數(shù)。否則,返回錯(cuò)誤信息。
int(”34″) 34 int(”1234ab”) #不能轉(zhuǎn)換成整數(shù) ValueError: invalid literal for int(): 1234ab 函數(shù)int也能夠把浮點(diǎn)數(shù)轉(zhuǎn)換成整數(shù),但浮點(diǎn)數(shù)的小數(shù)部分被截去。 int(34.1234) 34 int(-2.46) -2 函數(shù)°oat將整數(shù)和字符串轉(zhuǎn)換成浮點(diǎn)數(shù): float(”12″) 12.0 float(”1.111111″) 1.111111 函數(shù)str將數(shù)字轉(zhuǎn)換成字符: str(98) ‘98′ str(”76.765″) ‘76.765′ 整數(shù)1和浮點(diǎn)數(shù)1.0在python中是不同的。雖然它們的值相等的,但卻屬于不同的類型。這兩個(gè)數(shù)在計(jì)算機(jī)的存儲形式也是不一樣。 4、Python如何定義一個(gè)函數(shù) 函數(shù)的定義形式如 下: def (arg1, arg2,… argN): 函數(shù)的名字也必須以字母開頭,可以包括下劃線“ ”,但不能把Python的 關(guān)鍵字定義成函數(shù)的名字。函數(shù)內(nèi)的語句數(shù)量是任意的,每個(gè)語句至少有 一個(gè)空格的縮進(jìn),以表示此語句屬于這個(gè)函數(shù)的??s進(jìn)結(jié)束的地方,函數(shù) 自然結(jié)束。 下面定義了一個(gè)兩個(gè)數(shù)相加的函數(shù): def add(p1, p2): print p1, “+”, p2, “=”, p1+p2 add(1, 2) 1 + 2 = 3 函數(shù)的目的是把一些復(fù)雜的操作隱藏,來簡化程序的結(jié)構(gòu),使其容易 閱讀。函數(shù)在調(diào)用前,必須先定義。也可以在一個(gè)函數(shù)內(nèi)部定義函數(shù),內(nèi) 部函數(shù)只有在外部函數(shù)調(diào)用時(shí)才能夠被執(zhí)行。程序調(diào)用函數(shù)時(shí),轉(zhuǎn)到函數(shù) 內(nèi)部執(zhí)行函數(shù)內(nèi)部的語句,函數(shù)執(zhí)行完畢后,返回到它離開程序的地方, 執(zhí)行程序的下一條語句。 5、Python是如何進(jìn)行內(nèi)存管理的? Python的內(nèi)存管理是由Python得解釋器負(fù)責(zé)的,開發(fā)人員可以從內(nèi)存管理事務(wù)中解放出來,致力于應(yīng)用程序的開發(fā),這樣就使得開發(fā)的程序錯(cuò)誤更少,程序更健壯,開發(fā)周期更短。 6、Python中如何定義一個(gè)函數(shù)? 定義函數(shù)的格式是: def functionName(arg): 例如:定義一個(gè)輸出Fibonacci序列的函數(shù)
def fibonacci(n):a, b = 0, 1while b < n:print(b, end=’ ‘)a, b = b, a+bprint()fibonacci(100)7、如何反序的迭代一個(gè)序列? 如果是一個(gè)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]8、python判斷當(dāng)前用戶是否是root
import osif os.geteuid() != 0:print "This program must be run as root. Aborting."sys.exit(1)9、python程序中文輸出問題怎么解決? 方法一: 用encode和decode 如:
import os.pathimport xlrd,sysFilename=’/home/tom/Desktop/1234.xls’if not os.path.isfile(Filename):raise NameError,”%s is not a valid filename”%Filenamebk=xlrd.open_workbook(Filename)shxrange=range(bk.nsheets)print shxrangefor x in shxrange:p=bk.sheets()[x].name.encode(‘utf-8′)print p.decode(‘utf-8′)方法二: 在文件開頭加上 reload(sys) sys.setdefaultencoding(‘utf8′)這2行,再試著運(yùn)行一下 10、Python里面如何實(shí)現(xiàn)tuple和list的轉(zhuǎn)換? 函數(shù)tuple(seq)可以把所有可迭代的(iterable)序列轉(zhuǎn)換成一個(gè)tuple, 元素不變,排序也不變。 例如,tuple([1,2,3])返回(1,2,3), tuple(‘a(chǎn)bc’)返回(‘a(chǎn)’.’b’,’c’).如果參數(shù)已經(jīng)是一個(gè)tuple的話,函數(shù)不做任何拷貝而直接返回原來的對象,所以在不確定對象是不是tuple的時(shí)候來調(diào)用tuple()函數(shù)也不是很耗費(fèi)的。 函數(shù)list(seq)可以把所有的序列和可迭代的對象轉(zhuǎn)換成一個(gè)list,元素不變,排序也不變。 例如 list([1,2,3])返回(1,2,3), list(‘a(chǎn)bc’)返回[‘a(chǎn)’, ‘b’, ‘c’]。如果參數(shù)是一個(gè)list, 她會像set[:]一樣做一個(gè)拷貝 11、用Python寫一個(gè)for循環(huán)的例子 Python的for循環(huán)可以循環(huán)所有序列(一個(gè)list或者string), 如:
a = ['abc', 'bcde', 'efghi', 'hello Word']for i in a:print (i)print (len(i))12、Python中pass語句的作用是什么? ass語句什么也不做,一般作為占位符或者創(chuàng)建占位程序,pass語句不會執(zhí)行任何操作,比如: while False: pass pass通常用來創(chuàng)建一個(gè)最簡單的類: class MyEmptyClass: pass pass在軟件設(shè)計(jì)階段也經(jīng)常用來作為TODO,提醒實(shí)現(xiàn)相應(yīng)的實(shí)現(xiàn),比如: def initlog(*args): pass #please implement this 13、請寫出一段Python代碼實(shí)現(xiàn)刪除一個(gè)list里面的重復(fù)元素 可以先把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]14、如何用Python來發(fā)送郵件? 可以使用smtplib標(biāo)準(zhǔn)庫。 以下代碼可以在支持SMTP監(jiān)聽器的服務(wù)器上執(zhí)行。
import sys, smtplibfromaddr = raw_input(“From: “)toaddrs = raw_input(“To: “).split(‘,’)print “Enter message, end with ^D:”msg = ”while 1:line = sys.stdin.readline()if not line:breakmsg = msg + line發(fā)送郵件部分
server = smtplib.SMTP(‘localhost’)server.sendmail(fromaddr, toaddrs, msg)server.quit()15、python代碼得到列表list的交集與差集
交集b1=[1,2,3]b2=[2,3,4]b3 = [val for val in b1 if val in b2]print b3差集 b1=[1,2,3]b2=[2,3,4]b3 = [val for val in b1 if val not in b2]print b3 差集實(shí)例———-#/bin/env python# -*- coding:utf-8 -*-f = open(‘C:/diff_dealer/Excel.txt’)excel = f.readlines()f.close()f= open(‘C:/diff_dealer/db.txt’)db = f.readlines()diff = [val for val in db if val not in excel]f.close()f = open(‘C:/diff_dealer/diff.txt’, ‘w’)f.writelines(diff)f.close()print diff16、介紹一下except的用法和作用? python的except用來捕獲所有異常, 因?yàn)镻ython里面的每次錯(cuò)誤都會拋出 一個(gè)異常,所以每個(gè)程序的錯(cuò)誤都被當(dāng)作一個(gè)運(yùn)行時(shí)錯(cuò)誤。 以下是使用except的一個(gè)例子:
try:foo = opne(“file”) #open被錯(cuò)寫為opneexcept:sys.exit(“could not open file!”)因?yàn)檫@個(gè)錯(cuò)誤是由于open被拼寫成opne而造成的,然后被except捕獲,所以debug程序的時(shí)候很容易不知道出了什么問題 下面這個(gè)例子更好點(diǎn):
try:foo = opne(“file”) # 這時(shí)候except只捕獲IOErrorexcept IOError:sys.exit(“could not open file”)17、Python里面如何拷貝一個(gè)對象? 一般來說可以使用copy.copy()方法或者copy.deepcopy()方法,幾乎所有的對象都可以被拷貝 一些對象可以更容易的拷貝,Dictionaries有一個(gè)copy方法: newdict = olddict.copy() 18、用Python匹配HTML tag的時(shí)候,<.>和<.?>有什么區(qū)別? 當(dāng)重復(fù)匹配一個(gè)正則表達(dá)式時(shí)候, 例如, 當(dāng)程序執(zhí)行匹配的時(shí)候,會返回最大的匹配值 例如: import re s = ‘Title’ print(re.match(‘’, s).group()) 會返回一個(gè)匹配Title而不是 而 import re s = ‘Title’ print(re.match(‘’, s).group()) 則會返回 這種匹配稱作貪心匹配 稱作非貪心匹配 19、介紹一下Python下range()函數(shù)的用法? 如果需要迭代一個(gè)數(shù)字序列的話,可以使用range()函數(shù),range()函數(shù)可以生成等差級數(shù)。 如例: for i in range(5) print(i) 這段代碼將輸出0, 1, 2, 3, 4五個(gè)數(shù)字 range(10)會產(chǎn)生10個(gè)值, 也可以讓range()從另外一個(gè)數(shù)字開始,或者定義一個(gè)不同的增量,甚至是負(fù)數(shù)增量 range(5, 10)從5到9的五個(gè)數(shù)字range(0, 10, 3) 增量為三, 包括0,3,6,9四個(gè)數(shù)字range(-10, -100, -30) 增量為-30, 包括-10, -40, -70可以一起使用range()和len()來迭代一個(gè)索引序列例如:a = [‘Nina’, ‘Jim’, ‘Rainman’, ‘Hello’]for i in range(len(a)): print(i, a[i]) 20、python中的filter方法 【filter函數(shù)】 filter()函數(shù)可以對序列做過濾處理,就是說可以使用一個(gè)自定的函數(shù)過濾一個(gè)序列,把序列的每一項(xiàng)傳到自定義的過濾函數(shù)里處理,并返回結(jié)果做過濾。最終一次性返回過濾后的結(jié)果。 【filter()函數(shù)有兩個(gè)參數(shù)】 第一個(gè),自定函數(shù)名,必須的 第二個(gè),需要過濾的列,也是必須的 【DEMO】 需求,過濾大于5小于10的數(shù) coding=utf8 定義大于5小于10的函數(shù) def guolvhanshu(num): if num>5 and num<10: return num 定義一個(gè)序列 seq=(12,50,8,17,65,14,9,6,14,5) 使用filter函數(shù) result=filter(guolvhanshu,seq) (8,9,6) print result 執(zhí)行結(jié)果 (8, 9, 6) 因?yàn)?,9,6大于5,小于10所以被過濾下來了。
新聞熱點(diǎn)
疑難解答