Python的位置引數、預設引數、關鍵字引數、可變引數的
阿新 • • 發佈:2018-12-20
普通引數 (位置引數)
- 定義的時候直接定義變數名,呼叫的時候直接把變數或者值放入指定的位置
- 呼叫的時候,具體參考的是位置,按位置賦值
- 語法:
def 函式名 (引數1,引數2,……) 函式體 #呼叫 函式名 (value1,value2,……)
預設引數
- 形參帶有預設值
- 呼叫的時候,如果沒有對應的形參賦值。則使用預設值
- 語法:
def func_name (pv1=v1,p2=v2,……) func_back #呼叫1 func_name() #呼叫2 v1 = value1 v2 = value2 func_name(v1,v2)
例項:
#預設引數例項 #報名函式,需要知道學生的性別#學習python的學生基本都是男生,所以,報名的時候如果沒有特別指定,預設是男生 def reg(name,age,gender = "male"): if gender == "male": print("{0} is {1} years old,and he is a good student".format(name,age)) else : print("{0} is {1} years old,and she is a good student".format(name,age)) #呼叫預設引數函式案例 reg("mingyue",18,"female") reg("xiaoming",23)
關鍵字引數
-
語法與普通函式沒有太大區別,但是呼叫時有區別
-
語法:
func_name ( p1,p2,……): func_back #呼叫函式 func_name(p1=value1,p2=value2,……)
-
比較麻煩,但是也有好處 - 不容易混淆,一般實參和形參只是按照位置一一對應即可,容易出錯 - 使用關鍵字引數,可以不用考慮引數的位置
案例:
``` #關鍵字引數案例 def stu (name,age,addr): print("I am a student!") print("我叫{0},我今年{1}歲了,我住{2}".format(name,age,addr)) stu(age = "18",addr = "我家",name = "靜靜") ```
收集引數(可變引數)
- 把沒有位置,不能和定義時的引數位置相對應的引數,放入一個特定的資料結構中
- 語法:
def func_name(*args): func_back #按照list使用方式訪問args得到args得到傳入的引數 #呼叫 func_name(p1, p2, p3, ……)
- 引數名args不是必須這樣寫,但是推薦直接使用args,約定俗成
- 引數args前要有星號*
- 收集引數可以和其他函式共存
案例:
#收集引數案例
#函式模擬一個學生進行自我介紹,但具體內容不清楚
#*args可以看成一個List(列表)
def stu(*args):
print("hello,大家好,我自我介紹下")
print(type(args)) #輸出args的格式,這裡為tuple格式
for item in args:
print(item)
#收集引數可以不帶任何實參使用
stu()
stu("帥哥", 18, "北京順義區", "崔傻子", "單身")stu("高大神")
收集函式(可變引數)之關鍵字引數
- 把關鍵字引數按字典格式存入收集引數
- 語法:
def func_name( **kwargs): func_back #呼叫 func_name(p1=v1, p2=v2, ……)
- kwargs一般約定俗成,呼叫的時候把多餘的關鍵字引數放入kwargs
- 訪問kwargs需要按照字典的格式訪問 案例:
#收集引數之關鍵字收集引數案例
#自我介紹
def stu( **kwargs):
print("Hello,大家好,我做下自我介紹")
print(type(kwargs)) #kwargs的格式是字典“dict”
#對於字典的訪問,python2和python3有區別,本案例使用python3
for k,v in kwargs.items():
print(k, "……", v)
stu(name="大帥哥", age=19, addr="北京市順義區", lover="崔傻子", worker="student")
print("*" * 20)
stu(name="高大神")
#收集引數為空案例
stu()