Python參數類型以及實現isOdd函數,isNum函數,multi函數,isPrime函數
一、Python參數類型
形參:定義函數時的參數變量。
實參:調用函數時使用的參數變量。
參數傳遞的過程,就是把實參的引用傳遞給形參,使用實參的值來執行函數體的過程。
在 Python 中,函數的實參/返回值都是是靠引用來傳遞的。
在調用函數時,通常會傳遞參數,不同的參數處理不同的數據。一般有普通參數、默認參數、可變位置參數、可變關鍵字參數等。
1.普通參數:按照參數位置,依次傳遞參數。
def add(x,y): return x + y print(add(3,4))
2.默認參數:定義函數時,可以給某個參數賦一個默認值。
調用函數時,如果沒有傳入默認參數的值,則在函數內部使用參數默認值。
要使用最常見的值作為默認值,從而簡化函數的調用。
如果一個參數的值不能確定,則不應該設置默認值,具體的數值在調用函數時由外界傳遞。在調用函數時,如果有多個默認參數,需要指定參數名,這樣解釋器才能夠知道參數的對應關系。
def add(x,y=1): return x+y print(add(2)) print(add(2,3))
當一個參數有默認值時,調用時如果不傳遞此參數,會使用默認值。
注意:帶默認值參數必須在不帶默認值參數之后,否則會報錯。
3.可變位置參數:
定義參數時參數前面加一個*,表示這個參數是可變的,可以接受任意多個參數,這些參數構成一個元組,只能通過位置進行參數傳遞。實例如下:
求一組數字的最大值,最小值,參數個數:
def max(*a): m=n=a[0] for x in a: if x>=m: m=x else: n=x return m,n,len(a) b=input('輸入若干數字,用空格隔開:').split() print(max(*b))
運行結果:
關於最后一行:print(max(*b)),*b的作用是解包,否則傳遞的是整個列表。
如果不加*,則輸出結果如下:
4.可變關鍵字參數:
定義參數時,在前面加**,表示這個參數可變,可以接受任意多個參數,這些參數構成一個字典,只能通過關鍵字參數傳遞。
參數的混合使用:
#位置參數可以和關鍵字參數一起使用。 #當位置可變參數和關鍵字可變參數一起使用的時候,可變位置參數必須在前。
def fn(*args,**kwargs): print(args) print(kwargs) fn(1,2,3,x=4,y=5)
#普通參數可以和可變參數一起使用,但是傳參的時候必須匹配
def fn(x,y,*args,**kwargs): print(x) print(y) print(args) print(kwargs) fn(1,2,3,4,5,a=6,b=7)
#關鍵字可變參數不允許在普通參數之前 #下面的方式定義會出錯
def fn(**kwargs,x): print(x) fn(a=1,2)
#默認參數可以在可變位置參數之前
def fn(x=5,*args): print(x) fn()
參數解構(拆包):
參數解構發生在函數調用的時候,可變參數發生在函數定義的時候。
解構有兩種形式:
1.解構符號:*,解構的對象:可迭代對象。解構后的結果:位置參數。
2.解構符號:**,解構的對象:字典。解構的結果:關鍵字參數。
關鍵字參數解構,key必須是str類型。
def add(a,b): return a+b data = [4,3] print(add(*data))#位置參數解構
data1 = {'a':3,'b':4} print(add(**data1))#關鍵字參數解構
二、程序練習題
5.2 實現 isOdd()函數,參數為整數,如果整數為奇數,返回True,否則返回False。
實現代碼如下:
def isOdd(num): if num%2!=0: return True else: return False s=eval(input("請輸入一個整數:")) print(isOdd(s))
運行結果:
5.3 實現 isNum()函數,參數為一個字符串,如果這個字符串屬於整數、浮點數或復數的表示,則返回True,否則返回False。
實現代碼如下:
def isNum(num): try: n=type(eval(num)) if n==type(1):#輸入為整型
return True elif n==type(1.0):#輸入為浮點型
return True elif n==type(1+1j):#輸入為復數
return True except: return False n=input("請輸入一個字符串:") print(isNum(n))
運行結果:
5.4 實現 multi()函數,參數個數不限,返回所有參數的乘積。
實現代碼如下:
def multi(s): m = 1
for i in s: m *= int(i) return m n=input("請輸入若干整數:").split() print(multi(n))
運行結果:
5.5 實現 isPrime()函數,參數為整數,要有異常處理。如果整數是質數,返回True,否則返回False。
實現代碼如下:
def isPrime(num): try: num = eval(num) if type(num) == type(1):#判斷輸入是否為整型
if num<=1:#判斷一個數字是否是質數:質數是一個只能被自己和1整除的大於1的正整數。注意1不是質數。
return False elif num==2:#2是質數,這里單獨作為一個條件是為了與下面的判斷條件區分
return True else: for i in range(2,num):#這里考慮的是大於2的正整數num,將這個數依次除以從2到num-1的整數進行取模運算,只要有一個數使它余數為0就說明它不是質數
if num % i == 0: return False else: return True else: raise ValueError#引發ValueError異常
except ValueError:#傳入參數異常處理
return "輸入有誤!請輸入整數!"#這里沒有使用print語句,如果沒有給定return一個返回值,則函數的返回值為None
except:#其他異常處理
return "輸入有誤!請輸入整數!" n = input("請輸入一個整數:") print(isPrime(n))
運行結果: