Python面試寶典之基礎篇-05
題目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:平常工作中用什麼工具進行靜態程式碼分析。
點評:靜態程式碼分析工具可以從程式碼中提煉出各種靜態屬性,這使得開發者可以對程式碼的複雜性、可維護性和可讀性有更好的瞭解,這裡所說的靜態屬性包括:
- 程式碼是否符合編碼規範,例如:PEP-8。
- 程式碼中潛在的問題,包括:語法錯誤、縮排問題、匯入缺失、變數覆蓋等。
- 程式碼中的壞味道。
- 程式碼的複雜度。
- 程式碼的邏輯問題。
工作中靜態程式碼分析主要用到的是 Pylint和 Flake8。Pylint可以檢查出程式碼錯誤、壞味道、不規範的程式碼等問題,較新的版本中還提供了程式碼複雜度統計資料,可以生成檢查報告。Flake8封裝了Pyflakes(檢查程式碼邏輯錯誤)、McCabe(檢查程式碼複雜性)和Pycodestyle(檢查程式碼是否符合PEP-8規範)工具,它可以執行這三個工具提供的檢查。
題目23:說一下你知道的Python中的魔術方法。
點評:魔術方法也稱為魔法方法,是Python中的特色語法,也是面試中的高頻問題。
題目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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Python培訓分享Python面試寶典之基礎篇-03程式設計師Python面試
- iOS跳槽寶典-面試技術基礎篇iOS面試
- Java面試寶典之—-java基礎(含答案)Java面試
- Oracle面試寶典-鎖篇Oracle面試
- Oracle 面試寶典-DG篇Oracle面試
- Oracle 面試寶典-UNDO篇Oracle面試
- Oracle 面試寶典-RAC篇Oracle面試
- Oracle面試寶典-事務篇Oracle面試
- Oracle面試寶典-等待事件篇Oracle面試事件
- Oracle面試寶典-引數篇Oracle面試
- Redis面試寶典-持久化篇Redis面試持久化
- MySQL面試寶典-檔案篇MySql面試
- Android面試之Java 基礎篇Android面試Java
- Oracle面試寶典-程式結構篇Oracle面試
- MySQL面試寶典-主從複製篇MySql面試
- Java面試寶典之開源框架!Java面試框架
- Python企業面試題3 —— 基礎篇Python面試題
- Python企業面試題2 —— 基礎篇Python面試題
- Java 面試寶典Java面試
- Oracle面試寶典-記憶體結構篇Oracle面試記憶體
- Android 面試基礎篇Android面試
- Java面試寶典-2017Java面試
- C++面試寶典C++面試
- 【JAVA】【面試】【基礎篇】- 集合Java面試
- 【JAVA面試資料】程式設計師面試之葵花寶典2Java面試程式設計師
- 【JAVA面試資料】程式設計師面試之葵花寶典1Java面試程式設計師
- JAVA葵花寶典(基礎版)Java
- Python基礎面試題30問!Python基礎教程Python面試題
- python之字典(dict)基礎篇Python
- Java面試題-基礎篇一Java面試題
- Java面試題-基礎篇二Java面試題
- 2019年Java面試-基礎篇Java面試
- Java面試題-基礎篇四Java面試題
- Java面試題-基礎篇五Java面試題
- 前端基礎面試題@JS篇前端面試題JS
- 前端基礎面試題@CSS篇前端面試題CSS
- Java面試題基礎篇(一)Java面試題
- Java面試題基礎篇(二)Java面試題