天天看點

【python入門到精通】python核心知識之參數與變量完全解讀

🚀 作者 :“大資料小禅”

🚀 粉絲福利 :加入小禅的大資料社群

🚀 歡迎小夥伴們 點贊👍、收藏⭐、留言💬

目錄

python核心知識之參數與變量

什麼是形參和實參?

什麼是位置參數

核心基礎知識之預設參數

核心基礎知識之可變參數

什麼是可變參數?

核心基礎知識之命名關鍵字參數

我們先來看看之前最普通的入參方式--位置參數

什麼是命名關鍵字參數?

核心基礎知識之關鍵字參數

什麼是關鍵字參數?

形參:即形式參數,函數定義時指定的可以接受的參數即為形參,比如定義函數時的max(a,

b)函數中的a和b就是形參

實參:即實際參數,調用函數時傳遞給函數參數的實際值即為實參,比如調用上面函數用

max(1, 9)函數中的1和9就是實參;

我們定義函數max(a,b)後,在調用時,我們無需指定參數名,隻需max(1,9),這個時候實參入參的

的位置進行比對,也就是在函數中,a=1,b=9.。

當然,如果我們不想基于位置順序,也可以直接指定對應的參數名,比如max(b=9,a=1),這個時候

調用後,不會按入參順序指派,而是直接按指定的參數名指派。

編寫一個計算x的n次幂的函數,要求x、n可以作為參數傳入

def power(x, n):
return x ** n
print(power(2,2))
      

上面的函數雖然解決了問題,但是顯然不夠完美,假設在大部分的調用裡,基本都隻是求x的2次幂,但

是這個時候我在調用的時候依舊每次都得傳n,這就顯得有點多餘。有沒有什麼方法可以讓我調用的時

候少些一個入參呢?

如果我們直接 print(power(2)),會發現這個時候行不通,有錯誤。

在函數入參處,使用等号指派預設參數,

def power(x, n=2):
return x ** n
print(power(2))
      
【python入門到精通】python核心知識之參數與變量完全解讀
def test(a=1, b=2, c=3):
print("a=%d b=%d c=%d" % (a, b, c))
test(c=2)
      
【python入門到精通】python核心知識之參數與變量完全解讀
def test(L=[]):
   L.append("END")
print(L)
test([1, 1, 1])
test([2, 2, 2])

      
【python入門到精通】python核心知識之參數與變量完全解讀
def test(L=[]):
L.append("END")
print(L)
test()
test()
輸出結果:
['END']
['END', 'END']
函數在定義的時候,預設參數的值已确定,換句話說,L指向的位址是确定,之後如果還是對其内容進
行更改的話,預設參數的值也随之改變了
溫馨提示:預設參數必須指向不可變對象
      
【python入門到精通】python核心知識之參數與變量完全解讀
def sum(numbers):
total = 0
for i in numbers:
 total += i
return total
print(sum([1, 2, 3]))

y=[1,2,3]  換成(1,2,3)列印結果一樣
for x in y:
    print(x)
    
輸出:
6
1
2
3
      
【python入門到精通】python核心知識之參數與變量完全解讀
def sum(*numbers):
total = 0
for i in numbers:
 total += i
return total
print(sum(1, 2, 3))

輸出:
6
      
【python入門到精通】python核心知識之參數與變量完全解讀
def my_fun(*numbers):
 print(type(numbers))

 total = 0
 for i in numbers:
  total += i
 return total

print(my_fun(1, 2, 3))
輸出結果:
<class 'tuple'>
6

      
【python入門到精通】python核心知識之參數與變量完全解讀
def person(name, age):
 print(name,age)
person("wiggin",29)

      

這種方式無需指定入參的名字,隻要位置相對應,就可以。

與位置參數相對的另一種方式,是每次調用的時候,都必需指定參數的名字,也就是命名關鍵字

限制調用者不能按位置傳遞,需要放在形參的後面,并在前面使用星号*(獨占一個參數位)與普通形參分隔

為什麼要有命名關鍵字參數?

為了限制後面幾個參數隻能按關鍵字傳遞,這往往是因為後面幾個形參名具有十分明顯的含義,顯式寫**

出有利于可讀性;或者後面幾個形參随着版本更疊很可能發生變化,強制關鍵字形式有利于保證跨版本**

相容性

與位置參數相對的另一種方式,是每次調用的時候,都必需指定參數的名字,也就是命名關鍵字**

命名關鍵字用法

def person(name, age, *, pet):
 print(name,age,pet)
person("wiggin",29,pet="tomcat")

      
【python入門到精通】python核心知識之參數與變量完全解讀
def person(name, age, *, pet):
 print(name,age,pet)
person("wiggin",29,"tomcat")
TypeError: person() takes 2 positional arguments but 3 were given

      
【python入門到精通】python核心知識之參數與變量完全解讀
def person(name, age, *, pet="cat"):
print(name,age,pet)
person("wiggin",29)

      
【python入門到精通】python核心知識之參數與變量完全解讀
關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數内部自動組裝為一個dict,**kw參數的作用如下
def person(name, age, **kw):
 print('name:', name, 'age:', age, 'other:', kw)
person("wiggin",29,city="廣州",pet="cat")
輸出:
name: wiggin age: 29 other: {'city': '廣州', 'pet': 'cat'}

      
【python入門到精通】python核心知識之參數與變量完全解讀
def person(name, age, **kw):
 print('name:', name, 'age:', age, 'other:', kw)
other_info = {"pet": "cat"}
person("wiggin",29,city="廣州",**other_info)

輸出:
name: wiggin age: 29 other: {'city': '廣州', 'pet': 'cat'}

      

other_info表示把other_info這個dict的所有key-value用關鍵字參數傳入到函數的****kw參數,kw将獲

一個dict,注意kw獲得的dict是other_info的一份拷貝,對kw的改動不會影響到函數外的

other_info。

混合使用參數

本章之前所學習的各種類型的蠶食,可以在定義函數時混合使用,但是,有一個核心注意的點:

混合使用時,參數定義的順序必須是:必選參數、預設參數、可變參數、命名關鍵字參數和關鍵字參

數。

【python入門到精通】python核心知識之參數與變量完全解讀