亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python基礎(chǔ)之函數(shù)基本用法與進(jìn)階詳解

 更新時(shí)間:2020年01月02日 11:52:42   作者:小飛俠v科比  
這篇文章主要介紹了Python基礎(chǔ)之函數(shù)基本用法與進(jìn)階,結(jié)合實(shí)例形式總結(jié)分析了Python函數(shù)的定義、參數(shù)、返回值及遞歸等相關(guān)使用技巧與操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python基礎(chǔ)之函數(shù)基本用法與進(jìn)階。分享給大家供大家參考,具體如下:

目標(biāo)

函數(shù)參數(shù)和返回值的作用

  • 函數(shù)的返回值 進(jìn)階
  • 函數(shù)的參數(shù) 進(jìn)階
  • 遞歸函數(shù)

01. 函數(shù)參數(shù)和返回值的作用

函數(shù)根據(jù) 有沒有參數(shù) 以及 有沒有返回值,可以 相互組合,一共有 4 種 組合形式

  1. 無參數(shù),無返回值
  2. 無參數(shù),有返回值
  3. 有參數(shù),無返回值
  4. 有參數(shù),有返回值

在這里插入圖片描述
定義函數(shù)時(shí),是否接收參數(shù),或者是否返回結(jié)果,是根據(jù) 實(shí)際的功能需求 來決定的!

  1. 如果函數(shù) 內(nèi)部處理的數(shù)據(jù)不確定,就可以將外界的數(shù)據(jù)以參數(shù)傳遞到函數(shù)內(nèi)部
  2. 如果希望一個(gè)函數(shù) 執(zhí)行完成后,向外界匯報(bào)執(zhí)行結(jié)果,就可以增加函數(shù)的返回值

1.1 無參數(shù),無返回值

此類函數(shù),不接收參數(shù),也沒有返回值,應(yīng)用場(chǎng)景如下:

  1. 只是單純地做一件事情,例如 顯示菜單
  2. 在函數(shù)內(nèi)部 針對(duì)全局變量進(jìn)行操作,例如:新建名片,最終結(jié)果 記錄在全局變量 中

注意:

  • 如果全局變量的數(shù)據(jù)類型是一個(gè) 可變類型,在函數(shù)內(nèi)部可以使用 方法 修改全局變量的內(nèi)容 —— 變量的引用不會(huì)改變
  • 在函數(shù)內(nèi)部,使用賦值語句 才會(huì) 修改變量的引用

1.2 無參數(shù),有返回值

此類函數(shù),不接收參數(shù),但是有返回值,應(yīng)用場(chǎng)景如下:

  • 采集數(shù)據(jù),例如 溫度計(jì),返回結(jié)果就是當(dāng)前的溫度,而不需要傳遞任何的參數(shù)

1.3 有參數(shù),無返回值

此類函數(shù),接收參數(shù),沒有返回值,應(yīng)用場(chǎng)景如下:

  • 函數(shù)內(nèi)部的代碼保持不變,針對(duì) 不同的參數(shù) 處理 不同的數(shù)據(jù)
  • 例如 名片管理系統(tǒng) 針對(duì) 找到的名片 做 修改、刪除 操作

1.4 有參數(shù),有返回值

此類函數(shù),接收參數(shù),同時(shí)有返回值,應(yīng)用場(chǎng)景如下:

  • 函數(shù)內(nèi)部的代碼保持不變,針對(duì) 不同的參數(shù) 處理 不同的數(shù)據(jù),并且 返回期望的處理結(jié)果
  • 例如 名片管理系統(tǒng) 使用 字典默認(rèn)值 和 提示信息 提示用戶輸入內(nèi)容
    • 如果輸入,返回輸入內(nèi)容
    • 如果沒有輸入,返回字典默認(rèn)值

02. 函數(shù)的返回值 進(jìn)階

