真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python基礎_函數(shù)進階

函數(shù)進階

目標

  • 函數(shù)參數(shù)和返回值的作用
  • 函數(shù)的返回值 進階
  • 函數(shù)的參數(shù) 進階
  • 遞歸函數(shù)

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

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

成都創(chuàng)新互聯(lián)是專業(yè)的陸港網(wǎng)站建設公司,陸港接單;提供做網(wǎng)站、成都網(wǎng)站設計,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行陸港網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

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

python基礎_函數(shù)進階

定義函數(shù)時,是否接收參數(shù),或者是否返回結果,是根據(jù) 實際的功能需求來決定的!

  • 如果函數(shù) 內部處理的數(shù)據(jù)不確定,就可以將外界的數(shù)據(jù)以參數(shù)傳遞到函數(shù)內部
  • 如果希望一個函數(shù) 執(zhí)行完成后,向外界匯報執(zhí)行結果,就可以增加函數(shù)的返回值

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

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

  • 只是單純地做一件事情,例如 顯示菜單
  • 在函數(shù)內部 針對全局變量進行操作,例如:新建名片,最終結果 記錄在全局變量

注意:

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

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

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

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

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

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

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

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

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

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

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

  • 在程序開發(fā)中,有時候,會希望 一個函數(shù)執(zhí)行結束后,告訴調用者一個結果,以便調用者針對具體的結果做后續(xù)的處理
  • 返回值是函數(shù) 完成工作后,最后給調用者的 一個結果
  • 在函數(shù)中使用 return 關鍵字可以返回結果
  • 調用函數(shù)一方,可以 使用變量接收函數(shù)的返回結果

示例 —— 溫度和濕度測量

  • 假設要開發(fā)一個函數(shù)能夠同時返回當前的溫度和濕度
  • 先完成返回溫度的功能如下:
def measure():
    """返回當前的溫度"""

    print("開始測量...")
    temp = 39
    print("測量結束...")

    return temp

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

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

    return (temp, wetness)

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

技巧:

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

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

題目要求

  • 有兩個整數(shù)變量 a = 6, b = 100
  • 不使用其他變量,交換兩個變量的值
    解法 1 —— 使用其他變量
# 解法 1 - 使用臨時變量
c = b
b = a
a = c

解法 2 —— 不使用臨時變量

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

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

a, b = b, a

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

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

問題 1:在函數(shù)內部,針對參數(shù)使用 賦值語句,會不會影響調用函數(shù)時傳遞的 實參變量? —— 不會!

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

    print("函數(shù)內部")

    # 賦值語句
    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ù)內部,使用 方法修改了數(shù)據(jù)的內容,同樣會影響到外部的數(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 中,列表變量調用 += 本質上是在執(zhí)行列表變量的 extend 方法,不會修改變量的引用
def demo(num, num_list):

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

    # num = num + num
    num += num
    # num_list.extend(num_list) 由于是調用方法,所以不會修改變量的引用
    # 函數(shù)執(zhí)行結束后,外部數(shù)據(jù)同樣會發(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ù) 指定一個默認值,具有默認值的參數(shù)就叫做 缺省參數(shù)
  • 調用函數(shù)時,如果沒有傳入 缺省參數(shù)的值,則在函數(shù)內部使用定義函數(shù)時指定的 參數(shù)默認值
  • 函數(shù)的缺省參數(shù),將常見的值設置為參數(shù)的缺省值,從而 簡化函數(shù)的調用
    例如:對列表排序的方法
gl_num_list = [6, 3, 9]

# 默認就是升序排序,因為這種應用需求更多
gl_num_list.sort()
print(gl_num_list)

# 只有當需要降序排序時,才需要傳遞 `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))

提示

  • 缺省參數(shù),需要使用 最常見的值作為默認值!
  • 如果一個參數(shù)的值 不能確定,則不應該設置默認值,具體的數(shù)值在調用函數(shù)時,由外界傳遞!

缺省參數(shù)的注意事項
1) 缺省參數(shù)的定義位置

  • 必須保證 帶有默認值的缺省參數(shù) 在參數(shù)列表末尾
    *所以,以下定義是錯誤的!
    def print_info(name, gender=True, title):

2) 調用帶有多個缺省參數(shù)的函數(shù)

  • 在 調用函數(shù)時,如果有 多個缺省參數(shù),需要指定參數(shù)名,這樣解釋器才能夠知道參數(shù)的對應關系!
def print_info(name, title="", gender=True):
    """

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

    gender_text = "男生"

    if not gender:
        gender_text = "女生"

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

# 提示:在指定缺省參數(shù)的默認值時,應該使用最常見的值作為默認值!
print_info("xm")
print_info("lb", title="monitor")
print_info("xm", gender=False)

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

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

  • 有時可能需要 一個函數(shù) 能夠處理的參數(shù) 個數(shù) 是不確定的,這個時候,就可以使用 多值參數(shù)
  • python 中有 兩種 多值參數(shù):
    • 參數(shù)名前增加 一個 * 可以接收 元組
    • 參數(shù)名前增加 兩個 * 可以接收 字典
  • 一般在給多值參數(shù)命名時,習慣使用以下兩個名字

  • *args —— 存放 元組 參數(shù),前面有一個 *
  • **kwargs —— 存放 字典 參數(shù),前面有兩個 *
  • args 是 arguments 的縮寫,有變量的含義
  • kw 是 keyword 的縮寫, kwargs 可以記憶 鍵值對參數(shù)
def demo(num, *args, **kwargs):

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

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

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

需求

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

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

    return num

print(sum_numbers(1, 2, 3))

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

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

    print(args)
    print(kwargs)

# 需要將一個元組變量/字典變量傳遞給函數(shù)對應的參數(shù)
gl_nums = (1, 2, 3)
gl_xm = {"name": "xm", "age": 18}

# 會把 num_tuple 和 xm 作為元組傳遞個 args
# demo(gl_nums, gl_xm)
demo(*gl_nums, **gl_xm)

04. 函數(shù)的遞歸

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

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

特點

  • 一個函數(shù) 內部 調用自己
    • 函數(shù)內部可以調用其他函數(shù),當然在函數(shù)內部也可以調用自己

代碼特點

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

示例代碼

def sum_numbers(num):

    print(num)

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

    sum_numbers(num - 1)

sum_numbers(3)

python基礎_函數(shù)進階

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

需求

  • 定義一個函數(shù) sum_numbers
  • 能夠接收一個 num 的整數(shù)參數(shù)
  • 計算 1 + 2 + ... num 的結果
def sum_numbers(num):

    if num == 1:
        return 1

    # 假設 sum_numbers 能夠完成 num - 1 的累加
    temp = sum_numbers(num - 1)

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

print(sum_numbers(2))

python基礎_函數(shù)進階

提示:遞歸是一個 編程技巧,初次接觸遞歸會感覺有些吃力!在處理 不確定的循環(huán)條件時,格外的有用,例如:遍歷整個文件目錄的結構


當前標題:python基礎_函數(shù)進階
文章網(wǎng)址:http://weahome.cn/article/gsjpcj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部