第十二章 Python_函數

基本介紹

沒有使用函數式編程之前帶來的問題

  1. 代碼的組織結構不清晰,可讀性差
  2. 實現重復的功能時,你只能重復編寫實現功能的代碼,導致代碼冗余,白白耗費精力
  3. 假如某一部分功能需要擴展或更新時,需要找出所有實現此功能的地方,一一修改,無法統一管理,加大了維護難度

函數是什么

  1. 函數是對實現某一功能的代碼的封裝
  2. 函數可以實現代碼的復用,從而減少代碼的重復編寫


一、定義函數

1. 函數的分類

函數分為內置函數和自定義函數

  • 內置函數 是自帶的,直接可以調用。比如 : id() type() list()

  • 自定義函數 是我們自己在代碼中編寫定義的

2. 定義函數的語法

def 函數名(參數1,參數2,參數3,...):
    '''注釋'''
    函數體
    return 返回值

  • def 是定義函數的關鍵字
  • 函數名 和變量名的定義規則一樣,要能體現出函數的功能含有
  • () 小括號是必須的
  • : 小括號后面的英文的冒號 : 也是必須的
  • 參數 不是必須的,多個參數使用英文逗號 , 隔開
  • 函數體 可以寫任意合法的 Python 代碼,需要縮進 4 個空格
  • retrurn 是用于返回數據的,這個是可選的。
  • 返回值 也是可選的

定義函數

def foo():
    print("hello lenovo")

調用函數

foo()

注意:函數必須先定義,才能調用



二、函數的參數

函數的參數可以是python 中的任意數據類型,并且參數的數量可以是零個或多個。

函數的參數分為:

  • 形參
    形參就是形式上的參數,是在定義函數時使用的概念,其實就是一個變量名

  • 實參
    實參就是實際的數據,是在調用(使用)函數時的概念。

1. 形參中位置參數和默認參數

def say(msg):
    print(msg)

調用

s = "告訴你,一想到你,我這張丑臉上就泛起微笑。"
say(s)

say 就是位置參數

def func(x, y):
    n = x - y
    print(n)

調用函數

func(3, 2)

輸出: 1

func(2, 3)

輸出: -1

位置參數有幾個,調用函數時就要傳遞幾個。并且有位置順序的區分

def conn_ospf(ip="192.168.1.1"):
    print(ip)

ip="192.168.1.1") 是定義了一個默認參數 ip ,這個參數在定義函數的時后就有了一個值 192.168.1.1
默認參數在調用函數時可以不用傳遞實參,就是使用默認值。
也可以傳遞實參, 傳遞時,就使用傳遞的參數。

conn_ospf()
輸出: 192.168.1.1

conn_ospf("192.168.1.254")
輸出: 192.168.1.254


2. 實參中的位置參數和關鍵字參數

在函數調用的時候,給函數傳遞的參數,稱為實參。
實參可以簡單分為 位置參數 和 關鍵字參數

  • 位置參數就是 一個一個的數據對象,傳遞的時候是有位置順序區分的。
    如: (18, 'shark')
  • 關鍵字參數是變量名和變量值的組合,傳遞的時候沒有位置順序之分。
    如:(name=shark, age=18)
def say_me(name, age=20):
    print("昵稱:", name)
    print("年齡:", age)

say_me("shark", 18)

# 錯誤示例
say_me(18, "shark")

say_me(age=18, name="shark")

關鍵字參數的變量名必須 和定義函數時的參數名稱一致。


3. * 和 ** 實現接收任意參數

* 可以接收所有的位置參數, ** 可以接收所有的關鍵字參數。

def some_arg(*args,  **kwargs):
      print(args)
      print(kwargs)

調用

some_arg(1,3,a=10)

(1, 3)
{'a': 10}



三、感受返回值的強大之處

函數也可以通過關鍵字 return 返回任何數量的 Python 中的任意數據類型,作為結果

def foo():
    s = 'lenovo'
    li = [1,2,3]
    retrue s, li

調用函數并且接收返回值

name, l3 = foo()



四、函數的高級用法

1. 作為參數傳遞

def f1():
    n = 1 + 1
    return n

def foo(arg):
    ret = arg()
    print(ret)

調用

foo(f1)  # 會輸出 2

注意這里傳遞的是 函數名,后面不要加小括號。
本質上是傳遞了 函數對象本身


2. 作為返回值返回

def f2():
    print("hello")

def func():
    return f2

f = func()
print(id(f))
print(id(f2))

# f 和 f2 都指向了同一個函數對象

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容