2022年3月28日 星期一

Python 函式的位置引數與關鍵字引數

之前提到了函式入門,

在呼叫函式的時候,

引數的帶入有不同的類型,

這就是今天要來探討的

Python 函式的位置引數與關鍵字引數

定義函式的時候,

傳入的變數名為參數;

相對的在呼叫函式的時候,

傳入函式的值就叫做引數 argument  。


位置引數 ( positional argument )

從範例的程式中可以看到,

第一次呼叫 sum_ab 這個函式,

帶入了兩個引數 ( 1, 2 )

這兩個引數會依序由左至右傳入函式

關鍵字引數 ( keyword argument )

而第二個呼叫函式的方式,

直接將要傳入的引數指定給特定的參數,

故這種做法又稱為 named argument ,

函式會以引數指定的名稱來取值


這兩種是可以混用的,

但是順序上有講究,

位置引數必須寫在關鍵字引數之前,

否則就會出現語法錯誤

SyntaxError: positional argument follows keyword argument

以上就是今天的主題

Python 函式的位置引數與關鍵字引數


2022年3月25日 星期五

侏儸紀世界:棘盜龍

之前介紹了多刺甲龍,

是屬於大自然的產物,

不過今天的主角則不同

侏儸紀世界:棘盜龍

棘盜龍作為吳博士的研究對象之一,

屬於混種恐龍,

基因來自於伶盜龍與棘龍,

當然棘盜龍也屬於肉食性恐龍


跟棘龍相同,

棘盜龍同樣也喜歡吃魚,

除了魚以外,

也喜歡活餌這類食物。


故園區內的遊客對棘盜龍而言,

就是一個個走動的食物,

一旦逃脫,

就是一個迅速的頂級掠食者,

實在不是一個好消息。


棘盜龍體型不大,

但是無懼於其他較大型的恐龍,

同樣也會主動的攻擊,

算是侵略性十足的肉食性恐龍


還沒有訂閱的朋友,

記得點選影片右下角的訂閱按紐,

才能接受頻道的最新動態消息

2022年3月18日 星期五

Python 內建函式 exec與 eval的差異

之前介紹過 Python 的函式入門,

那屬於使用者自訂的函式,

其實 Python 內建有許多函式可用,

這就是今天要來談的主題

Python 內建函式 exec與 eval的差異

exec 與 eval 兩者非常的相似,

用法上也很雷同,

其後可以帶兩個以字典表示的廣域變數與區域變數作為參數

範例程式碼如下:


    """eval 與 exec"""
    a = 1
    b = 2

    exec('print(int(a)+int(b))', {'a': '2', 'b': '3'})
    print(a, b)
    eval('print(int(a)+int(b))', {'a': '4', 'b': '5'})
    print(a, b)

    print(exec(input('please enter :')))
    print(eval(input('please enter :')))


使用 help() 分別查詢 exec與eval 兩者,

說明上大同小異


上面的範例程式執行的結果可以發現,

同樣執行 a+b 都不影響原本 a與b 的初始值

a = 1
b = 2

那為何要多此一舉,

不直接寫 Python 的程式碼呢?

這是因為 exec與eval 兩者,

能夠以動態方式執行使用者自訂的程式碼,

若將範例程式碼寫成文字檔丟給 Python 程式讀取,

不就能達到動態修改並執行程式碼了,

不過相對的也造成了部分的安全性問題。


不過在範例程式中讓使用者輸入執行的運算時,

可以看到 exec 的執行結果為 None ,

這是由於 exec 並不回傳執行的結果,

而 eval 能將運算結果傳回,

這就是兩者很顯著的差異,

以上就是今天要介紹的主題

Python 內建函式 exec與 eval的差異