在程序開發(fā)中,有時(shí)候,會(huì)希望 一個(gè)函數(shù)執(zhí)行結(jié)束后,告訴調(diào)用者一個(gè)結(jié)果,以便調(diào)用者針對(duì)具體的結(jié)果做后續(xù)的處理

  • 返回值 是函數(shù) 完成工作后,最后 給調(diào)用者的 一個(gè)結(jié)果
  • 在函數(shù)中使用 return 關(guān)鍵字可以返回結(jié)果
  • 調(diào)用函數(shù)一方,可以 使用變量 來 接收 函數(shù)的返回結(jié)果

問題:一個(gè)函數(shù)執(zhí)行后能否返回多個(gè)結(jié)果?

示例 —— 溫度和濕度測(cè)量

  • 假設(shè)要開發(fā)一個(gè)函數(shù)能夠同時(shí)返回當(dāng)前的溫度和濕度
  • 先完成返回溫度的功能如下:
def measure():
  """返回當(dāng)前的溫度"""
  
  print("開始測(cè)量...")
  temp = 39
  print("測(cè)量結(jié)束...")
  
  return temp

result = measure()
print(result)
  • 在利用 元組 在返回溫度的同時(shí),也能夠返回 濕度
  • 改造如下:
def measure():
  """返回當(dāng)前的溫度"""

  print("開始測(cè)量...")
  temp = 39
  wetness = 10
  print("測(cè)量結(jié)束...")

  return (temp, wetness)

提示:如果一個(gè)函數(shù)返回的是元組,括號(hào)可以省略

技巧

  • 在 Python 中,可以 將一個(gè)元組 使用 賦值語句 同時(shí)賦值給 多個(gè)變量
  • 注意:變量的數(shù)量需要和元組中的元素?cái)?shù)量保持一致
result = temp, wetness = measure()

面試題 —— 交換兩個(gè)數(shù)字

題目要求

  1. 有兩個(gè)整數(shù)變量 a = 6, b = 100
  2. 不使用其他變量,交換兩個(gè)變量的值

解法 1 —— 使用其他變量

# 解法 1 - 使用臨時(shí)變量
c = b
b = a
a = c

解法 2 —— 不使用臨時(shí)變量

# 解法 2 - 不使用臨時(shí)變量
a = a + b
b = a - b
a = a - b

解法 3 —— Python 專有,利用元組

a, b = b, a

03. 函數(shù)的參數(shù) 進(jìn)階

3.1. 不可變和可變的參數(shù)

問題 1:在函數(shù)內(nèi)部,針對(duì)參數(shù)使用 賦值語句,會(huì)不會(huì)影響調(diào)用函數(shù)時(shí)傳遞的 實(shí)參變量? —— 不會(huì)!

  • 無論傳遞的參數(shù)是 可變 還是 不可變
    • 只要 針對(duì)參數(shù) 使用 賦值語句,會(huì)在 函數(shù)內(nèi)部 修改 局部變量的引用,不會(huì)影響到 外部變量的引用
def demo(num, num_list):

  print("函數(shù)內(nèi)部")

  # 賦值語句
  num = 200
  num_list = [1, 2, 3]

  print(num)
  print(num_list)

  print("函數(shù)代碼完成")


gl_num = 99
gl_list = [4, 5, 6]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)
  

問題 2:如果傳遞的參數(shù)是 可變類型,在函數(shù)內(nèi)部,使用 方法 修改了數(shù)據(jù)的內(nèi)容,同樣會(huì)影響到外部的數(shù)據(jù)

def mutable(num_list):

  # num_list = [1, 2, 3]
  num_list.extend([1, 2, 3])
  
  print(num_list)

gl_list = [6, 7, 8]
mutable(gl_list)
print(gl_list)

面試題 —— +=

  • 在 python 中,列表變量調(diào)用 += 本質(zhì)上是在執(zhí)行列表變量的 extend 方法,不會(huì)修改變量的引用
def demo(num, num_list):

  print("函數(shù)內(nèi)部代碼")

  # num = num + num
  num += num
  # num_list.extend(num_list) 由于是調(diào)用方法,所以不會(huì)修改變量的引用
  # 函數(shù)執(zhí)行結(jié)束后,外部數(shù)據(jù)同樣會(huì)發(fā)生變化
  num_list += num_list

  print(num)
  print(num_list)
  print("函數(shù)代碼完成")


gl_num = 9
gl_list = [1, 2, 3]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)

3.2 缺省參數(shù)

  • 定義函數(shù)時(shí),可以給 某個(gè)參數(shù) 指定一個(gè)默認(rèn)值,具有默認(rèn)值的參數(shù)就叫做 缺省參數(shù)
  • 調(diào)用函數(shù)時(shí),如果沒有傳入 缺省參數(shù) 的值,則在函數(shù)內(nèi)部使用定義函數(shù)時(shí)指定的 參數(shù)默認(rèn)值
  • 函數(shù)的缺省參數(shù),將常見的值設(shè)置為參數(shù)的缺省值,從而 簡(jiǎn)化函數(shù)的調(diào)用
  • 例如:對(duì)列表排序的方法
gl_num_list = [6, 3, 9]

# 默認(rèn)就是升序排序,因?yàn)檫@種應(yīng)用需求更多
gl_num_list.sort()
print(gl_num_list)

# 只有當(dāng)需要降序排序時(shí),才需要傳遞 `reverse` 參數(shù)
gl_num_list.sort(reverse=True)
print(gl_num_list)

指定函數(shù)的缺省參數(shù)

  • 在參數(shù)后使用賦值語句,可以指定參數(shù)的缺省值
def print_info(name, gender=True):

  gender_text = "男生"
  if not gender:
    gender_text = "女生"

  print("%s 是 %s" % (name, gender_text))

提示

  1. 缺省參數(shù),需要使用 最常見的值 作為默認(rèn)值!
  2. 如果一個(gè)參數(shù)的值 不能確定,則不應(yīng)該設(shè)置默認(rèn)值,具體的數(shù)值在調(diào)用函數(shù)時(shí),由外界傳遞!

缺省參數(shù)的注意事項(xiàng)

  1. 缺省參數(shù)的定義位置
  • 必須保證 帶有默認(rèn)值的缺省參數(shù) 在參數(shù)列表末尾
  • 所以,以下定義是錯(cuò)誤的!
def print_info(name, gender=True, title):
  1. 調(diào)用帶有多個(gè)缺省參數(shù)的函數(shù)
  • 在 調(diào)用函數(shù)時(shí),如果有 多個(gè)缺省參數(shù),需要指定參數(shù)名,這樣解釋器才能夠知道參數(shù)的對(duì)應(yīng)關(guān)系!
def print_info(name, title="", gender=True):
  """

  :param title: 職位
  :param name: 班上同學(xué)的姓名
  :param gender: True 男生 False 女生
  """

  gender_text = "男生"

  if not gender:
    gender_text = "女生"

  print("%s%s 是 %s" % (title, name, gender_text))


# 提示:在指定缺省參數(shù)的默認(rèn)值時(shí),應(yīng)該使用最常見的值作為默認(rèn)值!
print_info("小明")
print_info("老王", title="班長(zhǎng)")
print_info("小美", gender=False)

3.3 多值參數(shù)(知道)

定義支持多值參數(shù)的函數(shù)

  • 有時(shí)可能需要 一個(gè)函數(shù) 能夠處理的參數(shù) 個(gè)數(shù) 是不確定的,這個(gè)時(shí)候,就可以使用 多值參數(shù)
  • python 中有 兩種 多值參數(shù):
    • 參數(shù)名前增加 一個(gè) * 可以接收 元組
    • 參數(shù)名前增加 兩個(gè) * 可以接收 字典
  • 一般在給多值參數(shù)命名時(shí),習(xí)慣使用以下兩個(gè)名字
    • *args —— 存放 元組 參數(shù),前面有一個(gè) *
    • **kwargs —— 存放 字典 參數(shù),前面有兩個(gè) *
  • args 是 arguments 的縮寫,有變量的含義
  • kw 是 keyword 的縮寫,kwargs 可以記憶 鍵值對(duì)參數(shù)
def demo(num, *args, **kwargs):

  print(num)
  print(args)
  print(kwargs)


demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)

提示:多值參數(shù) 的應(yīng)用會(huì)經(jīng)常出現(xiàn)在網(wǎng)絡(luò)上一些大牛開發(fā)的框架中,知道多值參數(shù),有利于我們能夠讀懂大牛的代碼

多值參數(shù)案例 —— 計(jì)算任意多個(gè)數(shù)字的和

需求

  1. 定義一個(gè)函數(shù) sum_numbers,可以接收的 任意多個(gè)整數(shù)
  2. 功能要求:將傳遞的 所有數(shù)字累加 并且返回累加結(jié)果
def sum_numbers(*args):

  num = 0
  # 遍歷 args 元組順序求和
  for n in args:
    num += n

  return num

print(sum_numbers(1, 2, 3))

元組和字典的拆包(知道)

  • 在調(diào)用帶有多值參數(shù)的函數(shù)時(shí),如果希望:
    • 將一個(gè) 元組變量,直接傳遞給 args
    • 將一個(gè) 字典變量,直接傳遞給 kwargs
  • 就可以使用 拆包,簡(jiǎn)化參數(shù)的傳遞,拆包 的方式是:
    • 在 元組變量前,增加 一個(gè) *
    • 在 字典變量前,增加 兩個(gè) *
def demo(*args, **kwargs):

  print(args)
  print(kwargs)


# 需要將一個(gè)元組變量/字典變量傳遞給函數(shù)對(duì)應(yīng)的參數(shù)
gl_nums = (1, 2, 3)
gl_xiaoming = {"name": "小明", "age": 18}

# 會(huì)把 num_tuple 和 xiaoming 作為元組傳遞個(gè) args
# demo(gl_nums, gl_xiaoming)
demo(*gl_nums, **gl_xiaoming)

04. 函數(shù)的遞歸

函數(shù)調(diào)用自身的 編程技巧 稱為遞歸

4.1 遞歸函數(shù)的特點(diǎn)

特點(diǎn)

  • 一個(gè)函數(shù) 內(nèi)部 調(diào)用自己
    • 函數(shù)內(nèi)部可以調(diào)用其他函數(shù),當(dāng)然在函數(shù)內(nèi)部也可以調(diào)用自己

代碼特點(diǎn)

  1. 函數(shù)內(nèi)部的 代碼 是相同的,只是針對(duì) 參數(shù) 不同,處理的結(jié)果不同
  2. 當(dāng) 參數(shù)滿足一個(gè)條件 時(shí),函數(shù)不再執(zhí)行
    • 這個(gè)非常重要,通常被稱為遞歸的出口,否則 會(huì)出現(xiàn)死循環(huán)!

示例代碼

def sum_numbers(num):

  print(num)
  
  # 遞歸的出口很重要,否則會(huì)出現(xiàn)死循環(huán)
  if num == 1:
    return

  sum_numbers(num - 1)
  
sum_numbers(3)

在這里插入圖片描述

4.2 遞歸案例 —— 計(jì)算數(shù)字累加

需求

  1. 定義一個(gè)函數(shù) sum_numbers
  2. 能夠接收一個(gè) num 的整數(shù)參數(shù)
  3. 計(jì)算 1 + 2 + … num 的結(jié)果
