python面試的100題(18)

函數

52.python常見的列表推導式?

列表推導式書寫形式:  html

[表達式 for 變量 in 列表]    python

或者  git

[表達式 for 變量 in 列表 if 條件]程序員

參考地址:https://www.cnblogs.com/yupeng/p/3428556.htmlgithub

53.簡述read、readline、readlines的區別?

(1) read(size):按字節從頭讀到最後,返回的是一個字符串類型,其中參數size是表示讀取的字節數,size的默認是讀取所有。spring

(2) readline() :每次只讀取一行,跟read同樣,也是返回的是str字符串對象。數組

(3) readlines() : 讀取文件的全部行,把讀取的每一行做爲一個元素放在一個列表中,返回的是一個列表對象。數據結構

參考地址:https://blog.csdn.net/gangzi__csdn/article/details/80703542app

54.什麼是Hash(散列函數)?

散列的概念屬於查找,它不以關鍵字的比較爲基本操做,採用直接尋址技術。在理想狀況下,查找的指望時間爲O(1)。函數

hash函數就是把任意長的輸入字符串變化成固定長的輸出字符串的一種函數。輸出字符串的長度稱爲hash函數的位數。

散列(Hashing)經過散列函數將要檢索的項與索引(散列,散列值)關聯起來,生成一種便於搜索的數據結構(散列表)。

性質

(1)肯定性:哈希的散列值不一樣,那麼哈希的原始輸入也就不一樣。

(2)不肯定性:同一個散列值頗有可能對應多個不一樣的原始輸入。稱爲「哈希碰撞」。

參考地址:https://blog.csdn.net/m0_37925202/article/details/82015731

55.python函數重載機制?

參考地址:https://blog.csdn.net/lx1607/article/details/50530045

56.寫一個函數找出一個整數數組中,第二大的數

arr_ = arr
arr_[np.argmax(arr_)] = np.min(arr)
print(arr_)
print("# arr中最大的數爲{},位於第{}位".format(np.max(arr_), np.argmax(arr_)+1))

57.手寫一個判斷時間的裝飾器

import datetime


class TimeException(Exception):
    def __init__(self, exception_info):
        super().__init__()
        self.info = exception_info

    def __str__(self):
        return self.info


def timecheck(func):
    def wrapper(*args, **kwargs):
        if datetime.datetime.now().year == 2019:
            func(*args, **kwargs)
        else:
            raise TimeException("函數已過期")

    return wrapper


@timecheck
def test(name):
    print("Hello {}, 2019 Happy".format(name))


if __name__ == "__main__":
    test("backbp")

結果爲:Hello backbp, 2019 Happy

58.使用Python內置的filter()方法來過濾?

list(filter(lambda x: x % 2 == 0, range(10)))

59.編寫函數的4個原則

一、函數設計要儘可能短小,嵌套層次不宜過深。避免過長函數,嵌套最好能控制在3層以內。
二、函數申明應該合理,簡單,易於使用。除函數名可以夠正確反映其大致功能外,參數的設計也應該簡潔明瞭,參數個數不宜太多。
三、函數參數設計應該考慮向下兼容。能夠經過加入默認參數來避免退化。

四、一個函數只作一件事,就要儘可能保證抽象層級的一致性,全部語句儘可能在一個粒度上。若在一個函數中處理多件事,不利於代碼的重用。

Python中函數設計的好習慣還包括,不要在函數中定義可變對象做爲默認值,使用異常替換返回錯誤,保證經過單元測試等。

參考地址:https://www.jianshu.com/p/ef4196b47659

60.函數調用參數的傳遞方式是值傳遞仍是引用傳遞?

函數參數傳遞機制問題在本質上是調用函數(過程)和被調用函數(過程)在調用發生時進行通訊的方法問題。基本的參數傳遞機制有兩種:值傳遞和引用傳遞。

值傳遞(passl-by-value)過程當中,被調函數的形式參數做爲被調函數的局部變量處理,即在堆棧中開闢了內存空間來存放由主調函數放進來的實參的值,從而想成爲了實參的一個副本。值傳遞的特色是被調函數對形勢參數的任何操做都是做爲局部變量進行,不會影響主調函數的實參變量的值。

引用傳遞(pass-by-reference)過程當中,被調函數的形式參數雖然也做爲局部變量在堆棧中開闢了內存空間,但這時存放的是由主調函數放進來的實參變量的地址。被調函數對形參的任何操做都被處理成間接尋址,即經過堆棧中存放的地址訪問主調函數中的實參變量。正由於如此,被調函數對形參作任何的操做都影響了主調函數中的實參變量。

在python中,能夠有多個引用同時指向一個內存。

python不容許程序員選擇採用傳值仍是傳引用。python參數傳遞採用的確定是「傳對象引用」的方式。這種方式至關於傳值和傳引用的一種綜合。若是函數收到的是一個可變對象(字典、列表)的引用,就能修改對象的原始值--至關於‘傳引用’來傳遞對象。若是函數收到的是一個不可變對象(數字、字符或元組)的引用,就不能直接修改原始對象--至關於經過‘值傳遞’來傳遞對象。

參考地址:https://www.cnblogs.com/spring-haru/p/9320493.html

相關文章
相關標籤/搜索