Python面試寶典之基礎篇-05

千鋒Python唐小強發表於2020-06-12

題目21:輸入年月日,判斷這個日期是這一年的第幾天。

方法一:不使用標準庫中的模組和函式。

def is_leap_year(year):
    """判斷指定的年份是不是閏年,平年返回False,閏年返回True"""
    return year % 4 == 0 and year % 100 != 0 or year % 400 == 0def which_day(year, month, date):
    """計算傳入的日期是這一年的第幾天"""
    # 用巢狀的列表儲存平年和閏年每個月的天數
    days_of_month = [
        [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
        [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    ]
    days = days_of_month[is_leap_year(year)][:month - 1]
    return sum(days) + date

方法二:使用標準庫中的 datetime模組。

import datetimedef which_day(year, month, date):
    end = datetime.date(year, month, date)
    start = datetime.date(year, 1, 1)
    return (end - start).days + 1

題目22:平常工作中用什麼工具進行靜態程式碼分析。

點評:靜態程式碼分析工具可以從程式碼中提煉出各種靜態屬性,這使得開發者可以對程式碼的複雜性、可維護性和可讀性有更好的瞭解,這裡所說的靜態屬性包括:
  1. 程式碼是否符合編碼規範,例如:PEP-8。
  2. 程式碼中潛在的問題,包括:語法錯誤、縮排問題、匯入缺失、變數覆蓋等。
  3. 程式碼中的壞味道。
  4. 程式碼的複雜度。
  5. 程式碼的邏輯問題。

工作中靜態程式碼分析主要用到的是 PylintFlake8。Pylint可以檢查出程式碼錯誤、壞味道、不規範的程式碼等問題,較新的版本中還提供了程式碼複雜度統計資料,可以生成檢查報告。Flake8封裝了Pyflakes(檢查程式碼邏輯錯誤)、McCabe(檢查程式碼複雜性)和Pycodestyle(檢查程式碼是否符合PEP-8規範)工具,它可以執行這三個工具提供的檢查。

題目23:說一下你知道的Python中的魔術方法。

點評:魔術方法也稱為魔法方法,是Python中的特色語法,也是面試中的高頻問題。

Python面試寶典之基礎篇-05

題目24:函式引數 *arg**kwargs分別代表什麼?

Python中,函式的引數分為位置引數、可變引數、關鍵字引數、命名關鍵字引數。 *args代表可變引數,可以接收 0個或任意多個引數,當不確定呼叫者會傳入多少個位置引數時,就可以使用可變引數,它會將傳入的引數打包成一個元組。 **kwargs代表關鍵字引數,可以接收用 引數名=引數值的方式傳入的引數,傳入的引數的會打包成一個字典。定義函式時如果同時使用 *args**kwargs,那麼函式可以接收任意引數。

題目25:寫一個記錄函式執行時間的裝飾器。

點評:高頻面試題,也是最簡單的裝飾器,面試者必須要掌握的內容。

方法一:用函式實現裝飾器。

from functools import wrapsfrom time import timedef record_time(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time()
        result = func(*args, **kwargs)
        print(f'{func.__name__}執行時間: {time() - start}秒')
        return result
    return wrapper

方法二:用類實現裝飾器。類有 __call__魔術方法,該類物件就是可呼叫物件,可以當做裝飾器來使用。

from functools import wrapsfrom time import timeclass Record:
    def __call__(self, func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            start = time()
            result = func(*args, **kwargs)
            print(f'{func.__name__}執行時間: {time() - start}秒')
            return result
        return wrapper
說明:裝飾器可以用來裝飾類或函式,為其提供額外的能力,屬於設計模式中的 代理模式
擴充套件:裝飾器本身也可以引數化,例如上面的例子中,如果不希望在終端中顯示函式的執行時間而是希望由呼叫者來決定如何輸出函式的執行時間,可以透過引數化裝飾器的方式來做到,程式碼如下所示。
from functools import wrapsfrom time import timedef record_time(output):
    """可以引數化的裝飾器"""
    def decorate(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            start = time()
            result = func(*args, **kwargs)
            output(func.__name__, time() - start)
            return result
        return wrapper
    return decorate
溫馨提示:Python面試寶典會持續更新,從基礎到專案實戰的內容都會慢慢覆蓋到。雖然每天只更新5個題目,但是每道題擴散出的資訊量還是比較大的,希望對找工作的小夥伴所有幫助。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2698066/,如需轉載,請註明出處,否則將追究法律責任。

相關文章