天天看點

初識python之匯率轉換篇

前期文章介紹了一些文法知識,那麼本期文章我們不講文法,來實際操作一下,緩解一下學習python的乏味。

案例1

匯率計算

實作美元和人民币之間的匯率計算。涉及知識有函數,條件語句,字元串,while循環,還有一些簡單的數字運算,相信大家都很好奇,下面讓我們來看一看吧。

def convert_currency(im, er):
    out = im * er
    return out
def main():
    currency_str_value = 0
    while currency_str_value != "":
        USD_VS_RMB = 6.77
        # 輸入帶機關的貨币金額
        currency_str_value = input('請輸入帶機關貨币的金額: ')
        # 擷取貨币機關
        unit = currency_str_value[-3:]  # 第一次判斷
        if unit == 'CNY':
            exchange_rate = 1 / USD_VS_RMB
        elif unit == 'USD':
            exchange_rate = USD_VS_RMB
        else:
            exchange_rate = -1
        if exchange_rate != -1:
            in_money = eval(currency_str_value[0:3])
            # 使用lambda定義函數
            convert_currency2 = lambda x: x * exchange_rate
            # 調用lambda函數
            out_money = convert_currency2(in_money)
            print('轉換後的金額是: ', out_money)
        else:
            print('無法計算')
if __name__ == "__main__":
    main()      
初識python之匯率轉換篇

代碼解釋:

首先我們定義了關于運算匯率的函數,設定兩個參數,便于後面我們的傳入,這個叫形參,我們後面傳入的叫實參,然後我又定義了一個函數,有的小夥伴可能看不懂後面那個`if name == “main”:

main()是什麼,這裡我解釋一下這個函數

一個python的檔案有兩種使用的方法,第一是直接作為腳本執行,第二是import到其他的python腳本中被調用(子產品重用)執行。是以if name == ‘main’: 的作用就是控制這兩種情況執行代碼的過程,在if name == ‘main’: 下的代碼隻有在第一種情況下(即檔案作為腳本直接執行)才會被執行,而import到其他腳本中是不會被執行的。

是以這裡的隻有上面的代碼正确,他才會執行

代碼内部的一些我都在前期文章都有介紹,比如索引這些,還有while循環,當然有一個lambda函數沒有介紹,這裡我就介紹一下

lambda匿名函數的格式:冒号前是參數,可以有多個,用逗号隔開,冒号右邊的為表達式。其實lambda傳回值是一個函數的位址,也就是函數對象。

注:下面的是其他部落格的文章,我隻是為了大家好了解,複制過來的,希望大家多多了解

Python中的lambda函數

在Python中,我們使用lambda關鍵字來聲明一個匿名函數,這就是為什麼我們将它們稱為“lambda函數”。匿名函數是指沒有聲明函數名稱的函數。盡管它們在文法上看起來不同,lambda函數的行為方式與使用def關鍵字聲明的一般函數相同。以下是Python中 lambda函數的特點:

lambda函數可以接受任意數量的參數,但函數隻能包含一個表達式。表達式是lambda函數執行的一段代碼,它可以傳回任何值,也可以不傳回任何值。

lambda函數可以傳回函數對象。

從文法上講,lambda函數隻能有一個表達式。

在本文中,我們将詳細讨論Python中的lambda函數,并示範使用它們的例子。

建立一個lambda函數

我們使用以下文法來聲明lambda函數:

正如上面所述,我們可以有很多個參數,但是隻能有一個表達式。lambda操作符不能有任何聲明,它傳回一個函數對象,我們可以将此函數對象指派給任何變量。

例如:

這段代碼中,lambda num: num% 2是lambda函數。num是參數,num%2是表達式,用來計算後傳回結果。該表達式擷取輸入參數除以2的模數并傳回。将5作為參數傳入,通過除以2進行計算,得到餘數1.

你應該注意到,上面腳本中的lambda函數沒有配置設定任何名稱。它隻是傳回一個函數對象,該對象被配置設定給辨別符remainder。然而,盡管函數是匿名的,我們還是可以像調用普通函數那樣調用它。聲明語句如下:

上面定義的lambda函數傳回一個product對象,該對象具有兩個參數的值。

為什麼使用lambda 函數?

Lambda函數主要在短時間内需要一個函數時才使用。當你想要将函數作為參數傳遞給高階函數(即以其他函數作為參數的函數)時,通常使用這種方法。

下面的例子示範了在其他函數中使用匿名函數:

在上面的例子中,我們有一個函數,該函數傳入一個參數,将它與一個未知數相乘。我們來示範一下怎樣使用上面的函數:

在上面的腳本中,我們使用一個lambda函數與我們傳入的數字10相乘。同樣的函數也可以用來與數字1000相乘。

我們很有可能會使用到testfunc( )函數來在一個程式中定義上面的兩個lambda函數:

Lambda函數可以和Python的内置函數一起使用,例如map(),filter()等。

在接下來的章節中,我們将讨論怎樣在各種Python内置函數中使用lambda函數。

filter() 函數

Python中的filter( )函數接受一個清單參數和一個lambda函數參數。它的文法如下:

這裡的object必須是一個傳回布爾值的lambda函數。對疊代器中的每一項都會調用該函數來計算其結果是True或False。請注意,本函數隻能接受一個疊代器作為輸入。

lambda函數,和需要被處理的清單,被一同傳遞給filter( )函數。filter()函數将傳回一個新的清單,新的清單中隻包含舊清單中被lambda函數處理後傳回值為True的那些元素。請參考下面給出的例子:

在上面的例子中,我們先建立了一個包含一系列整數的清單number_list,接着我們建立了一個lambda函數來檢查大于7的整數。此lambda函數作為參數傳遞給filter()函數,過濾後的結果儲存在一個名為filtered_list的新清單中。

map( ) 函數

map( )函數是另一個以一個函數對象和一個清單作為參數的内置函數。map函數的文法如下:

傳入map()函數的疊代器可以是字典,清單等。map()函數主要是根據lambda函數定義的邏輯來将輸入疊代器中的每一項映射到輸出疊代器中的相關項。請參考以下的例子:

在上面的腳本中,我們先定義了一個由随機數組成的清單numbers_list,接着我們調用map()函數,并傳遞一個lambda函數作為參數。此lambda函數計算每個數除以2之後的餘數。映射的結果儲存在一個名為mapped_list的清單中。最後,我們列印出清單的内容。