中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中為什么沒有函數重載

發布時間:2021-11-01 17:20:38 來源:億速云 閱讀:232 作者:iii 欄目:編程語言

本篇內容主要講解“Python中為什么沒有函數重載”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python中為什么沒有函數重載”吧!

題目: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 Counterdef 
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模塊提供了很多進行路徑操作的工具函數,在項目開發中也是經常會用到的。 如果題目明確要求不能使用os.walk函數,那么可以使用os.listdir函數來獲取指定目錄下的文件和文件夾,然后再通過循環遍歷用os.isdir函數判斷哪些是文件夾,對于文件夾可以通過遞歸調用進行遍歷,這樣也可以實現遍歷一個文件夾的操作。

題目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中為什么沒有函數重載”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武功县| 龙泉市| 霍邱县| 晋宁县| 扎囊县| 绵阳市| 鲁山县| 怀来县| 五家渠市| 泾源县| 岳阳县| 方山县| 玛曲县| 磐安县| 攀枝花市| 舒城县| 樟树市| 临洮县| 澜沧| 临江市| 广汉市| 金平| 双柏县| 台州市| 灵璧县| 鹤岗市| 保靖县| 修武县| 大名县| 奉贤区| 错那县| 隆回县| 抚松县| 石门县| 神池县| 日喀则市| 菏泽市| 交口县| 文安县| 中江县| 伽师县|