1. 程式人生 > >Python入門學習筆記————05(函式)

Python入門學習筆記————05(函式)

關鍵字引數

  • 語法

      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_