好程式設計師Python培訓分享Python面試寶典之基礎篇-03
好程式設計師 Python 培訓分享 Python 面試寶典之基礎篇 -03
題目011:Python中為什麼沒有函式過載?
點評 :C++、Java、C#等諸多程式語言都支援函式過載,所謂函式過載指的是在同一個作用域中有多個同名函式,它們擁有不同的引數列表(引數個數不同或引數型別不同或二者皆不同),可以相互區分。過載也是一種多型性,因為通常是在編譯時透過引數的個數和型別來確定到底呼叫哪個過載函式,所以也被稱為編譯時多型性或者叫前繫結。這個問題的潛臺詞其實是問面試者是否有其他程式語言的經驗,是否理解Python是動態型別語言,是否知道Python中函式的可變引數、關鍵字引數這些概念。
首先Python是解釋型語言,函式過載現象通常出現在編譯型語言中。其次Python是動態型別語言,函式的引數沒有型別約束,也就無法根據引數型別來區分過載。再者Python中函式的引數可以有預設值,可以使用可變引數和關鍵字引數,因此即便沒有函式過載,也要可以讓一個函式根據呼叫者傳入的引數產生不同的行為。
題目012:用Python程式碼實現Python內建函式max。
點評 :這個題目看似簡單,但實際上還是比較考察面試者的功底。因為Python內建的 max 函式既可以傳入可迭代物件找出最大,又可以傳入兩個或多個引數找出最大;最為關鍵的是還可以透過命名關鍵字引數 key 來指定一個用於元素比較的函式,還可以透過 default 命名關鍵字引數來指定當可迭代物件為空時返回的預設值。
下面的程式碼僅供參考:
def my_max ( * args, key = None , default = None ):
""" 獲取可迭代物件中最大的元素或兩個及以上實參中最大的元素 :param args: 一個可迭代物件或多個元素 :param key: 提取用於元素比較的特徵值的函式,預設為None :param default: 如果可迭代物件為空則返回該預設值,如果沒有給預設值則引發ValueError異常 :return: 返回可迭代物件或多個元素中的最大元素 """
if len (args) == 1 and len (args[ 0 ]) == 0 :
if default:
return default
else :
raise ValueError ( 'max() arg is an empty sequence' )
items = args[ 0 ] if len (args) == 1 else args
max_elem, max_value = items[ 0 ], items[ 0 ]
if key:
max_value = key(max_value)
for item in items:
value = item
if key:
value = key(item)
if value > max_value:
max_elem, max_value = item, value
return max_elem
題目013:寫一個函式統計傳入的列表中每個數字出現的次數並返回對應的字典。
點評 :送人頭的題目,不解釋。
def count_letters (items):
result = {}
for item in items:
if isinstance (item, ( int , float )):
result[item] = result . get(item, 0 ) + 1
return result
也可以直接使用Python標準庫中 collections 模組的 Counter 類來解決這個問題, Counter 是 dict 的子類,它會將傳入的序列中的每個元素作為鍵,元素出現的次數作為值來構造字典。
from collections import Counter
def count_letters (items):
counter = Counter(items)
return {key: value for key, value in counter . items() \
if isinstance (key, ( int , float ))}
題目014:使用Python程式碼實現遍歷一個資料夾的操作。
Python標準庫 os 模組的 walk 函式提供了遍歷一個資料夾的功能,它返回一個生成器。可以透過這個生成器來獲得資料夾下所有的檔案和資料夾。
import os
g = os . walk( '/Users/Hao/Downloads/' ) for path, dir_list, file_list in g:
for dir_name in dir_list:
print (os . path . join(path, dir_name))
for file_name in file_list:
print (os . path . join(path, file_name))
說明 : os.path 模組提供了很多進行路徑操作的工具函式,在專案開發中也是經常會用到的。
題目015:現有2元、3元、5元共三種面額的貨幣,如果需要找零99元,一共有多少種找零的方式?
點評 :還有一個非常類似的題目:“一個小朋友走樓梯,一次可以走1個臺階、2個臺階或3個臺階,問走完10個臺階一共有多少種走法?”,這兩個題目的思路是一樣,如果用遞迴函式來寫的話非常簡單。
from functools import lru_cache
@lru_cache() def change_money (total):
if total == 0 :
return 1
if total < 0 :
return 0
return change_money(total - 2 ) + change_money(total - 3 ) + change_money(total - 5 )
說明
:在上面的程式碼中,我們用
lru_cache
裝飾器裝飾了遞迴函式
change_money
,如果不做這個最佳化,上面程式碼的漸近時間複雜度將會是
,而如果引數
total
的值是
99
,這個運算量是非常巨大的。
lru_cache
裝飾器會快取函式的執行結果,這樣就可以減少重複運算所造成的開銷,這是空間換時間的策略,也是動態規劃的程式設計思想。
溫馨提示
:Python面試寶典會持續更新,從基礎到專案實戰的內容都會慢慢覆蓋到。雖然每天只更新5個題目,但是每道題擴散出的資訊量還是比較大的,希望對找工作的小夥伴所有幫助。
你的點贊、收藏和評論都是我繼續建立的動力,請不要吝惜你的讚美
。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2687420/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Python培訓分享Python程式設計師面試技巧程式設計師Python面試
- 好程式設計師Python培訓分享基礎入門Django程式設計師PythonDjango
- 好程式設計師Python培訓分享Python入門基礎知識程式設計師Python
- Python面試寶典之基礎篇-05Python面試
- 好程式設計師大資料培訓分享大資料面試寶典三程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典四程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典六程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典一程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典二程式設計師大資料面試
- 好程式設計師Python培訓分享Python系列之字串的使用程式設計師Python字串
- 好程式設計師Python培訓分享四款Python程式庫程式設計師Python
- 好程式設計師Python培訓分享機器學習面試題一程式設計師Python機器學習面試題
- 好程式設計師Python培訓分享Python系列之迴圈結構程式設計師Python
- 好程式設計師Java培訓分享Java面試題之Java集合篇三程式設計師Java面試題
- 好程式設計師Python培訓分享零基礎Python爬蟲學習線路程式設計師Python爬蟲
- 好程式設計師Python培訓分享Python如何呼叫RPC介面程式設計師PythonRPC
- 好程式設計師Python培訓分享Python配置gRPC環境程式設計師PythonRPC
- 好程式設計師Python培訓分享Python異常處理程式設計師Python
- 好程式設計師Python培訓分享numpy簡介程式設計師Python
- 好程式設計師Python培訓分享Django中介軟體基礎用法詳解程式設計師PythonDjango
- 好程式設計師Java培訓分享Java面試題集合篇一程式設計師Java面試題
- 好程式設計師Java培訓分享Java面試題集合篇二程式設計師Java面試題
- 好程式設計師web前端培訓分享面試題Session、Cookie基礎知識程式設計師Web前端面試題SessionCookie
- 好程式設計師Python培訓分享Python系列之分支結構程式設計師Python
- 好程式設計師Python培訓分享Python爬蟲工具列表大全程式設計師Python爬蟲
- 好程式設計師Python培訓分享Python爬蟲相關框架程式設計師Python爬蟲框架
- 好程式設計師Python培訓分享學Python要注意什麼程式設計師Python
- 好程式設計師Python培訓分享如何寫Python裝飾器程式設計師Python
- 好程式設計師Python培訓之Django中介軟體基礎用法詳解程式設計師PythonDjango
- 好程式設計師web前端培訓分享Vue面試題程式設計師Web前端Vue面試題
- 好程式設計師Java培訓分享Mybatis面試題集合程式設計師JavaMyBatis面試題
- 好程式設計師Python培訓分享Python生成器與迭代器程式設計師Python
- 好程式設計師Python培訓分享Python之初識網路爬蟲程式設計師Python爬蟲
- 好程式設計師web前端培訓分享HTMLCSS學習之CSS基礎程式設計師Web前端HTMLCSS
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- 好程式設計師Python培訓分享函數語言程式設計之匿名函式程式設計師Python函數函式
- 好程式設計師Python培訓分享開發工具推薦程式設計師Python
- 好程式設計師Python培訓分享簡述fetchone()函式程式設計師Python函式