030 函數的定義與使用

1、概述

  • 函數的理解與定義
  • 函數的使用及調用過程
  • 函數的參數傳遞
  • 函數的返回值
  • 局部變量和全局變量
  • lambda函數

2、函數的理解與定義

# DayDayUpQ4.py


def dayUp(df):
    dayup = 1
    for i in range(365):
        if i % 7 in [6, 0]:
            dayup = dayup * (1 - 0.01)
        else:
            dayup = dayup * (1 + df)
    return dayup


dayfactor = 0.01
while dayUp(dayfactor) < 37.78:
    dayfactor += 0.001
print("工做日的努力參數是:{:.3f} ".format(dayfactor))
工做日的努力參數是:0.019

2.1 函數的定義

函數是一段代碼的表示編程

  • 函數是一段具備特定功能的、可重用的語句組
  • 函數是一種功能的抽象,通常函數表達特定功能
  • 兩個做用:下降編程難度 和 代碼複用
def <函數名>(<參數(0個或多個)>) :
    <函數體>
    return <返回值>

030-函數的定義與使用-01.jpg?x-oss-process=style/watermark

y = f(x)函數

  • 函數定義時,所指定的參數是一種佔位符
  • 函數定義後,若是不通過調用,不會被執行
  • 函數定義時,參數是輸入、函數體是處理、結果是輸出 (IPO)

3、函數的使用及調用過程

3.1 函數的調用

調用是運行函數代碼的方式設計

def fact(n):  # 函數的定義
    s = 1
    for i in range(1,n+1):
        s *= i
    return s
fact(10)  # 函數的調用
  • 調用時要給出實際參數
  • 實際參數替換定義中的參數
  • 函數調用後獲得返回值

3.2 函數的調用過程

030-函數的定義與使用-02.jpg?x-oss-process=style/watermark

4、函數的參數傳遞

函數能夠有參數,也能夠沒有,但必須保留括號3d

def <函數名>(<非可選參數>,<可選參數>) :
    <函數體>
    return <返回值>

4.1 可選參數傳遞

030-函數的定義與使用-03.jpg?x-oss-process=style/watermark

4.2 可變參數傳遞

函數定義時能夠設計可變數量參數,既不肯定參數總數量code

def <函數名>(<參數>,*args) :
    <函數體>
    return <返回值>
def fact(n, *args):
    """計算機n!乘數"""
    s = 1
    for i in range(1, n + 1):
        s *= i
    for item in args:
        s *= item
    return s


fact(10, 3, 5, 8)
435456000

4.3 參數傳遞的兩種方式

函數調用時,參數能夠按照位置或名稱方式傳遞orm

def fact(n, m=1):
    s = 1
    for i in range(1, n + 1):
        s *= i
    return s // m
fact(10, 5)  # 位置傳遞
725760
fact(m=5, n=10)  # 名稱傳遞
725760

5、函數的返回值

函數能夠返回0個或多個結果blog

  • return保留字用來傳遞返回值
  • 函數能夠有返回值,也能夠沒有,能夠有return,也能夠沒有
  • return能夠傳遞0個返回值,也能夠傳遞任意多個返回值
def fact(n, m=1):
    s = 1
    for i in range(1, n + 1):
        s *= i
    return s // m, n, m


a, b, c = fact(10, 5)
a, b, c
(725760, 10, 5)

6、局部變量和全局變量

030-函數的定義與使用-04.jpg?x-oss-process=style/watermark

030-函數的定義與使用-05.jpg?x-oss-process=style/watermark

6.1 規則1

規則1:局部變量和全局變量是不一樣變量it

  • 局部變量是函數內部的佔位符,與全局變量可能重名但不一樣
  • 函數運算結束後,局部變量被釋放
  • 能夠使用global保留字在函數內部使用全局變量

030-函數的定義與使用-06.jpg?x-oss-process=style/watermark

使用global後form

030-函數的定義與使用-07.jpg?x-oss-process=style/watermark

6.2 規則2

規則2:局部變量爲組合數據類型且未建立,等同於全局變量

030-函數的定義與使用-08.jpg?x-oss-process=style/watermark

030-函數的定義與使用-09.jpg?x-oss-process=style/watermark

6.3 使用規則

  • 基本數據類型,不管是否重名,局部變量與全局變量不一樣
  • 能夠經過global保留字在函數內部聲明全局變量
  • 組合數據類型,若是局部變量未真實建立,則是全局變量

7、lambda函數

lambda函數返回函數名做爲結果

  • lambda函數是一種匿名函數,即沒有名字的函數
  • 使用lambda保留字定義,函數名是返回結果
  • lambda函數用於定義簡單的、可以在一行內表示的函數
<函數名> = lambda <參數>: <表達式>

等價於

def <函數名>(<參數>) :
    <函數體>
    return <返回值>
f = lambda x, y: x + y
f(10, 15)
25
f = lambda: 'lambda函數'
f()
'lambda函數'

7.1 lambda函數的應用

謹慎使用lambda函數

  • lambda函數主要用做一些特定函數或方法的參數
  • lambda函數有一些固定使用方式,建議逐步掌握
  • 通常狀況,建議使用def定義的普通函數

8、小結

  • 使用保留字def定義函數,lambda定義匿名函數
  • 可選參數(賦初值)、可變參數(*b)、名稱傳遞
  • 保留字return能夠返回任意多個結果
  • 保留字global聲明使用全局變量,一些隱式規則
相關文章
相關標籤/搜索