python的四大函式講解

梓鵬發表於2018-11-21

Python的四類函式:

  1.普通函式

  2.預設函式

  3.關鍵字函式

  4.收集引數

 

1.普通函式

a.定義的時候直接定義變數名

b.呼叫的時候直接把變數或者值放入指定位置

      

      def 函式名(引數1,引數2…):
        函式體

      # 呼叫

      函式名(value1,value2….)  

      # 呼叫的時候,具體值參考的是位置,按位置賦值

 

 

# 引數的定義和使用
# 引數person,只是一個符號,代表的事呼叫的時候的某一個資料
# 呼叫的時候,會用p的值代替函式中所有的person
def hello(person):
    print("{0},你好".format(person))
    print("吃飯呀!")

p = "many"
hello(p)

2.預設函式

a.形參帶有預設值

b.呼叫的時候,如果沒有對應的形參傳值,則使用預設值

      der func_name(p1=v1,p2=v2….)
      func_block

      # 呼叫
      func_name()

      # 呼叫2
      value=1
      value=2
      func_name(value1,value2….)

 

  

# 預設引數示例
# 報名小例子,需要知道學生的性別
# 思路:
# 學習程式設計師的一般來說都是男生,所以,報名的時候如果沒有特別的指定,認為是男生

def baoming(name,age,sex="male"):
    if sex == "male":
        print("{0},今年{1}歲,他很棒!".format(name,age))
    else:
        print("{0},今年{1}歲,ta很棒!".format(name,age))

baoming("張三",18)
baoming("小紅",18,“"female")

 

 

 

 3.關鍵字引數

a.語法

    def func(p1=v1,p2=v2….)
    func_body

    呼叫函式:
    func(p1=v1,p2=v2…..)

b.比較麻煩,但是也有好處

  1.不容易混淆,一般實參和形參只是按位置一一對應即可,容易出錯

  2.使用關鍵字引數,可以不用考慮引數的位置

# 關鍵字引數使用示例1:
def stu(name,age,addr):
    print("i an student")
    print("我叫{0},我叫{1},我住{2}".format(name,age,addr))
    
n = "張三"
a = "18"
addr = "上海"

# 普通引數,只能按照位置傳遞,容易出錯
stu(n,a,addr)
# 關鍵字引數使用示例2:
def stu(name = "none",age = 0,addr = "none"):
    print("i an student")
    print("我叫{0},我叫{1},我住{2}".format(name,age,addr))
    
n = "張三"
a = "18"
addr = "上海"

# 這樣就是一一對應的關係
stu(name = n, age = a, addr =addr)

 

 

4.收集引數

a.把沒有位置,不能和定義時的引數位置相對應引數,放入一個特定的資料結構中

b.語法

    

    def func(*args):
    func_body
    按照list使用方式訪問args得到傳入的引數

    呼叫:
    func(p1,p2,p3…)

  b-1:引數名args不是必須這麼寫,但是,我們推薦直接使用args,約定俗成

  b-2:引數名args錢需要有星號

  b-3:收集引數可以和其他引數共存

 

# 收集引數程式碼
# 函式模擬一個學生進行一個自我介紹,但是內容具體不清楚
# args把他看做一個list
def stu( *args):
    print("大家好,我為大家簡單自我介紹以下:")
    # type 函式作用是檢測變數的型別
    print(type(args))
    #需要進行遍歷
    for item in args:
        print(item, end=" ")
    print()
    
stu("zhangsan", 18, "beijing")
stu("lishi")

 

 

 

 

 大家好,我為大家簡單自我介紹以下:

<class `tuple`>
zhangsan 18 beijing 
大家好,我為大家簡單自我介紹以下:
<class `tuple`>
lishi 

>>>對於tuple的遍歷,在python中遍歷一般都是用for遍歷

 收集函式也能為空

# 收集引數例項
# 說明收集引數可以不帶任何實參呼叫,此時收集引數為空tuple
# tuple和list是兄弟倆個
stu()

 

 

 

# 如果使用關鍵字引數格式呼叫,會出現問題
stu(name="zhangsan")

 

