面試準(zhǔn)備之Python篇

1 單引號漠畜,雙引號倦卖,三引號的區(qū)別

題目:分別闡述3種引號用的場景和區(qū)別

1. 單引號和雙引號主要用來表示字符串

比如:
單引號:'python'
雙引號:"python"

2. 三引號

三單引號:'''python ''',也可以表示字符串一般用來輸入多行文本,或者用于大段的注釋
三雙引號:"""python""",一般用在類里面,用來注釋類,這樣省的寫文檔,直接用類的對象__doc__訪問獲得文檔

區(qū)別:

若你的字符串里面本身包含單引號,必須用雙引號
比如:"can't find the log\n"

2 Python的函數(shù)參數(shù)傳遞

題目:舉例說明Python函數(shù)參數(shù)傳遞的幾種形式窗悯,并說明函數(shù)傳參是值傳遞還是引用傳遞

1. Python的參數(shù)傳遞有:

  • 位置參數(shù)
  • 默認(rèn)參數(shù)
  • 可變參數(shù)
  • 關(guān)鍵字參數(shù)

2. 函數(shù)的傳值到底是值傳遞還是引用傳遞,要分情況:

  • 不可變參數(shù)用值傳遞:
    像整數(shù)和字符串這樣的不可變對象,是通過拷貝進(jìn)行傳遞的馁启,因為你無論如何都不可能在原處改變不可變對象
  • 可變參數(shù)用引用傳遞:
    比如像列表,字典這樣的對象是通過引用傳遞,和C語言里面的用指針傳遞數(shù)組很相似惯疙,可變對象能在函數(shù)內(nèi)部改變.

3. 具體例子:

#整數(shù)為不可變對象翠勉,用值傳遞
a = 1
def fun(a):
    a = 2
fun(a)
print a  # 1

#列表為可變對象,用引用傳遞
a = []
def fun(a):
    a.append(1)
fun(a)
print a  # [1]

3 lambda函數(shù)

題目:舉例說明lambda的用法霉颠,并說明用lambda的優(yōu)點

1. lambda的用法

lambda是匿名函數(shù)对碌,用法如下: lambda x,y : x+y, 冒號前的x,y為自變量,冒號后x+y為具體運算蒿偎。

2. lambda的優(yōu)點:

lambda能和def做同樣種類的工作朽们,特別是對于那些邏輯簡單的函數(shù),直接用lambda會更簡潔诉位,而且省去取函數(shù)名的麻煩(給函數(shù)取名是個技術(shù)活)

4 字符串格式化:%和.format的區(qū)別

題目:說明字符串格式化方法%和.format的區(qū)別

1. 字符串格式化: .format
字符串的format函數(shù)非常靈活骑脱,很強大,可以接受的參數(shù)不限個數(shù),并且位置可以不按順序苍糠,而且有較為強大的格式限定符(比如:填充叁丧,對齊,精度等)

具體用法如下,字符串中花括號 {} 的部分會被format傳入的參數(shù)替代岳瞭,傳入的值可以是字符串拥娄,也可以是數(shù)字或者別的對象。

>>> '{} {} {}'.format('a', 'b', 'c')
'a b c'

可以用數(shù)字指定傳入?yún)?shù)的相對位置:

>>> '{2} {1} {0}'.format('a', 'b', 'c')
'c b a'

還可以指定傳入?yún)?shù)的名稱:

>>> '{color} {n} {x}'.format(n=10, x=1.5, color='blue')
'blue 10 1.5'

可以在一起混用:

>>> '{color} {0} {x} {1}'.format(10, 'foo', x = 1.5, color='blue')
'blue 10 1.5 foo'

可以用{<field name>:<format>}指定格式:

>>> from math import pi
>>> '{0:10} {1:10d} {2:10.2f}'.format('foo', 5, 2 * pi)
'foo                 5       6.28'

2. 字符串格式化: %
舊式的 % 方法進(jìn)行格式化寝优,具體規(guī)則與C中相同条舔。

>>> s = "some numbers:"
>>> x = 1.34
>>> y = 2
>>> # 用百分號隔開,括號括起來
... t = "%s %f, %d" % (s, x, y)
>>> t
'some numbers: 1.340000, 2'

5 寫函數(shù): 輸入一個字符串, 返回倒序排列的結(jié)果

題目:輸入: string_reverse(‘a(chǎn)bcdef’), 返回: ‘fedcba’,寫出你能想到的多種方法

1. 利用字符串本身的翻轉(zhuǎn)

def string_reverse1(text='abcdef'):
    return text[::-1]

2. 把字符串變成列表乏矾,用列表的reverse函數(shù)

def string_reverse2(text='abcdef'):
    lst = list(text)
    lst.reverse()
    return ''.join(lst)

3. 新建一個列表孟抗,從后往前取

def string_reverse3(text='abcdef'):
    lst = []
    for i in range(len(text)-1, -1, -1):
        lst.append(text[i])
    return ''.join(lst)

4. 利用雙向列表deque中的extendleft函數(shù)

from collections import deque

def string_reverse4(text='abcdef'):
    d = deque()
    d.extendleft(text)
    return ''.join(d)

5. 遞歸

def string_reverse5(text='abcdef'):
    if len(text) <= 1:
        return text
    else:
        return string_reverse5(text[1:])+text[0]

6 按升序合并兩個list, 并去除重復(fù)的元素

題目:按升序合并如下兩個list, 并去除重復(fù)的元素
list1 = [2, 3, 8, 4, 9, 5, 6]
list2 = [5, 6, 10, 17, 11, 2]

1. 用set方法(最簡單)

list3 = list1 + list2
print(sorted(list(set(list3))))

2. 遞歸方法(略)

7 Pythonic的代碼

題目:寫出你認(rèn)為最Pythonic的代碼

Pythonic編程風(fēng)格是Python追求的一種風(fēng)格,精髓就是追求直觀钻心,簡潔而容易讀.

1. 交互變量

  • 非pythonic
temp = a
a = b
b = temp
  • pythonic
a, b = b, a


2. 判斷其值真假

name = 'Tim'
langs = ['AS3', 'Lua', 'C']
info = {'name': 'Tim', 'sex': 'Male', 'age':23 }
  • 非pythonic
if name != '' and len(langs)>0 and info !={}:
    print('All True!')
  • pythonic
if name and langs and info:
    print('All True!')


3. 列表推導(dǎo)式

[x for x in range(1,100) if x%2==0]


4. zip創(chuàng)建鍵值對

keys = ['Name', 'Sex', 'Age']
values = ['Jack', 'Male', 23]
dict(zip(keys,values))

8 range 和 xrange

題目:說明range和xrange的區(qū)別

xrange用法與 range 都在循環(huán)時使用且用法相同凄硼,所不同的是xrange生成的不是一個list對象,而是一個生成器捷沸。因此要生成很大的數(shù)字序列的時候摊沉,用xrange會比range性能優(yōu)很多,因為不需要一上來就開辟一塊很大的內(nèi)存空間痒给。

9 迭代器和生成器

題目:將列表生成式中[]改成() 之后數(shù)據(jù)結(jié)構(gòu)是否改變

答:是说墨,從列表變?yōu)樯善鳌?/p>

通過列表生成式,可以直接創(chuàng)建一個列表苍柏。但是尼斧,受到內(nèi)存限制,列表容量肯定是有限的试吁。而且棺棵,創(chuàng)建一個包含百萬元素的列表,不僅是占用很大的內(nèi)存空間,如:我們只需要訪問前面的幾個元素烛恤,后面大部分元素所占的空間都是浪費的母怜。因此,沒有必要創(chuàng)建完整的列表(節(jié)省大量內(nèi)存空間)缚柏。在Python中苹熏,我們可以采用生成器:邊循環(huán),邊計算的機制—>generator

10 *args 和 **kwargs

題目:說明*args 和 **kwargs的使用

1. *args 的使用

當(dāng)你不確定你的函數(shù)里將要傳遞多少參數(shù)時你可以用*args.例如,它可以傳遞任意數(shù)量的參數(shù):

>>> def print_everything(*args):
        for count, thing in enumerate(args):
...         print '{0}. {1}'.format(count, thing)
...
>>> print_everything('apple', 'banana', 'cabbage')
0. apple
1. banana
2. cabbage

2. **kwargs 的使用

**kwargs允許你使用沒有事先定義的參數(shù)名:

>>> def table_things(**kwargs):
...     for name, value in kwargs.items():
...         print '{0} = {1}'.format(name, value)
...
>>> table_things(apple = 'fruit', cabbage = 'vegetable')
cabbage = vegetable
apple = fruit

3. 其他

  • *args和**kwargs可以同時在函數(shù)的定義中,但是*args必須在**kwargs前面.
  • 任何函數(shù)都可以用 universal_func(*args, **kwargs)表達(dá)
  • 當(dāng)調(diào)用函數(shù)時你也可以用*和**語法
def print_three_things(a, b, c):
    print('a = {0}, b = {1}, c = {2}'.format(a,b,c))

mylist = ['aardvark', 'baboon', 'cat']
print_three_things(*mylist)

"""
a = aardvark, b = baboon, c = cat
"""

11 Python垃圾回收機制

題目:描述Python的垃圾回收機制

Python GC主要使用引用計數(shù)(reference counting)來跟蹤和回收垃圾币喧。在引用計數(shù)的基礎(chǔ)上柜裸,通過“標(biāo)記-清除”(mark and sweep)解決容器對象可能產(chǎn)生的循環(huán)引用問題,通過“分代回收”(generation collection)以空間換時間的方法提高垃圾回收效率粱锐。

1. 引用計數(shù)

PyObject是每個對象必有的內(nèi)容疙挺,其中ob_refcnt就是做為引用計數(shù)。當(dāng)一個對象有新的引用時怜浅,它的ob_refcnt就會增加铐然,當(dāng)引用它的對象被刪除,它的ob_refcnt就會減少.引用計數(shù)為0時恶座,該對象生命就結(jié)束了搀暑。

  • 優(yōu)點:簡單、實時
  • 缺點:維護(hù)引用計數(shù)消耗資源跨琳、循環(huán)引用

2. 標(biāo)記-清除機制

基本思路是先按需分配自点,等到?jīng)]有空閑內(nèi)存的時候從寄存器和程序棧上的引用出發(fā),遍歷以對象為節(jié)點脉让、以引用為邊構(gòu)成的圖桂敛,把所有可以訪問到的對象打上標(biāo)記,然后清掃一遍內(nèi)存空間溅潜,把所有沒標(biāo)記的對象釋放术唬。

3. 分代回收

分代回收的整體思想是:將系統(tǒng)中的所有內(nèi)存塊根據(jù)其存活時間劃分為不同的集合,每個集合就成為一個“代”滚澜,垃圾收集頻率隨著“代”的存活時間的增大而減小粗仓,存活時間通常利用經(jīng)過幾次垃圾回收來度量。

Python默認(rèn)定義了三代對象集合设捐,索引數(shù)越大借浊,對象存活時間越長。
舉例: 當(dāng)某些內(nèi)存塊M經(jīng)過了3次垃圾收集的清洗之后還存活時萝招,我們就將內(nèi)存塊M劃到一個集合A中去蚂斤,而新分配的內(nèi)存都劃分到集合B中去。當(dāng)垃圾收集開始工作時即寒,大多數(shù)情況都只對集合B進(jìn)行垃圾回收橡淆,而對集合A進(jìn)行垃圾回收要隔相當(dāng)長一段時間后才進(jìn)行,這就使得垃圾收集機制需要處理的內(nèi)存少了母赵,效率自然就提高了逸爵。在這個過程中,集合B中的某些內(nèi)存塊由于存活時間長而會被轉(zhuǎn)移到集合A中凹嘲,當(dāng)然师倔,集合A中實際上也存在一些垃圾,這些垃圾的回收會因為這種分代的機制而被延遲周蹭。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趋艘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凶朗,更是在濱河造成了極大的恐慌瓷胧,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棚愤,死亡現(xiàn)場離奇詭異搓萧,居然都是意外死亡,警方通過查閱死者的電腦和手機宛畦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門瘸洛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人次和,你說我怎么就攤上這事反肋。” “怎么了踏施?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵石蔗,是天一觀的道長。 經(jīng)常有香客問我畅形,道長抓督,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任束亏,我火速辦了婚禮铃在,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碍遍。我一直安慰自己定铜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布怕敬。 她就那樣靜靜地躺著揣炕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪东跪。 梳的紋絲不亂的頭發(fā)上畸陡,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天鹰溜,我揣著相機與錄音,去河邊找鬼丁恭。 笑死曹动,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牲览。 我是一名探鬼主播墓陈,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼第献!你這毒婦竟也來了贡必?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤庸毫,失蹤者是張志新(化名)和其女友劉穎仔拟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體飒赃,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡理逊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了盒揉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晋被。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖刚盈,靈堂內(nèi)的尸體忽然破棺而出羡洛,到底是詐尸還是另有隱情,我是刑警寧澤藕漱,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布欲侮,位于F島的核電站,受9級特大地震影響肋联,放射性物質(zhì)發(fā)生泄漏威蕉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一橄仍、第九天 我趴在偏房一處隱蔽的房頂上張望韧涨。 院中可真熱鬧,春花似錦侮繁、人聲如沸虑粥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娩贷。三九已至,卻和暖如春锁孟,著一層夾襖步出監(jiān)牢的瞬間彬祖,已是汗流浹背茁瘦。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留储笑,地道東北人甜熔。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像南蓬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哑了,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項目接著寫寫一名3年工作經(jīng)驗的J...
    燕京博士閱讀 7,548評論 1 118
  • 〇赘方、前言 本文共108張圖,流量黨請慎重弱左! 歷時1個半月窄陡,我把自己學(xué)習(xí)Python基礎(chǔ)知識的框架詳細(xì)梳理了一遍。 ...
    Raxxie閱讀 18,922評論 17 410
  • 兩本不錯的書: 《Python參考手冊》:對Python各個標(biāo)準(zhǔn)模塊拆火,特性介紹的比較詳細(xì)跳夭。 《Python核心編程...
    靜熙老師哈哈哈閱讀 3,359評論 0 80
  • 準(zhǔn)備工作 1.首先對電腦磁盤進(jìn)行分區(qū) 在windows界面找計算機→右鍵管理→磁盤管理,裝Ubuntu分配的硬盤大...
    yutingBai閱讀 409評論 0 0
  • 在儲蓄情感賬戶上首先具備的應(yīng)該就是熱情们镜、理解币叹、幫助……這都屬于存款,建立感情模狭,維持良好關(guān)系颈抚,當(dāng)有一天我們需要幫忙的...
    素10閱讀 335評論 0 0