真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中為什么沒有函數(shù)重載

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

堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都成都VR全景小微創(chuàng)業(yè)公司專業(yè)提供企業(yè)網(wǎng)站建設(shè)營銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。

題目:Python中為什么沒有函數(shù)重載?

點評:C++、Java、C#等諸多編程語言都支持函數(shù)重載,所謂函數(shù)重載指的是在同一個作用域中有多個同名函數(shù),它們擁有不同的參數(shù)列表(參數(shù)個數(shù)不同或參數(shù)類型不同或二者皆不同),可以相互區(qū)分。重載也是一種多態(tài)性,因為通常是在編譯時通過參數(shù)的個數(shù)和類型來確定到底調(diào)用哪個重載函數(shù),所以也被稱為編譯時多態(tài)性或者叫前綁定。這個問題的潛臺詞其實是問面試者是否有其他編程語言的經(jīng)驗,是否理解Python是動態(tài)類型語言,是否知道Python中函數(shù)的可變參數(shù)、關(guān)鍵字參數(shù)這些概念。

首先Python是解釋型語言,函數(shù)重載現(xiàn)象通常出現(xiàn)在編譯型語言中。其次Python是動態(tài)類型語言,函數(shù)的參數(shù)沒有類型約束,也就無法根據(jù)參數(shù)類型來區(qū)分重載。再者Python中函數(shù)的參數(shù)可以有默認值,可以使用可變參數(shù)和關(guān)鍵字參數(shù),因此即便沒有函數(shù)重載,也要可以讓一個函數(shù)根據(jù)調(diào)用者傳入的參數(shù)產(chǎn)生不同的行為。

題目012:用Python代碼實現(xiàn)Python內(nèi)置函數(shù)max。

點評:這個題目看似簡單,但實際上還是比較考察面試者的功底。因為Python內(nèi)置的max函數(shù)既可以傳入可迭代對象找出最大,又可以傳入兩個或多個參數(shù)找出最大;最為關(guān)鍵的是還可以通過命名關(guān)鍵字參數(shù)key來指定一個用于元素比較的函數(shù),還可以通過default命名關(guān)鍵字參數(shù)來指定當可迭代對象為空時返回的默認值。

下面的代碼僅供參考:

def my_max(*args, key=None, default=None):
   """
   獲取可迭代對象中最大的元素或兩個及以上實參中最大的元素
   :param args: 一個可迭代對象或多個元素
   :param key: 提取用于元素比較的特征值的函數(shù),默認為None
   :param default: 如果可迭代對象為空則返回該默認值,如果沒有給默認值則引發(fā)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:寫一個函數(shù)統(tǒng)計傳入的列表中每個數(shù)字出現(xiàn)的次數(shù)并返回對應(yīng)的字典。

點評:送人頭的題目,不解釋。

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的子類,它會將傳入的序列中的每個元素作為鍵,元素出現(xiàn)的次數(shù)作為值來構(gòu)造字典。

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代碼實現(xiàn)遍歷一個文件夾的操作。

Python標準庫os模塊的walk函數(shù)提供了遍歷一個文件夾的功能,它返回一個生成器??梢酝ㄟ^這個生成器來獲得文件夾下所有的文件和文件夾。

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

題目015:現(xiàn)有2元、3元、5元共三種面額的貨幣,如果需要找零99元,一共有多少種找零的方式?

點評:還有一個非常類似的題目:“一個小朋友走樓梯,一次可以走1個臺階、2個臺階或3個臺階,問走完10個臺階一共有多少種走法?”,這兩個題目的思路是一樣,如果用遞歸函數(shù)來寫的話非常簡單。

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裝飾器裝飾了遞歸函數(shù)change_money,如果不做這個優(yōu)化,上面代碼的漸近時間復(fù)雜度將會是 ,而如果參數(shù)total的值是99,這個運算量是非常巨大的。lru_cache裝飾器會緩存函數(shù)的執(zhí)行結(jié)果,這樣就可以減少重復(fù)運算所造成的開銷,這是空間換時間的策略,也是動態(tài)規(guī)劃的編程思想。

到此,相信大家對“Python中為什么沒有函數(shù)重載”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)站標題:Python中為什么沒有函數(shù)重載
分享網(wǎng)址:http://weahome.cn/article/ggoeog.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部