Python入門學習筆記————05(函式)
阿新 • • 發佈:2018-12-29
關鍵字引數
-
語法
def func_key(p1=v1,p2=v2,p3=v3,...): func_body 呼叫函式: func_key(p1=value1,p2=value2,...)
比較麻煩但有好處:
- 不容易混淆,一般引數需要形參與實參一一對應 - 關鍵字引數可以不考慮關鍵字位置
In [3]:
#關鍵字引數例子
def student (name,age,addr):
print ('我是一名學生')
print ('我叫{0},今年{1},住在{2}'.format (name,age,addr))
#呼叫
n = 'xiaoming'
a = 18
addr = '我家'
student (age=a,name=n,addr=addr) #注意,關鍵字引數時,位置可以顛倒
我是一名學生
我叫xiaoming,今年18,住在我家
收集引數
- 把沒有位置、不能和定義時引數位置相對應,的引數放入一個特定的資料結構中
-
語法
def func (*args): func_body #呼叫 func (p1,p2,p3,....)
##定義收集引數時通常使用*args
In [11]:
#收集引數程式碼
def student (*args):
print ('hello,大家好')
print (type(args)) #type函式作用:檢測變數型別
for i in args: #在訪問列表時,常使用for迴圈
print (i)
#呼叫
student ('lingling',18,'tongxian')
student ('xiaoming')
hello,大家好 <class 'tuple'> lingling 18 tongxian hello,大家好 <class 'tuple'> xiaoming
收集引數之關鍵字收集引數
- 把關鍵字引數按字典格式存入收集引數
-
語法:
def func(**kwargs): funcc_body #呼叫 func(p1=v1,p2=v2,....) - kwargs一般約定俗成 - 呼叫時把多餘的關鍵字放入kwargs - 訪問kwargs需要按字典格式訪問
In [34]:
##收集引數例項
def stu( **kwargs): #注意定義格式
print('hello,大家好')
print (type(kwargs))
for k,v in kwargs.items(): #檢視字典
print(k,'---',v)
stu(name='狗蛋',age=16,favorite='sing',work='teacher')
print('*'*20) #列印20次*
stu (name='xiaoming')
hello,大家好
<class 'dict'>
name --- 狗蛋
age --- 16
favorite --- sing
work --- teacher
********************
hello,大家好
<class 'dict'>
name --- xiaoming
收集引數混合呼叫的順序問題
- 收集引數,關鍵字引數,普通引數可以混合使用
- 普通引數與關鍵字引數優先
In [83]:
#混合案例
def stu(name,age, *args,hobby='no', **kewargs):
print ('我叫{0},今年{1}'.format(name,age))
if hobby == 'no':
print('我沒有愛好')
else:
print('我的愛好是{0}'.format(hobby))
print ('^'*20)
for i in args:
print(i)
print ('*'*20)
for k,v in kewargs.items():
print(k,'---',v)
name='goudan'
age=15
#不同形式的呼叫
stu(name,age)
stu(name,age,hobby='movie')
stu(name,age,'xiaoming','lili',hobby='PE',hobby2='shuijiao')
我叫goudan,今年15
我沒有愛好
^^^^^^^^^^^^^^^^^^^^
********************
我叫goudan,今年15
我的愛好是movie
^^^^^^^^^^^^^^^^^^^^
********************
我叫goudan,今年15
我的愛好是PE
^^^^^^^^^^^^^^^^^^^^
xiaoming
lili
********************
hobby2 --- shuijiao
收集引數的解包問題
- 把引數放入list或者字典中,直接把list或者字典中的值放入收集引數中
- 語法看案例
In [90]:
#案例
def stu(*args):
print ('哈哈哈哈哈')
n = 0 #n用來表示迴圈次數,主要用來除錯
for i in args:
print (type(i))
print (n)
n += 1
print(i)
#呼叫
l = ['lili',18,23,'kkkkkk']
stu (l)
#此時args表示字典內的一個list元素
#如果要作為多個元素進行呼叫則加*號(對list進行解包)
#對字典進行解包時需要加**(兩個)
stu(*l)
哈哈哈哈哈
<class 'list'>
0
['lili', 18, 23, 'kkkkkk']
哈哈哈哈哈
<class 'str'>
0
lili
<class 'int'>
1
18
<class 'int'>
2
23
<class 'str'>
3
kkkkkk
返回值
- 函式和過程的區別
- 有無返回值
- 下需要用return顯示返回內容
- 如果有返回值則返回,如果沒有則返回None
- 推薦在有沒有返回值時都以return結束
函式文件
- 函式的文件的作用是對當前函式提供使用相關的參考資訊
- 文件的寫法
- 在函式開始的第一行使用三引號字串定義符
- 一般具有特定格式 -參考案例
- 文件檢視
- 使用help函式,形如 help(func)
- 使用doc
In [*]:
#返回值例項
def func_1():
print('我有返回值')
return 1
def func_2():
print('我沒有返回值')
f1 = func_1()
print(f1)
f2 = func_2()
print(f2)
In [*]:
#案例
def stu(name,age,*args):
'''這是文件'''
print('hello')
#檢視文件
help(stu)
stu._doc_