天天看點

python函數和方法的入參格式有哪些_python3 參數以及函數的傳參

1、可變對象和不可變對象

在 python 中,strings, tuples, 和 numbers 是不可更改的對象,而 list,dict 等則是可以修改的對象。

不可變類型:變量指派 a=5 後再指派 a=10,這裡實際是新生成一個 int 值對象 10,再讓 a 指向它,而 5 被丢棄,不是改變a的值,相當于新生成了a。

可變類型:變量指派 la=[1,2,3,4] 後再指派 la[2]=5 則是将 list la 的第三個元素值更改,本身la沒有動,隻是其内部的一部分值被修改了。

python 函數的參數傳遞:

不可變類型:類似 c++ 的值傳遞,如 整數、字元串、元組。如fun(a),傳遞的隻是a的值,沒有影響a對象本身。比如在 fun(a)内部修改 a 的值,隻是修改另一個複制的對象,不會影響 a 本身。

可變類型:類似 c++ 的引用傳遞,如 清單,字典。如 fun(la),則是将 la 真正的傳過去,修改後fun外部的la也會受影響

2、傳參

函數傳不可變對象

defChangeInt( a ):

a= 10b= 2ChangeInt(b)print( b )-------------------------------

2

函數傳可變對象

defchangeme( mylist ):"修改傳入的清單"mylist.append([1,2,3,4])print ("函數内取值:", mylist)return

#調用changeme函數

mylist = [10,20,30]

changeme( mylist )print ("函數外取值:", mylist)------------------------------------------------函數内取值: [10, 20, 30, [1, 2, 3, 4]]

函數外取值: [10, 20, 30, [1, 2, 3, 4]]

3、參數

下面是調用函數時可使用的正常參數類型

必需參數

關鍵字參數

預設參數

不定長參數

必須參數

必需參數須以正确的順序傳入函數。調用時的數量必須和聲明時的一樣。

調用printme()函數,你必須傳入一個參數,不然會出現文法錯誤:

#錯誤示範

defprintme( str ):"列印任何傳入的字元串"

print(str)return

#調用printme函數

printme()----------------------------------------Traceback (most recent call last):

File"test.py", line 10, in printme()

TypeError: printme() missing1 required positional argument: 'str'

#函數缺少一個參數“str”

關鍵字參數

關鍵字參數和函數調用關系緊密,函數調用使用關鍵字參數來确定傳入的參數值。

使用關鍵字參數允許函數調用時參數的順序與聲明時不一緻,因為 Python 解釋器能夠用參數名比對參數值。

以下執行個體在函數 printme() 調用時使用參數名:

defprintme( str ):"列印任何傳入的字元串"

print(str)return

#調用printme函數

printme( str = "麻世骞")----------------------------------------------麻世骞

以下執行個體中示範了函數參數的使用不需要使用指定順序:

defprintinfo( name, age ):"列印任何傳入的字元串"

print ("名字:", name)print ("年齡:", age)return

#調用printinfo函數

printinfo( age=50, name="麻世骞")-------------------------------------------------名字: 麻世骞

年齡:50

預設參數

調用函數時,如果沒有傳遞參數,則會使用預設參數。以下執行個體中如果沒有傳入 age 參數,則使用預設值:

def printinfo( name, age = 35):"列印任何傳入的字元串"

print ("名字:", name)print ("年齡:", age)return

#調用printinfo函數

printinfo( age=50, name="麻世骞")print ("------------------------")

printinfo( name="麻世骞")--------------------------------------------------名字: 麻世骞

年齡:50

------------------------名字: 麻世骞

年齡:35

不定長參數

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

加了星号 * 的參數會以元組(tuple)的形式導入,存放所有未命名的變量參數。

def printinfo( arg1, *vartuple ):"列印任何傳入的參數"

print ("輸出:")print(arg1)print(vartuple)#調用printinfo 函數

printinfo( 70, 60, 50)--------------------------------------------

70(60, 50)

如果在函數調用時沒有指定參數,它就是一個空元組。我們也可以不向函數傳遞未命名的變量。如下執行個體:

def printinfo( arg1, *vartuple ):"列印任何傳入的參數"

print ("輸出:")print(arg1)for var invartuple:print(var)return

#調用printinfo 函數

printinfo( 10)

printinfo(70, 60, 50)---------------------------------------輸出:10輸出:70

60

50

還有一種就是參數帶兩個星号 **,加了兩個星号 ** 的參數會以字典的形式導入。

def printinfo( arg1, **vardict ):"列印任何傳入的參數"

print ("輸出:")print(arg1)print(vardict)#調用printinfo 函數

printinfo(1, a=2,b=3)-------------------------------------------輸出:1{'a': 2, 'b': 3}

聲明函數時,參數中星号 * 可以單獨出現,例如:

def f(a,b,*,c):return a+b+c

如果單獨出現星号 * 後的參數必須用關鍵字傳入,否則會報錯。

def f(a,b,*,c):return a+b+c

f(1,2,3) #報錯

-------------------------------------------------------------------------Traceback (most recent call last):

File"", line 1, in TypeError: f() takes2 positional arguments but 3 were given

def f(a,b,*,c):return a+b+c

f(1,2,c=3) #正常

-----------------------------------

6