python基礎2.0版(5)— 函數第一部分

思維導圖

在這裏插入圖片描述

一、函數的基本概念

1.函數用法和底層分析

函數是可更用的程序代碼塊。函數的作用,不僅可以實現代碼的複用,更能實現代碼的一致性。一致性指的是,只要修改函數代碼,則所有調用該函數的地方都能得到體現。
(在編寫函數時,函數體中的代碼寫法和我們的面達的基本一致,只是對代碼實現了封裝,並增加了函故調用、傳遞參數、返回計算結果等內容。)

2.函數簡介

①函數的基本概念

1.由一個個程序一個個任務組成;函數就是代表一個任務或一個功能
2.函數是代碼複用的通用機制。

②Python 函數的分類

Python 中函技分爲如下幾類:

  • 內置函數

str().list(). len()等都是內置函數,可以拿來真接使用,

  • 標準庫函數

可以通確過 import 語句導入庫,然後使用其中定義的函教

  • 第三方庫函數

Python社區也提供了很多高質量的庫。下安裝這些後,通過 import 語句導入,然後可以使用這些第三方庫的函數

  • 用戶自定義函數

用戶自己義的函數,顯然也是開發中話應用戶自身需求定義的函數。

二、函數的定義和調用

1.核心要點

①語法

Python 中,定義函數的語法如下:

def 函數名([參數列表]):
    “文檔字符串”
    函數體

②要點

  • 我們使用def來定義函數,然後就星一個空格和函教名稱;

(1) Python執行def 時,會創一個函數對象,並綁定到函數名變量上。

  • 參數列表

(1) 圈括號內是形式參數列表,有多個參技數則使用逗號隔開
(2) 形式參數不需要聲明類型,也不需要指定函數返回值類型
(3)無參數,也必須保留空的括號
(4實參列表必須與形參列表一一對應

  • return返回值

(1) 如果函數體中包含return語句,則略束函教執行井返回值
(2)如果函數體中不包含return語句,則回None 值。

  • 調用函數之前,必須先定義函數,即先調def 創建函數對象

(1) 內置函數對象會自動創建
(2 標準庫和第三方庫函數,通過 import導入模塊時,會執行模塊中的def 語句

  • 試驗:
def test():
    print('*'*5)
print(id(test))
print(type(test))
print(test)       #打印對象的value
print(test())     #執行函數體,返回None
test()
>>>
2523548717416
<class 'function'>
<function test at 0x0000024B8F399168>
*****
None
*****

2.形參和實參

(1) 括號內是形式參數列表,有多個參數則使用逗號隔開
(2) 形式參數不需要聲明類型,也不需要指定函數返回值類型
(3)無參數,也必須保留空的括號
(4)調用函數時,傳遞的參數爲“實際參數”,實參列表必須與形參列表一一對應
(5)形式參數命名規則要符合“標識符”命名規則

  • 試驗:定義一個函數,實現比較功能,返回較大值
def compare(a,b):  #a和b爲形式參數
        if a>b:
            return a
        else:
            return b print(compare(2,3)) #2和3爲實際參數

三、文檔字符串(函數的註釋)

程序的可讀性晨理要,一般建議在函數體開始的部分附上函數定義說明,這就是“文檔字符串”,也有人成爲“函數的註釋”。可以通過三個單引導或者三個雙引號來實現,中間可以加入多行文字進行說明。

  • 試驗:
def star(n):
    "根據傳入的n,打印多個星號"
    print("*"*n)
help(star)

>>>
Help on function star in module __main__:
star(n)
    根據傳入的n,打印多個星號
    
help(star.__doc__)
>>>
No Python documentation found for '根據傳入的n,打印多個星號'.
Use help() to get the interactive help utility.
Use help(str) for help on the str class.

調用help(函數名.doc), 可以打印函數的文檔符串。

四、返回值

return返回值要點

1.如果函數體中包return 語句,則結束函數執行並返回值
2.如果函數體中不包含return 語句,則返回None 值
3.要返回多個返回值,使用表,元組,字典、集合將多個值 “存起來”。

  • 試驗:定義一個返回兩個數平均值的函數
def ave(m,n):
    '''計算傳入的m,n的平均值'''
    a=(m+n)/2
    return a

print(ave(9,10))
>>> 9.5

五、變量的作用域(全局變量、局部變量)

變量起作用的範圍稱爲變量的作用域,不同作用域內同名變量之間互不影響。變量分爲:全局變量、局部變量。

1.全局變量

  • 在函數和類定義之外聲明的變量。作用域爲定義的模塊,從定義位置開始到模塊結束
  • 全局變量降低了函數的通用性和可讀性。應儘量免全同變量的使用。
  • 全局變量一般做常量使用。
  • 函數內要改變全局變量的值,使用global 聲明一下

2.局部變量

  • 在函數體中(包合形式參數)聲明的變量。

  • 局部變量的引用比全局變量快,優先考慮使用。

  • 如果局部變量和全局變量同名,則在函數內隱藏全局變量,只使用同名的局部變量

  • 試驗:全局變量作用域;局部變量與全局變量同名

a=100 #全局變量 def f1():
       global a #函數內要改變全局變量的值,使用global 聲明一下
       print(a) #打印全局變量a
       a=300    #局部變量與全局變量同名
   
   f1() print(a)
   >>> 100 300
  • 試驗:輸出全局變量和局部變量
a=100
def f1(a,b,c):
    print(a,b,c)
    print(locals())
    print("*"*10)
    print(globals())

f1(2,3,4)
>>>
2 3 4
{'a': 2, 'b': 3, 'c': 4}
**********
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001B4120B5A08>, 
'__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/PycharmProjects/untitled4/shiyan.py', 
'__cached__': None, 'a': 100, 'f1': <function f1 at 0x000001B4122C9168>}

3.局部變量和全局變量的效率測試

局部量的查詢訪問速度比全局變量快,優先考慮使用,尤其是在循環的時候。
在特別強調效率的地方或循環次數較多的地方 可以通過將全局變量轉爲局部交量提高運行速度

import math
import time

def test1():
    start=time.time()
    for i in range(10000000):
        math.sqrt(30)
    end=time.time()
    print("用時{0}".format((end-start)))

def test2():
    b=math.sqrt
    start=time.time()
    for i in range(10000000):
        b(30)
    end=time.time()
    print("用時{0}".format((end-start)))
test1()
test2()

結果爲:

用時2.8063881397247314
用時1.975881814956665
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章