日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 面试宝典--集各家之所长,乱七八糟于一体

發(fā)布時(shí)間:2023/12/9 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 面试宝典--集各家之所长,乱七八糟于一体 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 在判斷object是否是class的instances時(shí),type和isinstance函數(shù)的區(qū)別?

type(obj) =>?<type 'instance'>

type(cls) =>?<type 'classobj'>

由上可知,所有obj type后統(tǒng)一為 instance type; 而cls type后統(tǒng)一為classobj type

isinstance(obj,class),如果object是class的instance,返回True。

?

2. 通過重寫內(nèi)建函數(shù),實(shí)現(xiàn)文件open之前檢查文件格式?

[html] view plaincopyprint?

  • <span?style="font-size:14px;">#!?/usr/bin/env?python??
  • #?-*-?coding:?utf-8?-*-??
  • #?vim:?tabstop=4?shiftwidth=4?softtabstop=4??
  • ??
  • def?open(filename,mode):??
  • ????import?__builtin__??
  • ??????
  • ????file?=?__builtin__.open(filename,mode)??
  • ??????
  • ????if?file.read(5)?not?in("GIF87",?"GIF89"):???
  • ????????raise?IOError,?"not?aGIF?file"??
  • ????file.seek(0)???
  • ????return?file??
  • ??????
  • fp?=?open("sample/test.gif","r")??
  • print?len(fp.read()),?"bytes"</span>??
  • ?

    3. 重新實(shí)現(xiàn)str.strip(),注意不能使用string.*strip()

    [html] view plaincopyprint?

  • <span?style="font-size:14px;">#!?/usr/bin/env?python??
  • #?-*-?coding:?utf-8?-*-??
  • #?vim:?tabstop=4?shiftwidth=4?softtabstop=4??
  • ??
  • ??
  • #?TODO?rstrip??
  • def?rightStr(string,split='?'):??
  • ????endind?=?string.rfind(split)??
  • ????res?=?string??
  • ????while?endind?!=?-1?and?endind?==?len(res)-1:??
  • ????????res?=?res[:endind]??
  • ????????endind?=?res.rfind(split)??
  • ??????
  • ????return?res??
  • ??
  • ??
  • #?TODO?lstrip??
  • def?leftStr(string,split='?'):??
  • ????startind?=?string.find(split)??
  • ????res?=?string??
  • ????while?startind?!=?-1?and?startind?==?0:??
  • ????????res?=?res[startind+1:]??
  • ????????startind=res.find(split)??
  • ??????????
  • ????return?res??
  • ??
  • def?main():??
  • ??????
  • ????word='aa????asdf??aa??'??
  • ????stripstr='?'??
  • ??????
  • ????lenth?=?len(word)??
  • ????res=word??
  • ????#?leftstrip??
  • ????if?word[0]?==?stripstr:??
  • ????????res=leftStr(res)??
  • ??????
  • ????#?rightstrip??
  • ????if?word[len(word)-1]?==?stripstr:??
  • ????????res=rightStr(res)??
  • ??????
  • ????print?res??
  • ??
  • if?__name__?==?"__main__":??
  • ????main()??
  • ????</span>??
  • ?

    4. 說明os,sys模塊不同,并列舉常用的模塊方法?

    官方解釋:
    os: This module provides a portable way of using operating system dependent functionality.?
    翻譯:提供一種方便的使用操作系統(tǒng)函數(shù)的方法。
    sys:This module provides access to some variables used or maintained by the interpreter and to functions that interact strongly with the interpreter.
    翻譯:提供訪問由解釋器使用或維護(hù)的變量和在與解釋器交互使用到的函數(shù)。
    os 常用方法

    [html] view plaincopyprint?

  • os.remove()刪除文件??
  • os.rename()重命名文件??
  • os.walk()生成目錄樹下的所有文件名??
  • os.chdir()改變目錄??
  • os.mkdir/makedirs創(chuàng)建目錄/多層目錄??
  • os.rmdir/removedirs刪除目錄/多層目錄??
  • os.listdir()列出指定目錄的文件??
  • os.getcwd()取得當(dāng)前工作目錄??
  • os.chmod()改變目錄權(quán)限??
  • os.path.basename()去掉目錄路徑,返回文件名??
  • os.path.dirname()去掉文件名,返回目錄路徑??
  • os.path.join()將分離的各部分組合成一個(gè)路徑名??
  • os.path.split()返回(dirname(),basename())元組??
  • os.path.splitext()(返回filename,extension)元組??
  • os.path.getatime\ctime\mtime分別返回最近訪問、創(chuàng)建、修改時(shí)間??
  • os.path.getsize()返回文件大小??
  • os.path.exists()是否存在??
  • os.path.isabs()是否為絕對(duì)路徑??
  • os.path.isdir()是否為目錄??
  • os.path.isfile()是否為文件??

  • sys 常用方法

    [html] view plaincopyprint?

  • sys.argv???????????命令行參數(shù)List,第一個(gè)元素是程序本身路徑????
  • sys.modules.keys()?返回所有已經(jīng)導(dǎo)入的模塊列表????
  • sys.exc_info()?????獲取當(dāng)前正在處理的異常類,exc_type、exc_value、exc_traceback當(dāng)前處理的異常詳細(xì)信息????
  • sys.exit(n)????????退出程序,正常退出時(shí)exit(0)????
  • sys.hexversion?????獲取Python解釋程序的版本值,16進(jìn)制格式如:0x020403F0????
  • sys.version????????獲取Python解釋程序的版本信息????
  • sys.maxint?????????最大的Int值????
  • sys.maxunicode?????最大的Unicode值????
  • sys.modules????????返回系統(tǒng)導(dǎo)入的模塊字段,key是模塊名,value是模塊????
  • sys.path???????????返回模塊的搜索路徑,初始化時(shí)使用PYTHONPATH環(huán)境變量的值????
  • sys.platform???????返回操作系統(tǒng)平臺(tái)名稱????
  • sys.stdout?????????標(biāo)準(zhǔn)輸出???
  • sys.stdin??????????標(biāo)準(zhǔn)輸入???
  • sys.stderr?????????錯(cuò)誤輸出???
  • sys.exc_clear()????用來清除當(dāng)前線程所出現(xiàn)的當(dāng)前的或最近的錯(cuò)誤信息???
  • sys.exec_prefix????返回平臺(tái)獨(dú)立的python文件安裝的位置???
  • sys.byteorder??????本地字節(jié)規(guī)則的指示器,big-endian平臺(tái)的值是'big',little-endian平臺(tái)的值是'little'???
  • sys.copyright??????記錄python版權(quán)相關(guān)的東西???
  • sys.api_version????解釋器的C的API版本???
  • sys.version_info????
  • ?

    5. deepcopy 和 copy的區(qū)別?

    copy 僅拷貝對(duì)象本身,而不拷貝對(duì)象中引用的其它對(duì)象。

    deepcopy 除拷貝對(duì)象本身,而且拷貝對(duì)象中引用的其它對(duì)象。

    例如:

    [html] view plaincopyprint?

  • #!?/usr/bin/env?python??
  • #?-*-?coding:?utf-8?-*-??
  • #?vim:?tabstop=4?shiftwidth=4?softtabstop=4??
  • ??
  • import?copy??
  • ??
  • al?=?[[1],[2],[3]]??
  • bl?=?copy.copy(al)??
  • cl?=?copy.deepcopy(al)??
  • ??
  • print?"before=>"??
  • print?al??
  • print?bl??
  • print?cl??
  • ??
  • al[0][0]?=?0??
  • al[1]?=?None??
  • ??
  • print?"after=>"??
  • print?al??
  • print?bl??
  • print?cl??
  • ?

    6. os.path和sys.path的區(qū)別?

    os.path是module,包含了各種處理長(zhǎng)文件名(路徑名)的函數(shù)。

    例如:

    [html] view plaincopyprint?

  • #!?/usr/bin/env?python??
  • #?-*-?coding:?utf-8?-*-??
  • #?vim:?tabstop=4?shiftwidth=4?softtabstop=4??
  • ??
  • import?os??
  • filename?=?"my/little/pony"??
  • print?"using",?os.name,?"..."??
  • print?"split",?"=>",?os.path.split(filename)??
  • print?"splitext",?"=>",?os.path.splitext(filename)??
  • print?"dirname",?"=>",?os.path.dirname(filename)??
  • print?"basename",?"=>",?os.path.basename(filename)??
  • ?

    sys.path是由目錄名構(gòu)成的列表,Python 從中查找擴(kuò)展模塊( Python 源模塊, 編譯模塊,或者二進(jìn)制擴(kuò)展). 啟動(dòng) Python 時(shí),這個(gè)列表從根據(jù)內(nèi)建規(guī)則,PYTHONPATH 環(huán)境變量的內(nèi)容, 以及注冊(cè)表( Windows 系統(tǒng))等進(jìn)行初始化.?

    ?

    7. re模塊中match和search方法的不同?

    match() 函數(shù)只檢查 RE 是否在字符串開始處匹配,而 search() 則是掃描整個(gè)字符串。

    ?

    8. 如何匹配<html><title></title></html>得到<html>

    [html] view plaincopyprint?

  • >>>?import?re??
  • >>>?str?=?r'<html><title></title></html>'??
  • >>>?p?=?re.compile(r'<.*?>')??
  • >>>?print?p.match(str).group(0)??
  • ?

    9. 重新實(shí)現(xiàn)filter,map,reduce。

    [html] view plaincopyprint?

  • #!?/usr/bin/env?python??
  • #?-*-?coding:?utf-8?-*-??
  • #?vim:?tabstop=4?shiftwidth=4?softtabstop=4??
  • ??
  • def?filter_impl(func,?argvs):??
  • ????res?=?[]??
  • ??????
  • ????for?argv?in?argvs:??
  • ????????if?func(argv):??
  • ????????????res.append(argv)??
  • ??????
  • ????return?res??
  • ??
  • ??
  • #?check?filter?impl??
  • print?"filter?==>"??
  • print?filter_impl(lambda?x:?x<4,?range(1,10))??
  • print?filter(lambda?x:?x<4,?range(1,10))??
  • ??
  • def?map_impl(func,?argvs):??
  • ??
  • ????res?=?[]??
  • ????for?argv?in?argvs:??
  • ????????res.append(func(argv))??
  • ??????????
  • ????return?res??
  • ??
  • #?check?map?impl??
  • ??
  • print?"map?==>"??
  • print?map_impl(lambda?x:?x*10,?range(1,5))??
  • print?map(lambda?x:?x*10,?range(1,5))??
  • ??
  • def?reduce_impl(func,?argvs,?startVal=None):??
  • ??????
  • ????if?startVal?is?not?None:??
  • ????????argv1?=?startVal??
  • ????else:??
  • ????????argv1?=?argvs[0]??
  • ??????
  • ????for?argv2?in?argvs[1:]:??
  • ????????argv1?=?func(argv1,?argv2)??
  • ??????
  • ????return?argv1??
  • ??????????
  • #?check?reduce?impl??
  • print?"reduce?==>"??
  • print?reduce_impl(lambda?x,y:?x*y,?range(1,4),20)??
  • print?reduce(lambda?x,y:?x*y,?range(1,4),20)??
  • Result:

    filter ==>
    [1, 2, 3]
    [1, 2, 3]
    map ==>
    [10, 20, 30, 40]
    [10, 20, 30, 40]
    reduce ==>
    120
    120

    ?

    10. 解釋生成器(generator)與函數(shù)的不同,并實(shí)現(xiàn)和使用簡(jiǎn)單generator?

    生成器和函數(shù)的主要區(qū)別在于函數(shù) return a value,生成器 yield a value同時(shí)標(biāo)記或記憶 point of the?yield 以便于在下次調(diào)用時(shí)從標(biāo)記點(diǎn)恢復(fù)執(zhí)行。?yield?使函數(shù)轉(zhuǎn)換成生成器,而生成器反過來又返回迭代器。

    [html] view plaincopyprint?

  • #!?/usr/bin/env?python??
  • #?-*-?coding:?utf-8?-*-??
  • #?vim:?tabstop=4?shiftwidth=4?softtabstop=4??
  • ??
  • def?gem():??
  • ????yield?"first"??
  • ????yield?"second"??
  • ????yield?"third"??
  • ??????
  • for?res?in?gem():??
  • ????print?res??
  • ?

    11. 設(shè)計(jì)實(shí)現(xiàn)遍歷目錄與子目錄,抓取.pyc文件?

    [html] view plaincopyprint?

  • #!?/usr/bin/env?python??
  • #?-*-?coding:?utf-8?-*-??
  • #?vim:?tabstop=4?shiftwidth=4?softtabstop=4??
  • ??
  • #?1.?for-in?dir/subdir?to?get?the?filesname??
  • #?2.?splitext?filename?to?filter??
  • ??
  • import?os??
  • ??
  • def?getFiles(dir,?suffix):??
  • ??????
  • ????res?=?[]??
  • ????for?root,directory,files?in?os.walk(dir):??
  • ????????for?filename?in?files:??
  • ????????????name,?suf?=?os.path.splitext(filename)??
  • ????????????if?suf?==?suffix:??
  • ????????????????res.append(os.path.join(root,?filename))??
  • ????return?res??
  • ??
  • for?file?in?getFiles("./",?'.py'):??
  • ????print?file??
  • ?

    ?

    ?

    ?

    ?

    ?

    有兩個(gè)序列a,b,大小都為n,序列元素的值任意整形數(shù),無序;
    要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。
    1. 將兩序列合并為一個(gè)序列,并排序,為序列Source
    2. 拿出最大元素Big,次大的元素Small
    3. 在余下的序列S[:-2]進(jìn)行平分,得到序列max,min
    4. 將Small加到max序列,將Big加大min序列,重新計(jì)算新序列和,和大的為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:\t”, l
    l1,l2 = mean(l)
    print “Result List:\t”, l1, l2
    print “Distance:\t”, abs(sum(l1)-sum(l2))
    print ‘-*’*40
    輸出結(jié)果
    Python代碼
    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
    -*-*-*-*-*-*-*-*-*-*-*

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    match()函數(shù)只檢測(cè)RE是不是在string的開始位置匹配, search()會(huì)掃描整個(gè)string查找匹配, 也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none
    例如:
    print(re.match(‘super’, ‘superstition’).span())會(huì)返回(0, 5)
    而print(re.match(‘super’, ‘insuperable’))則返回None
    search()會(huì)掃描整個(gè)字符串并返回第一個(gè)成功的匹配
    例如:print(re.search(‘super’, ‘superstition’).span())返回(0, 5)
    print(re.search(‘super’, ‘insuperable’).span())返回(2, 7)

    ?

    ?

    如何反序的迭代一個(gè)序列?how do I iterate over a sequence in reverse order

    ?

    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]

    ?

    ?

    Python的內(nèi)存管理是由Python得解釋器負(fù)責(zé)的,開發(fā)人員可以從內(nèi)存管理事務(wù)中解放出來,致力于應(yīng)用程序的開發(fā),這樣就使得開發(fā)的程序錯(cuò)誤更少,程序更健壯,開發(fā)周期更短。

    ?

    1. 如何用Python刪除一個(gè)文件?
    使用os.remove(filename)或者os.unlink(filename);
    2. Python如何copy一個(gè)文件?
    shutil模塊有一個(gè)copyfile函數(shù)可以實(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 = 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()
    2. 使用decorator來實(shí)現(xiàn)單例模式
    def singleton(cls):
    instances = {}
    def getinstance():
    if cls not in instances:
    instances[cls] = cls()
    return instances[cls]
    return getinstance

    @singleton
    class MyClass:

    ?

    請(qǐng)寫出一段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]

    ?

    ?

    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ù)非常簡(jiǎn)單,只有一個(gè)表達(dá)式,不包含命令,可以考慮lambda函數(shù)。否則,你還是定義函數(shù)才對(duì),畢竟函數(shù)沒有這么多限制。

    ?

    ?

    webbrowser模塊提供了一個(gè)高級(jí)接口來顯示基于Web的文檔,大部分情況下只需要簡(jiǎn)單的調(diào)用open()方法。
    webbrowser定義了如下的異常:
    exception webbrowser.Error, 當(dāng)瀏覽器控件發(fā)生錯(cuò)誤是會(huì)拋出這個(gè)異常
    webbrowser有以下方法:
    webbrowser.open(url[, new=0[, autoraise=1]])
    這個(gè)方法是在默認(rèn)的瀏覽器中顯示url, 如果new = 0, 那么url會(huì)在同一個(gè)瀏覽器窗口下打開,如果new = 1, 會(huì)打開一個(gè)新的窗口,如果new = 2, 會(huì)打開一個(gè)新的tab, 如果autoraise = true, 窗口會(huì)自動(dòng)增長(zhǎng)。
    webbrowser.open_new(url)
    在默認(rèn)瀏覽器中打開一個(gè)新的窗口來顯示url, 否則,在僅有的瀏覽器窗口中打開url
    webbrowser.open_new_tab(url)
    在默認(rèn)瀏覽器中當(dāng)開一個(gè)新的tab來顯示url, 否則跟open_new()一樣
    webbrowser.get([name]) 根據(jù)name返回一個(gè)瀏覽器對(duì)象,如果name為空,則返回默認(rèn)的瀏覽器
    webbrowser.register(name, construtor[, instance])
    注冊(cè)一個(gè)名字為name的瀏覽器,如果這個(gè)瀏覽器類型被注冊(cè)就可以用get()方法來獲取。

    ?

    ?

    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 = 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()
    2. 使用decorator來實(shí)現(xiàn)單例模式
    def singleton(cls):
    instances = {}
    def getinstance():
    if cls not in instances:
    instances[cls] = cls()
    return instances[cls]
    return getinstance
    @singleton
    class 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ù)非常簡(jiǎn)單,只有一個(gè)表達(dá)式,不包含命令,可以考慮lambda函數(shù)。否則,你還是定義函數(shù)才對(duì),畢竟函數(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ī)的存儲(chǔ)形式也是不一樣。
    4:Python如何定義一個(gè)函數(shù)
    函數(shù)的定義形式如
    下:
    def (arg1, arg2,… argN):

    函數(shù)的名字也必須以字母開頭,可以包括下劃線“ ”,但不能把Python的
    關(guān)鍵字定義成函數(shù)的名字。函數(shù)內(nèi)的語句數(shù)量是任意的,每個(gè)語句至少有
    一個(gè)空格的縮進(jìn),以表示此語句屬于這個(gè)函數(shù)的。縮進(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ǎn)化程序的結(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:如何反序的迭代一個(gè)序列?how do I iterate over a sequence in reverse order
    如果是一個(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]

    7:Python里面如何實(shí)現(xiàn)tuple和list的轉(zhuǎn)換?
    函數(shù)tuple(seq)可以把所有可迭代的(iterable)序列轉(zhuǎn)換成一個(gè)tuple, 元素不變,排序也不變。
    例如,tuple([1,2,3])返回(1,2,3), tuple(’abc’)返回(’a’.’b’,’c’).如果參數(shù)已經(jīng)是一個(gè)tuple的話,函數(shù)不做任何拷貝而直接返回原來的對(duì)象,所以在不確定對(duì)象 是不是tuple的時(shí)候來調(diào)用tuple()函數(shù)也不是很耗費(fèi)的。
    函數(shù)list(seq)可以把所有的序列和可迭代的對(duì)象轉(zhuǎn)換成一個(gè)list,元素不變,排序也不變。
    例如 list([1,2,3])返回(1,2,3), list(’abc’)返回['a', 'b', 'c']。如果參數(shù)是一個(gè)list, 她會(huì)像set[:]一樣做一個(gè)拷貝
    8:Python面試題:請(qǐng)寫出一段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]
    9:Python文件操作的面試題
    1. 如何用Python刪除一個(gè)文件?
    使用os.remove(filename)或者os.unlink(filename);
    2. Python如何copy一個(gè)文件?
    shutil模塊有一個(gè)copyfile函數(shù)可以實(shí)現(xiàn)文件拷貝
    10:Python里面如何生成隨機(jī)數(shù)?
    標(biāo)準(zhǔn)庫random實(shí)現(xiàn)了一個(gè)隨機(jī)數(shù)生成器,實(shí)例代碼如下:
    import random
    random.random()
    它會(huì)返回一個(gè)隨機(jī)的0和1之間的浮點(diǎn)數(shù)
    11:如何用Python來發(fā)送郵件?
    可以使用smtplib標(biāo)準(zhǔn)庫。
    以下代碼可以在支持SMTP監(jiān)聽器的服務(wù)器上執(zhí)行。
    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
    # 發(fā)送郵件部分
    server = smtplib.SMTP(’localhost’)
    server.sendmail(fromaddr, toaddrs, msg)
    server.quit()
    12:Python里面如何拷貝一個(gè)對(duì)象?
    一般來說可以使用copy.copy()方法或者copy.deepcopy()方法,幾乎所有的對(duì)象都可以被拷貝
    一些對(duì)象可以更容易的拷貝,Dictionaries有一個(gè)copy方法:
    newdict = olddict.copy()
    13:有沒有一個(gè)工具可以幫助查找python的bug和進(jìn)行靜態(tài)的代碼分析?
    有,PyChecker是一個(gè)python代碼的靜態(tài)分析工具,它可以幫助查找python代碼的bug, 會(huì)對(duì)代碼的復(fù)雜度和格式提出警告
    Pylint是另外一個(gè)工具可以進(jìn)行coding standard檢查。
    14:如何在一個(gè)function里面設(shè)置一個(gè)全局的變量?
    解決方法是在function的開始插入一個(gè)global聲明:
    def f()
    global x
    14:有兩個(gè)序列a,b,大小都為n,序列元素的值任意整形數(shù),無序;要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。
    1. 將兩序列合并為一個(gè)序列,并排序,為序列Source
    2. 拿出最大元素Big,次大的元素Small
    3. 在余下的序列S[:-2]進(jìn)行平分,得到序列max,min
    4. 將Small加到max序列,將Big加大min序列,重新計(jì)算新序列和,和大的為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:\t”, l
    l1,l2 = mean(l)
    print “Result List:\t”, l1, l2
    print “Distance:\t”, abs(sum(l1)-sum(l2))
    print ‘-*’*40
    輸出結(jié)果
    Python代碼
    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
    -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    15:用Python匹配HTML tag的時(shí)候,<.*>和<.*?>有什么區(qū)別?
    當(dāng)重復(fù)匹配一個(gè)正則表達(dá)式時(shí)候, 例如<.*>, 當(dāng)程序執(zhí)行匹配的時(shí)候,會(huì)返回最大的匹配值
    例如:
    import re
    s = ‘’
    print(re.match(’<.*>’, s).group())
    會(huì)返回一個(gè)匹配而不是

    import re
    s = ‘’
    print(re.match(’<.*?>’, s).group())
    則會(huì)返回
    <.*>這種匹配稱作貪心匹配 <.*?>稱作非貪心匹配
    16:Python里面search()和match()的區(qū)別?
    match()函數(shù)只檢測(cè)RE是不是在string的開始位置匹配, search()會(huì)掃描整個(gè)string查找匹配, 也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none
    例如:
    print(re.match(’super’, ’superstition’).span())會(huì)返回(0, 5)
    而print(re.match(’super’, ‘insuperable’))則返回None
    search()會(huì)掃描整個(gè)字符串并返回第一個(gè)成功的匹配
    例如:print(re.search(’super’, ’superstition’).span())返回(0, 5)
    print(re.search(’super’, ‘insuperable’).span())返回(2, 7)
    17:如何用Python來進(jìn)行查詢和替換一個(gè)文本字符串?
    可以使用sub()方法來進(jìn)行查詢和替換,sub方法的格式為:sub(replacement, string[, count=0])
    replacement是被替換成的文本
    string是需要被替換的文本
    count是一個(gè)可選參數(shù),指最大被替換的數(shù)量
    例子:
    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()方法執(zhí)行的效果跟sub()一樣,不過它會(huì)返回一個(gè)二維數(shù)組,包括替換后的新的字符串和總共替換的數(shù)量
    例如:
    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用來捕獲所有異常, 因?yàn)镻ython里面的每次錯(cuò)誤都會(huì)拋出 一個(gè)異常,所以每個(gè)程序的錯(cuò)誤都被當(dāng)作一個(gè)運(yùn)行時(shí)錯(cuò)誤。
    一下是使用except的一個(gè)例子:
    try:
    foo = opne(”file”) #open被錯(cuò)寫為opne
    except:
    sys.exit(”could not open file!”)
    因?yàn)檫@個(gè)錯(cuò)誤是由于open被拼寫成opne而造成的,然后被except捕獲,所以debug程序的時(shí)候很容易不知道出了什么問題
    下面這個(gè)例子更好點(diǎn):
    try:
    foo = opne(”file”) # 這時(shí)候except只捕獲IOError
    except IOError:
    sys.exit(”could not open file”)
    19:Python中pass語句的作用是什么?
    pass語句什么也不做,一般作為占位符或者創(chuàng)建占位程序,pass語句不會(huì)執(zhí)行任何操作,比如:
    while False:
    pass
    pass通常用來創(chuàng)建一個(gè)最簡(jiǎn)單的類:
    class MyEmptyClass:
    pass
    pass在軟件設(shè)計(jì)階段也經(jīng)常用來作為TODO,提醒實(shí)現(xiàn)相應(yīng)的實(shí)現(xiàn),比如:
    def initlog(*args):
    pass #please implement this
    20:介紹一下Python下range()函數(shù)的用法?
    如果需要迭代一個(gè)數(shù)字序列的話,可以使用range()函數(shù),range()函數(shù)可以生成等差級(jí)數(shù)。
    如例:
    for i in range(5)
    print(i)
    這段代碼將輸出0, 1, 2, 3, 4五個(gè)數(shù)字
    range(10)會(huì)產(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])

    ?

    如何用Python輸出一個(gè)Fibonacci數(shù)列

    代碼如下:
    a,b = 0, 1
    while b<100:
    print (b),
    a, b = b, a+b

    轉(zhuǎn)載于:https://www.cnblogs.com/linkong1081/articles/4074037.html

    總結(jié)

    以上是生活随笔為你收集整理的python 面试宝典--集各家之所长,乱七八糟于一体的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。