1. 程式人生 > >python學習【第四篇】python函數 (二)

python學習【第四篇】python函數 (二)

運行時 本質 接收參數 hello 函數 作用域 返回 高階函數 clas

一、裝飾器

裝飾器:本質就是函數,功能是為其它函數添加附加功能

裝飾器的原則:

  • 不修改被修飾函數的源代碼
  • 不修改被修飾函數的調用方式

裝飾器的知識儲備:

  裝飾器 = 高階函數 + 函數嵌套 + 閉包

二、高階函數

高階函數的定義:

  • 函數的接收參數是一個函數名
  • 函數的返回值是一個函數名
  • 滿足上述條件任意一個都可以是高階函數
技術分享圖片
import time


def fun1():
    time.sleep(0.5)
    print("hello")


def computing_run_time(fun):
    """
    計算函數運行時間
    :param fun: 
    :return: 
    
""" start_time = time.time() fun() end_time = time.time() print("運行時間%s" % (end_time - start_time)) computing_run_time(fun1) """ 優點:在不修改函數源代碼的前提下,給函數添加了額外的功能 缺點:改變了調用方式 """
函數的接收參數是函數名 技術分享圖片
import time


def fun1():
    time.sleep(0.5)
    print("hello")


def computing_run_time(fun):
    
""" 計算函數運行時間 :param fun: :return: """ fun() return fun fun1 = computing_run_time(fun1) fun1() """ 優點:沒有改變函數的調用方式 缺點:不能為函數添加新的功能 """
函數的返回值是函數名

註:僅僅是高階函數不能滿足裝飾器的需求

三、函數嵌套和閉包

"""
閉包:首先必須是內部定義的函數,該函數包含對外部作用域而不是全局作用域名字的引用

定義:內部函數的代碼包含對外部函數的代碼的引用,但一定不是對全局作用域的引用
"""


def fun1():

    print("fun1")
    name = 1

    def fun2():
        print("fun2")
        print(name)

        def fun3():
            print("fun3")
            print(name)
        fun3()
    fun2()

fun1()

  

  

python學習【第四篇】python函數 (二)