def sum_numbers(num):

  if num == 1:
    return 1
  
  # 假設(shè) sum_numbers 能夠完成 num - 1 的累加
  temp = sum_numbers(num - 1)

  # 函數(shù)內(nèi)部的核心算法就是 兩個(gè)數(shù)字的相加
  return num + temp

print(sum_numbers(2))

在這里插入圖片描述
提示:遞歸是一個(gè) 編程技巧,初次接觸遞歸會(huì)感覺有些吃力!在處理 不確定的循環(huán)條件時(shí),格外的有用,例如:遍歷整個(gè)文件目錄的結(jié)構(gòu)

關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python函數(shù)使用技巧總結(jié)》、《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python 實(shí)現(xiàn)快速生成連續(xù)、隨機(jī)字母列表

    python 實(shí)現(xiàn)快速生成連續(xù)、隨機(jī)字母列表

    今天小編就為大家分享一篇python 實(shí)現(xiàn)快速生成連續(xù)、隨機(jī)字母列表,具有很好的價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python中創(chuàng)建對(duì)象列表的實(shí)現(xiàn)示例

    Python中創(chuàng)建對(duì)象列表的實(shí)現(xiàn)示例

    本文主要介紹了Python中創(chuàng)建對(duì)象列表的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 使用Python編寫自己的微型Redis

    使用Python編寫自己的微型Redis

    這篇文章主要為大家詳細(xì)介紹了使用Python編寫自己的微型Redis的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2024-03-03
  • 分享11個(gè)Python自動(dòng)化操作Excel的方法

    分享11個(gè)Python自動(dòng)化操作Excel的方法

    這篇文章主要給大家分享的是11個(gè)Python自動(dòng)化操作Excel的方法,自動(dòng)化辦公,我相信很多人都有強(qiáng)烈的需求,今天我教大家如何利用Python自動(dòng)化操作Excel,需要的朋友可以參考一下
    2022-02-02
  • Python實(shí)現(xiàn)PS圖像明亮度調(diào)整效果示例

    Python實(shí)現(xiàn)PS圖像明亮度調(diào)整效果示例

    這篇文章主要介紹了Python實(shí)現(xiàn)PS圖像明亮度調(diào)整效果,結(jié)合實(shí)例形式分析了Python基于skimage模塊調(diào)整圖片明亮度的原理與具體操作技巧,需要的朋友可以參考下
    2018-01-01
  • Python實(shí)現(xiàn)將多個(gè)空格換為一個(gè)空格.md的方法

    Python實(shí)現(xiàn)將多個(gè)空格換為一個(gè)空格.md的方法

    今天小編就為大家分享一篇Python實(shí)現(xiàn)將多個(gè)空格換為一個(gè)空格.md的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 詳解Tensorflow不同版本要求與CUDA及CUDNN版本對(duì)應(yīng)關(guān)系

    詳解Tensorflow不同版本要求與CUDA及CUDNN版本對(duì)應(yīng)關(guān)系

    這篇文章主要介紹了詳解Tensorflow不同版本要求與CUDA及CUDNN版本對(duì)應(yīng)關(guān)系,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Python中shape[0]、shape[1]和shape[-1]分別的意思詳解(附代碼)

    Python中shape[0]、shape[1]和shape[-1]分別的意思詳解(附代碼)

    剛開始使用python做東西,總是不太理解矩陣、數(shù)組相關(guān)的問題,所以在此記錄shape方面的總結(jié),下面這篇文章主要給大家介紹了關(guān)于Python中shape[0]、shape[1]和shape[-1]分別是什么意思的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • python next()和iter()函數(shù)原理解析

    python next()和iter()函數(shù)原理解析

    這篇文章主要介紹了python next()和iter()函數(shù)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python定時(shí)執(zhí)行之Timer用法示例

    Python定時(shí)執(zhí)行之Timer用法示例

    這篇文章主要介紹了Python定時(shí)執(zhí)行之Timer用法,實(shí)例分析了Timer模塊的原理及相關(guān)使用技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論