從零開始的python計劃#3.1

嘗試使用Python的不同特性

  • 數媒藝術生計算機小白來更新了!!!還有前面#1和2章的基礎知識待我慢慢更新,以下更新內容都適合零基礎的人蔘考,如有不對的地方還望各路大神指正🌟
    也歡迎同專業或是一起正在慢慢學習Python的同學交流🌟.

1 關鍵字參數

正如我們討論的函數可以有參數,我們可以把值傳遞給它們,當函數被調用時,可以通過positional arguments傳遞。
那我們應該如何聲明和定義函數以及如何傳遞參數或關鍵字參數

def print_name(first, last): 
    print("First name %s " %first) 
    print("Last name %s " %last)

fn = "Ming"
ln = "Xiao" 
print_name( fn , ln )

我們有一個print_name的定義函數,它取兩個變量然後用一些字符串格式打印

運行這個得到結果:在這裏插入圖片描述

在print_name的函數中有兩個參數first和last,當我調用這個函數時,我們把fn給first,ln傳遞給last

把它們調換一下
我們可以使用關鍵字參數

for example:在這裏插入圖片描述

這將給出相同的結果,你可能會說這並沒有改變任何東西,因爲我給出的fn和ln仍然是同樣的順序

但如果我調換一下位置
在這裏插入圖片描述
result:
在這裏插入圖片描述

它的結果還是正確的,因爲在這種情況下Python不再監聽參數的位置,而是用關鍵字監聽一個符號,把參數對應到函數的值,這時它不是看參數的先後位置,它會尋找作爲關鍵字的last,並取這個符號的變量。
這就是區別和我們如何應用的方法,用關鍵字參數代替位置參數。

我們也可以把兩者混合


在這裏插入圖片描述

所以這會得到相同的結果,沒有衝突
但如果我這樣做


在這裏插入圖片描述

我會遇到錯誤,運行後Python會拋出一個錯誤,因爲它會先把fn識別爲first(這樣就等於已經有了first),因此它將會在兩個參數之間產生衝突
所以只有把first = ln 改成 last = ln ,程序纔會運行平穩。

2 改變參數值

在函數內更改參數(parameter)變量的值不會影響相應參數(argument)的值
這很重要,如果我們把一個參數傳遞給一個函數並且我們改變了參數的值,這個改變不會影響到最初通過的函數

def change_val(num): 
    num += 100
    print("Inside parameter value 內部參數值  %d" %num)

val = 100
print("Argument value 參數值  %d" %val)
change_val(val)
print("Argument value after function call 函數調用後的參數值 %d" %val)

num += 100 意思是num = num + 100
就是讓它自己加上100

運行結果:
在這裏插入圖片描述

這個腳本是參數值100,
因此print(“Argument value 參數值 %d” %val)結果是100,
val的值100將會被插入print(“Argument value 參數值 %d” %val),
然後我調出change_val函數,100+100=200,因此,print(“Inside parameter value 內部參數值 %d” %num)結果是200,
然後當函數停止被調用和結束時,值被設置回去爲100,所以print(“Argument value after function call 函數調用後的參數值 %d” %val)結果是100,因爲我們在函數內執行的100總和沒有改變原始值。
(num += 100中num是一個局部變量,數字是一個局部變量,在函數停止運行時停止了,所以當我們回來的時候val不等於200,因爲它從來沒有在裏面,它又回到了100。)
總的來說就是函數改變的是函數內部num的值,原本位於函數外的val的值是不變的。

3 返回多個值

Python支持從一個函數返回多個值:return a ,b ,c ,d …我可以在一個函數中的單個return返回多個值

def get_name():
    first = input("Enter first name : ") 
    last = input("Enter last name : ") 
    return first, last

f_name, l_name = get_name()
print(f_name) 
print(l_name)

相同概念,這一次提示用戶從鍵盤輸入名和姓,名字分別存儲在first和last的變量裏,就像之前一樣。

我們來運行它:
在這裏插入圖片描述

和預期一樣,用f_name和l_name打印了Ming和Xiao,因爲當返回的函數返回兩個用逗號隔開的值,如果我有兩個變量準備好獲得返回值,first將是這第一個的變量,last將進入第二個變量
我要在返回的時候再加一個變量,這樣可以更清楚知道返回多個變量,而不僅僅是兩三個。

添加student_number的變量
在這裏插入圖片描述運行:
在這裏插入圖片描述

4 變量範圍

如果我們不知道變量的範圍,它可能無法從函數和其它東西中訪問,所以在函數中創建的變量是這個函數的局部變量(函數內的變量是局部的),像之前的first,last…都是局部變量,只能從變量聲明後的函數內的語句訪問變量。

def add_numbers(n1, n2): 
    summation = n1 + n2
    print("Here is sum %d" %summation) 
    
add_numbers(10, 5)

結果爲
在這裏插入圖片描述

summation不存在於函數之外,如果我在下面加一個print(summation),Python會給我一個錯誤。

錯誤示例
在這裏插入圖片描述在這裏插入圖片描述

因爲summation沒有被定義,summation只在變量中定義,因此,當函數結束時,summation這個局部變量被銷燬,所以,要非常注意變量的範圍

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章