Python參數類型以及實現isOdd函數,isNum函數,multi函數,isPrime函數


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))        

 

運行結果:

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM