中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

07-01 函數的基本使用

發布時間:2020-03-02 12:41:05 來源:網絡 閱讀:144 作者:linhaifeng4573 欄目:編程語言

一 引入

? 基于前一部分的學習,我們已經能開發一些功能簡單的小程序了,但隨著程序功能的增多,代碼量隨之增大,此時仍不加區分地把所有功能的實現代碼放到一起,將會使得程序的組織結構不清晰,可讀性變差,且程序中需要頻繁使用同一功能時,只能重復編寫該功能的實現代碼,日積月累,程序將變得冗長,并且當某一功能需要修改時,又不得不找出所有定義及使用這段功能的地方修改之,管理維護的難度極大,好吧,裝了半天逼,到底該如何解決提出的這些問題呢?

插圖:惡搞圖01
07-01 函數的基本使用

我們完全可以從現實生活中找到簡化程序設計的方案:比如一個修理工會事先準備好螺絲刀、錘子等工具,這樣在進行修理的過程中,需要用到擰螺絲的功能時就直接拿來螺絲刀使用,需要用到錘擊物體的功能時就直接拿來錘子使用,而無需臨時制造。這個例子的核心在于’事先準備好工具’,遇到應用場景時’拿來就用’,。

在程序中,具備某一功能的‘工具’指的就是函數,‘事先準備工具’的過程即函數的定義,‘拿來就用’即函數的調用。

二 定義函數

函數的使用必須遵循’先定義,后調用’的原則。函數的定義就相當于事先將函數體代碼保存起來,然后將內存地址賦值給函數名,函數名就是對這段代碼的引用,這和變量的定義是相似的。沒有事先定義函數而直接調用,就相當于在引用一個不存在的’變量名’。

定義函數的語法

def 函數名(參數1,參數2,...):
    """文檔描述"""
    函數體
    return 值
  1. def: 定義函數的關鍵字;
  2. 函數名:函數名指向函數內存地址,是對函數體代碼的引用。函數的命名應該反映出函數的功能;
  3. 括號:括號內定義參數,參數是可有可無的,且無需指定參數的類型;
  4. 冒號:括號后要加冒號,然后在下一行開始縮進編寫函數體的代碼;
  5. """文檔描述""": 描述函數功能,參數介紹等信息的文檔,非必要,但是建議加上,從而增強函數的可讀性;
  6. 函數體:由語句和表達式組成;
  7. return 值:定義函數的返回值,return是可有可無的。

插圖:惡搞圖02
07-01 函數的基本使用

參數是函數的調用者向函數體傳值的媒介,若函數體代碼邏輯依賴外部傳來的參數時則需要定義為參函數,

def my_min(x,y):
    res=x if x < y else y
    return res

否則定義為無參函數

def interactive():
    user=input('user>>: ').strip()
    pwd=input('password>>: ').strip()
    return (user,pwd)

? 函數體為pass代表什么都不做,稱之為空函數。定義空函數通常是有用的,因為在程序設計的開始,往往是先想好程序都需要完成什么功能,然后把所有功能都列舉出來用pass充當函數體“占位符”,這將使得程序的體系結構立見,清晰且可讀性強。例如要編寫一個ftp程序,我們可能想到的功能有用戶認證,下載,上傳,瀏覽,切換目錄等功能,可以先做出如下定義:

def auth_user():
    """user authentication function"""
    pass

def download_file():
    """download file function"""
    pass

def upload_file():
    """upload file function"""
    pass

def ls():
    """list contents function"""
    pass

def cd():
    """change directory"""
    pass

之后我們便可以統籌安排編程任務,有選擇性的去實現上述功能來替換掉pass,從而提高開發效率。

插圖:惡搞圖03
07-01 函數的基本使用

三 調用函數與函數返回值

? 函數的使用分為定義階段與調用階段,定義函數時只檢測語法,不執行函數體代碼,函數名加括號即函數調用,只有調用函數時才會執行函數體代碼

#定義階段
def foo():
    print('in the foo')
    bar()

def bar():
    print('in the bar')

#調用階段
foo()

執行結果:

in the foo
in the bar

定義階段函數foo與bar均無語法錯誤,而在調用階段調用foo()時,函數foo與bar都早已經存在于內存中了,所以不會有任何問題。

插圖:惡搞圖04
07-01 函數的基本使用

按照在程序出現的形式和位置,可將函數的調用形式分為三種:

#1、語句形式:
foo()

#2、表達式形式:
m=my_min(1,2) #將調用函數的返回值賦值給x
n=10*my_min(1,2) #將調用函數的返回值乘以10的結果賦值給n

# 3、函數調用作為參數的形式:
# my_min(2,3)作為函數my_min的第二個參數,實現了取1,2,3中的較小者賦值給m
m=my_min(1,my_min(2,3))

若需要將函數體代碼執行的結果返回給調用者,則需要用到return。return后無值或直接省略return,則默認返回None,return的返回值無類型限制,且可以將多個返回值放到一個元組內。

>>> def test(x,y,z):
...     return x,y,z #等同于return (x,y,z)
... 
>>> res=test(1,2,3)
>>> print(res)
(1, 2, 3)

return是一個函數結束的標志,函數內可以有多個return,但只執行一次函數就結束了,并把return后定義的值作為本次調用的結果返回。
07-01 函數的基本使用

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武川县| 措勤县| 九龙坡区| 永康市| 洛宁县| 鹤峰县| 郴州市| 广昌县| 铁岭县| 秦安县| 文昌市| 绍兴县| 嵊泗县| 阿合奇县| 连城县| 平顺县| 京山县| 佛坪县| 宣恩县| 榆中县| 岑溪市| 祥云县| 怀来县| 江西省| 怀远县| 南陵县| 福安市| 峡江县| 汉川市| 濉溪县| 东丰县| 故城县| 周至县| 新龙县| 平果县| 武平县| 商洛市| 闽清县| 灵寿县| 上林县| 健康|