1、Python如何實現單例模式? Python有兩種方式可以實現單例模式,下面兩個例子使用了不同的方式實現單例模式: 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來實現單例模式
def singleton(cls):instances = {}def getinstance():if cls not in instances:instances[cls] = cls()return instances[cls]return getinstance@singletonclass 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 (arg1, arg2,… argN): 函數的名字也必須以字母開頭,可以包括下劃線“ ”,但不能把Python的 關鍵字定義成函數的名字。函數內的語句數量是任意的,每個語句至少有 一個空格的縮進,以表示此語句屬于這個函數的??s進結束的地方,函數 自然結束。 下面定義了一個兩個數相加的函數: def add(p1, p2): print p1, “+”, p2, “=”, p1+p2 add(1, 2) 1 + 2 = 3 函數的目的是把一些復雜的操作隱藏,來簡化程序的結構,使其容易 閱讀。函數在調用前,必須先定義。也可以在一個函數內部定義函數,內 部函數只有在外部函數調用時才能夠被執行。程序調用函數時,轉到函數 內部執行函數內部的語句,函數執行完畢后,返回到它離開程序的地方, 執行程序的下一條語句。 5、Python是如何進行內存管理的? Python的內存管理是由Python得解釋器負責的,開發人員可以從內存管理事務中解放出來,致力于應用程序的開發,這樣就使得開發的程序錯誤更少,程序更健壯,開發周期更短。 6、Python中如何定義一個函數? 定義函數的格式是: def functionName(arg): 例如:定義一個輸出Fibonacci序列的函數
def fibonacci(n):a, b = 0, 1while b < n:print(b, end=’ ‘)a, b = b, a+bprint()fibonacci(100)7、如何反序的迭代一個序列? 如果是一個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判斷當前用戶是否是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行,再試著運行一下 10、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[:]一樣做一個拷貝 11、用Python寫一個for循環的例子 Python的for循環可以循環所有序列(一個list或者string), 如:
a = ['abc', 'bcde', 'efghi', 'hello Word']for i in a:print (i)print (len(i))12、Python中pass語句的作用是什么? ass語句什么也不做,一般作為占位符或者創建占位程序,pass語句不會執行任何操作,比如: while False: pass pass通常用來創建一個最簡單的類: class MyEmptyClass: pass pass在軟件設計階段也經常用來作為TODO,提醒實現相應的實現,比如: def initlog(*args): pass #please implement this 13、請寫出一段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]14、如何用Python來發送郵件? 可以使用smtplib標準庫。 以下代碼可以在支持SMTP監聽器的服務器上執行。
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發送郵件部分
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 差集實例———-#/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用來捕獲所有異常, 因為Python里面的每次錯誤都會拋出 一個異常,所以每個程序的錯誤都被當作一個運行時錯誤。 以下是使用except的一個例子:
try:foo = opne(“file”) #open被錯寫為opneexcept:sys.exit(“could not open file!”)因為這個錯誤是由于open被拼寫成opne而造成的,然后被except捕獲,所以debug程序的時候很容易不知道出了什么問題 下面這個例子更好點:
try:foo = opne(“file”) # 這時候except只捕獲IOErrorexcept IOError:sys.exit(“could not open file”)17、Python里面如何拷貝一個對象? 一般來說可以使用copy.copy()方法或者copy.deepcopy()方法,幾乎所有的對象都可以被拷貝 一些對象可以更容易的拷貝,Dictionaries有一個copy方法: newdict = olddict.copy() 18、用Python匹配HTML tag的時候,<.>和<.?>有什么區別? 當重復匹配一個正則表達式時候, 例如, 當程序執行匹配的時候,會返回最大的匹配值 例如: import re s = ‘Title’ print(re.match(‘’, s).group()) 會返回一個匹配Title而不是 而 import re s = ‘Title’ print(re.match(‘’, s).group()) 則會返回 這種匹配稱作貪心匹配 稱作非貪心匹配 19、介紹一下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]) 20、python中的filter方法 【filter函數】 filter()函數可以對序列做過濾處理,就是說可以使用一個自定的函數過濾一個序列,把序列的每一項傳到自定義的過濾函數里處理,并返回結果做過濾。最終一次性返回過濾后的結果。 【filter()函數有兩個參數】 第一個,自定函數名,必須的 第二個,需要過濾的列,也是必須的 【DEMO】 需求,過濾大于5小于10的數 coding=utf8 定義大于5小于10的函數 def guolvhanshu(num): if num>5 and num<10: return num 定義一個序列 seq=(12,50,8,17,65,14,9,6,14,5) 使用filter函數 result=filter(guolvhanshu,seq) (8,9,6) print result 執行結果 (8, 9, 6) 因為8,9,6大于5,小于10所以被過濾下來了。
新聞熱點
疑難解答