python函數的重新定義及練習

python函數

一、函數定義

函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。

函數能提高應用的模塊性,和代碼的重復利用率。

你已經知道Python提供瞭許多內建函數(庫函數),比如print()。

但你也可以自己創建函數,這被叫做用戶自定義函數。

函數類型有:庫函數、自定義函數。

二、自定義函數

1、自定義函數規則:

(1).函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括號()。
任何傳入參數和自變量必須放在圓括號中間。圓括號之間可以用於定義參數。

(2).函數的第一行語句可以選擇性地使用文檔字符串—用於存放函數說明。
函數內容以冒號起始,並且縮進。

(3).return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None。

2、一般形式

在這裡插入圖片描述

註:如果沒有返回值,那麼return後面的表達式可不用寫。

三、函數調用

定義一個函數隻給瞭函數一個名稱,指定瞭函數裡包含的參數(形式參數),和代碼塊結構。這個函數的基本結構完成以後,你可以通過另一個函數調用執行,也可以直接從Python提示符執行。調用函數時的參數,為實際參數

四、參數

函數的主要類型有:形式參數、實際參數,具體如上三中所述

正式參數類型:

1、必備參數

必備參數須以正確的順序傳入函數。調用時的數量必須和聲明時的一樣。調用printme()函數,你必須傳入一個參數,不然會出現語法錯誤。

2、關鍵字參數(使用<鍵-值>來傳參)

關鍵字參數和函數調用關系緊密,函數調用使用關鍵字參數來確定傳入的參數值。
使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因為 Python 解釋器能夠用參數名匹配參數值。

3、默認參數

調用函數時,默認參數的值如果沒有傳入,則被認為是默認值。

在這裡插入圖片描述

4、不定長參數(可變長參數)

你可能需要一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長參數,和上述2種參數不同,聲明時不會命名。

在這裡插入圖片描述

五、變量作用域

定義在函數內部的變量擁有一個局部作用域,定義在函數外的擁有全局作用域。

局部變量隻能在其被聲明的函數內部訪問,而全局變量可以在整個程序范圍內訪問。調用函數時,所有在函數內聲明的變量名稱都將被加入到作用域中。如下實例:

在這裡插入圖片描述

六、函數的遞歸調用

例題(n的階乘):

在這裡插入圖片描述

遞推歸納:將問題轉化為比原問題小的同類規模,歸納出一般遞推公式,故所處理的對象要有規律的遞增或遞減。

遞歸終止:當規模小到小規模到一定程度應該結束遞歸調用,逐層返回常用語句條件來控制何時結束遞歸。

註:原問題層層分解為類似的子問題。

python的文件操作

Python提供瞭文件對象,並內file_object =open(path,mode)。置瞭open函數來獲取一個文件對象。Open函數的使用:其中,file_object是調用open函數後得到的文件對象;path是一個字符串,代表要打開文件的路徑;而mode是打開文件的模式,常用的模式如下表所示。

在這裡插入圖片描述

在os.py中要打開Task1文件進行讀寫,需要使用r+模式,實現如下:f = open(’./Task1’,‘r+’)。簡單一個語句便實現瞭打開文件的操作,之後對該文件的操作隻需對新得到的文件對象f,使用文件對象提供的方法即可。

常用方法:

在這裡插入圖片描述

例題:

實例1將文件Task1的內容全部讀入到fls列表中。實例二要將文件首字符為“3”的行中每一個數字加起來,不包括3,即“10 5 19 20 37”;然後,將結果寫入到文件末尾。

分析:

首先要獲取首字符3,為此,可以用格的listsplit()函數將每一行字符串按空格分解為每個元素不包含空。然後判斷list[0]是不是字符3。然後需要計算該list從1號元素開始的所有元素的和。最後,需要將結果寫回文件,所以,文件的打開方式應為“r+”。

#<程序:讀取文件os.py,計算並寫回>
f = open("./Task1.txt",'r+'); fls = f.readlines()
for line in fls:
	line = line.strip()
	 lstr = line.split()
	if lstr[0] == '3':
		res = 0
		for e in lstr[1:]:
			res+=int(e)
f.write('\n4 '+str(res)); f.close()

課後作業

習題1:

在這裡插入圖片描述

#<程序:第三次培訓作業1>
def cf(x,n):
    if n==0:
        f=1;
    else:
        f=x*x**(n-1)
    return f
x=int(input("請輸入x值:"))
n=int(input("請輸入n值:"))
f=cf(x,n)
print("x的n次方的值為:",f)

習題2:

在這裡插入圖片描述

#<第三次培訓作業2>
def age(n):
    if n==1:
        a=10
    else:
        a=age(n-1)+2
    return a

print(age(5))

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!   

推薦閱讀: