書接上回,我們繼續(xù)來說說python的面試題,我在各個網(wǎng)站搜集了一些,我給予你們一個推薦的答案,你們可以組織成自己的語言來說出來,讓我們更好的做到面向工資編程
一、Q:說說你對zen of python的理解,你有什么辦法看到它。
A:The Zen of Python是Python語言的指導(dǎo)原則,遵循這些基本原則,輸入import this,然后直接運行即可
二、Q:什么是元類(meta_class)
A:我們定義類來創(chuàng)建對象,但是現(xiàn)在我們知道類也是對象。那么是通過什么來創(chuàng)建類呢?答案就是元類。我們可以將元類稱之為類工廠。如果我們定義了metaclass屬性,Python就會使用這個元類來創(chuàng)建類Foo。注意,編譯器首先讀取
class Foo(object)
,這時并不會在內(nèi)存中創(chuàng)建Foo類。Python會繼續(xù)查找類定義中的
__meatclass__
,如果找到了,就使用它來創(chuàng)建類Foo,如果沒有找到,就使用type來創(chuàng)建類。Python工作流程如下:首先檢查
Foo
中是否具有屬性
__metaclass__
?如果找到,就使用
__metaclass__
定義的元類在內(nèi)存中創(chuàng)建一個類對象。如果在類定義中沒有找到這個屬性,就在模塊級別中進行查找。如果還是沒有找到,就會使用父類Bar中的元類來創(chuàng)建類。注意:類中的
__metaclass__
屬性不會被子類繼承,但是父類中的
__class__
會被繼承。這里寫的比較片面,大家可以參考?https://www.jianshu.com/p/cec91b9ef2a4
三、Q:對比一下dict中 items 與 iteritems
A:items是可以將字典中的所有項,以列表方式返回。因為字典是無序的,所以用items方法返回字典的所有項,也是沒有順序的。
?? iteritems方法作用:與items方法相比作用大致相同,只是它的返回值不是列表,而是一個迭代器。
四、Q:有用過with statement嗎?它的好處是什么?
A:
with
語句的作用是通過某種方式簡化異常處理,它是所謂的上下文管理器的一種
with open( ' output.txt ' , ' w ' ) as f: f.write( ' Hi there! ' )
當(dāng)你要成對執(zhí)行兩個相關(guān)的操作的時候,這樣就很方便,以上便是經(jīng)典例子,with語句會在嵌套的代碼執(zhí)行之后,自動關(guān)閉文件。這種做法的還有另一個優(yōu)勢就是,無論嵌套的代碼是以何種方式結(jié)束的,它都關(guān)閉文件。如果在嵌套的代碼中發(fā)生異常,它能夠在外部exception handler catch異常前關(guān)閉文件。如果嵌套代碼有return/continue/break語句,它同樣能夠關(guān)閉文件
五、Q:說說decorator的用法和它的應(yīng)用場景,如果可以的話,寫一個decorator(裝飾器)
A:裝飾器就是把函數(shù)包裝一下,為函數(shù)添加一些附加功能,裝飾器就是一個函數(shù),參數(shù)為被包裝的函數(shù),返回包裝后的函數(shù):
def d(fp): def _d(*arg, ** karg): print " do sth before fp.. " r = fp(*arg, ** karg) print " do sth after fp.. " return r return _d @d def f(): print " call f "
應(yīng)用場景應(yīng)用場景: 引入日志, 函數(shù)執(zhí)行時間統(tǒng)計, 執(zhí)行函數(shù)前預(yù)備處理, 執(zhí)行函數(shù)后清理功能, 權(quán)限校驗等場景, 緩存, 事務(wù)處理。 當(dāng)函數(shù)可以作為參數(shù)傳遞的語言,可以使用裝飾器
六、Q:如何在一個函數(shù)內(nèi)部修改全局變量
A:利用global 修改全局變量
?
# !/usr/bin/env python # -*- coding: utf-8 -*- a = 1 def change(): global a a = 3 print (a) change() print (a)
?
七、Q:列出5個python標準庫
A:os:提供了不少與操作系統(tǒng)相關(guān)聯(lián)的函數(shù)
? sys: ? 通常用于命令行參數(shù)
? re: ? 正則匹配
? math: 數(shù)學(xué)運算
? datetime:處理日期時間
八、Q:簡述面向?qū)ο笾衉_new__和__init__區(qū)別
A:1、__new__至少要有一個參數(shù),代表當(dāng)前類,此參數(shù)在實例化時由Python解釋器自動識別
? 2、__new__必須要有返回值,返回實例化出來的實例,這點在自己實現(xiàn)__new__時要特別注意,可以return父類(通過super(當(dāng)前類名))__new__出來的實例,或者直接是object的__new__出來的實例
? 3、__init__有一個參數(shù)self,就是這個__new__返回的實例,__init__在__new__的基礎(chǔ)上可以完成一些其它初始化的動作,__init__不需要返回值
? 4、如果__new__創(chuàng)建的是當(dāng)前類的實例,會自動調(diào)用__init__函數(shù),通過return語句里面調(diào)用的__new__函數(shù)的第一個參數(shù)是cls來保證是當(dāng)前類實例,如果是其他類的類名,;那么實際創(chuàng)建返回的就是其他類的實例,其實就不會調(diào)用當(dāng)前類的__init__函數(shù),也不會調(diào)用其他類的__init__函數(shù)。
九、Q:python中生成隨機整數(shù)、隨機小數(shù)、0--1之間小數(shù)方法
A:隨機整數(shù):random.randint(a,b),生成區(qū)間內(nèi)的整數(shù)
? 隨機小數(shù):習(xí)慣用numpy庫,利用np.random.randn(5)生成5個隨機小數(shù)
? 0-1隨機小數(shù):random.random(),括號中不傳參
十、Q:python2和python3區(qū)別?列舉5個
A:1、Python3 使用 print 必須要以小括號包裹打印內(nèi)容,比如?print('hi')
? ?Python2 既可以使用帶小括號的方式,也可以使用一個空格來分隔打印內(nèi)容,比如?print 'hi'
2、python2 range(1,10)返回列表,python3中返回迭代器,節(jié)約內(nèi)存
3、python2中使用ascii編碼,python3中使用utf-8編碼
4、python2中unicode表示字符串序列,str表示字節(jié)序列
? ? ? python3中str表示字符串序列,byte表示字節(jié)序列
5、python2中為正常顯示中文,引入coding聲明,python3中不需要
6、python2中是raw_input()函數(shù),python3中是input()函數(shù)
7、 浮點數(shù)除法操作符“/”和“//”的區(qū)別
"/":
Python2:若為兩個整形數(shù)進行運算,結(jié)果為整形,但若兩個數(shù)中有一個為浮點數(shù),則結(jié)果為浮點數(shù);
Python3:為真除法,運算結(jié)果不再根據(jù)參加運算的數(shù)的類型。
"http://":
Python2:返回小于除法運算結(jié)果的最大整數(shù);從類型上講,與"/"運算符返回類型邏輯一致。
Python3:和 Python2 運算結(jié)果一樣。
?
?
題目都是各種散裝百度來的,答案也是如此,但是自己寫了一遍,也讀了一遍,也覺得自己收獲了不少。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