報錯:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-15-8a4d15627038> in <module>()
      1 # 如果使用關鍵字引數格式呼叫,會出現問題
----> 2 stu(name="zhangsan")

TypeError: stu() got an unexpected keyword argument `name`

此處在收集函式中不能使用關鍵字蠶食呼叫,但是在字典中可以使用關鍵字引數呼叫

 

4-1:收集引數之關鍵字收集引數

語法:

    def func( **kwargs):
    func_body

    呼叫:
    func(p1=v1, p2=v2, p3=v3….)

– kwargs一般約定俗成
– 呼叫的時候,把多餘的關鍵字引數放入kwagrs
– 訪問kwargs需要按字典格式訪問

# 收集引數案例
# 自我介紹
# 呼叫的時候需要使用關鍵字引數呼叫
def stu( **kwargs):
    # 在函式體內對於kwargs的使用不用帶星號
    print("大家好,我為大家簡單自我介紹以下:")
    print(type(kwargs))
    # 對於字典的訪問,python2和python3 有區別
    # 對於字典的訪問kwargs.items()
    for k,v in kwargs.items():
        print(k, "---", v)
        
        
stu(name="zhangsan", age=18, addr="bejing")
stu(name="lishi")

 

大家好,我為大家簡單自我介紹以下:
<class `dict`>
name --- zhangsan
age --- 18
addr --- bejing
大家好,我為大家簡單自我介紹以下:
<class `dict`>
name --- lishi

此處收集引數也可以為空

4-2:收集引數混合呼叫的順序問題

– 收集函式,關鍵字函式,普通函式可以混合使用
– 使用規則就是,普通引數和關鍵字引數有限
– 定義的時候一般先找普通引數,關鍵字引數,收集引數,收集引數tuple,收集引數dict

# 收集引數混合呼叫案例
# stu模擬一個學生的自我介紹
def stu(name, age,  hobby="沒有",*args,  **kwargs):
    print("hello 大家好")
    print("我叫{0},我今年{1}歲了!".format(name,age))
    if hobby == "沒有":
        print("很遺憾,我沒有愛好")
    else:
        print("我的愛好是{0}".format(hobby))
    
    print("*"*20)
    
    for i in args:
        print(i,end=" ")
    print("*"*20)  
    
    for k,v in kwargs.items():
        print(k,"---",v)
        
        
# 開始呼叫函式
name = "zhangsan"
age = 18
# 呼叫的不同的格式
stu(name, age)

stu(name, age, hobby="python")

stu(name, age, hobby="python", hobby2="lklkd",hobby3="聽音樂")
hello 大家好
我叫zhangsan,我今年18歲了!
很遺憾,我沒有愛好
********************
********************
hello 大家好
我叫zhangsan,我今年18歲了!
我的愛好是python
********************
********************
hello 大家好
我叫zhangsan,我今年18歲了!
我的愛好是python
********************
********************
hobby2 --- lklkd
hobby3 --- 聽音樂

返回值:

    - 函式和過程的區別
      - 有無返回值
    - 需要用return顯示返回內容
    - 如果沒有返回,則預設返回None
    - 推薦寫法,無論有無返回值,最後都要以return結束

# 返回值示例
def func_1():
    print("有返回值")
    return 1
def func_2():
    print("沒有返回值")
    
f1 = func_1()
print(f1)

f2 = func_2()
print(f2)

 


有返回值
1
沒有返回值
None

函式文件:

– 函式的文件的作用是對當前函式提供使用相關的參考資訊
– 文件寫法:
    - 在函式內部開始的第一行使用三引號字元定義符
    - 一般具有特定格式
    - 參考案例
– 文件檢視
    - 使用help函式,形如help(func)
    - 使用——doc——,參考案例(此處為下滑線倆個)

注意:

函式文件的編寫在pycharm中有詳細的格式要求,在此我就不在闡述了,有興趣的可以看一下

# 文件案例
# 函式stu是模擬一個學生的自我介紹的內容
def func():
    ```
    1
    2
    ```
    print("文件案例")
# 檢視文件
help(func)
func.__doc__

程式完整程式碼地址:https://github.com/Zhi-peng-wang 

相關文章