欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Python中的普通函數和高階函數

 更新時間:2021年12月16日 14:41:41   作者:雷學委  
這篇文章主要為大家介紹了Python中的普通函數和高階函數,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

什么是函數

每個語言都有函數,甚至大家用的Excel里面也有函數,我們以前學習的數學也很多各種各樣的函數。

Python中的函數也是一樣的。

def f(x):
    print("參數為:",x)
    return x

這里的函數 y = f(x), 在數學中表示為一條斜率為1的直線。

函數的嵌套調用

def z(x):
    pass
def f(x):
    print("參數為:",x)
    return z(x)

像這樣,我們在f(x)中調用了z(x)函數(這里使用了pass關鍵字,實現先不寫,僅作展示目的)

我們能不能不定義z(x)就定義一個函數調用別的函數呢?

就像實現一個數的平方,函數的‘平方',大概這個意思。

高階函數

def f(z):
    return z()

這就是高階函數,f函數需要外界提供一個參數,這個參數必須是一個函數。

在使用f(z)的時候,我們不能給一個f(2), f(3)這樣的值?;蛘哂袀€函數如d(x)返回非函數值結果,我們不能這樣調用:f(d(1))。

學委準備了下面的代碼,從簡單函數逐步演化為高階函數:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/24 11:39 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷學委
# @XueWeiTag: CodingDemo
# @File : func_demo2.py
# @Project : hello
def f1(x):
    return x
def f2(x, z=100):
    return x + z / 10
def f3(x, z=100, *dynamic_args):
    sum = 0
    for arg in dynamic_args:
        sum += arg
    return x + z / 10 + sum / 10000.0
def dummy_sum(*args):
    return 0
def f4(x, z=100, sum_func=dummy_sum):
    return x + z / 10 + sum_func() / 10000.0
print(f1(100))
print(f2(100, z=50))
print(f3(100, 50, 4, 5, 6))
def sum_g(*dynamic_args):
    def sum_func():
        sum = 0
        for arg in dynamic_args:
            sum += arg
        return sum
    return sum_func
print(f4(100, 50, sum_g(4, 5, 6)))

這里我們看到函數f1, f2, f3, f4。

補充一個知識點: *dynamic_args 是一個動態(tài)參數,不定長度的參數。
也就是f3明明聲明了3個參數,最后我們給了5個參數。
這里f3認為x=100, z=50, dynamic_args = [4, 5, 6]

我們先看看輸出結果:

f3 和f4 看起來結果一樣。

但是性質完整不一樣,讀者可以思考十秒。

f4彈性非常大,因為第三個參數為函數。

高階函數可以幫助我們把計算‘降維'(三維變成二維,二維變一維)。

我們思考一下計算圓形和方形的面積

相信大家閉著眼都能寫出下面兩個函數:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/24 11:39 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷學委
# @XueWeiTag: CodingDemo
# @File : func_demo2.py
# @Project : hello
import math
def circle_area(r):
    return math.pi * r * r
def rectangle_area(a, b):
    return a * b

這是圓形面積的數學公式:

f ( r ) = π ? r 2

這是矩形面積的數學公式:

f ( a , b ) = a ? b

我們看到這里有的有1個參數的,有的有兩個的怎么變成高階函數?

讀者可以思考一會。

下面是代碼:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/24 11:39 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷學委
# @XueWeiTag: CodingDemo
# @File : func_demo2.py
# @Project : hello
import math
def circle_area(r):
    return math.pi * r * r
def rectangle_area(a, b):
    return a * b
def area(x, linear, factor):
    return x * linear(x, factor)
def relation(x, factor):
    return x * factor
a = 10
b = 20
print("長方形面積:", rectangle_area(a, b))
print("圓形面積:", circle_area(a))
print("長方形面積:", area(a, relation, factor=b / a))
print("圓形面積:", area(a, relation, factor=math.pi))

結果如下圖:

這只是一種解法。

從代碼可以看到,我們把圓形和矩形都看作某一個參照物(半徑/一條邊)的平方,再成乘以一個系數。

下面,我們把正方形面積計算加上:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/24 11:39 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷學委
# @XueWeiTag: CodingDemo
# @File : func_demo2.py
# @Project : hello
import math
def circle_area(r):
    return math.pi * r * r
def square_area(a):
    return a * a
def rectangle_area(a, b):
    return a * b
def area(x, linear, factor):
    return x * linear(x, factor)
def relation(x, factor):
    return x * factor
a = 10
b = 20
print("長方形面積:", rectangle_area(a, b))
print("正方形面積:", square_area(a))
print("圓形面積:", circle_area(a))
print("長方形面積:", area(a, relation, factor=b / a))
print("正方形面積:", area(a, relation, factor=1))
print("圓形面積:", area(a, relation, factor=math.pi))

上面的代碼執(zhí)行結果如下:

這就是高階函數的神奇之處,我們從正方形的角度思考。

只用一個area函數和relation函數,這兩個函數都不必修改,只需要給一個factor(經驗因子),就能快速計算它的面積。

為何高階函數能夠降低維度

從上面距離的計算面積的函數,我們可以看到計算圓形和長方形,都能看成一個一維函數。

然后以正方形面積為參照物,快速估算出圓形和方形的面積。

當然上面的計算圓形面積采用了半徑,還不夠直觀,讀者可以自行改為直徑,這樣factor = math.pi / 4。

這樣在感受上會更貼切。

總結

除了上面介紹的函數,參數,高階函數。我們還可以使用lambda函數:

lambda  參數1, 參數2,。。。,第n個參數 : 計算表達式

上面的函數relation函數可以省略不寫,最后調用改為:

print("長方形面積:", area(a, lambda x, f: x * f, factor=b / a))
print("正方形面積:", area(a, lambda x, f: x * f, factor=1))
print("圓形面積:", area(a, lambda x, f: x * f, factor=math.pi))

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • python 實現docx與doc文件的互相轉換

    python 實現docx與doc文件的互相轉換

    這篇文章主要介紹了python 實現docx與doc文件的互相轉換操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 一行Python代碼制作動態(tài)二維碼的實現

    一行Python代碼制作動態(tài)二維碼的實現

    這篇文章主要介紹了一行Python代碼制作動態(tài)二維碼的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • python 異或加密字符串的實例

    python 異或加密字符串的實例

    今天小編就為大家分享一篇python 異或加密字符串的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 用Python實現屏幕截圖詳解

    用Python實現屏幕截圖詳解

    大家好,本篇文章主要講的是用Python實現屏幕截圖詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • python優(yōu)化數據預處理方法Pandas pipe詳解

    python優(yōu)化數據預處理方法Pandas pipe詳解

    在本文中,我們將重點討論一個將多個預處理操作組織成單個操作的特定函數:pipe。我將通過示例方式來展示如何使用它,讓我們從數據創(chuàng)建數據幀開始吧
    2021-11-11
  • Python實現從log日志中提取ip的方法【正則提取】

    Python實現從log日志中提取ip的方法【正則提取】

    這篇文章主要介紹了Python實現從log日志中提取ip的方法,涉及Python文件讀取、數據遍歷、正則匹配等相關操作技巧,需要的朋友可以參考下
    2018-03-03
  • 用Python每天自動給女友免費發(fā)短信

    用Python每天自動給女友免費發(fā)短信

    大家好,本篇文章主要講的是用Python每天自動給女友免費發(fā)短信,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Python中列表、字典、元組、集合數據結構整理

    Python中列表、字典、元組、集合數據結構整理

    這篇文章主要介紹了Python中列表、字典、元組、集合數據結構整理,較為詳細的分析了這幾類數據結構的具體用法及相關技巧,需要的朋友可以參考下
    2014-11-11
  • 解決pip安裝tensorflow中出現的no module named tensorflow.python 問題方法

    解決pip安裝tensorflow中出現的no module named tensorflow.python 問題方法

    這篇文章主要介紹了解決pip安裝tensorflow中出現的no module named tensorflow.python 問題方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • django啟動uwsgi報錯的解決方法

    django啟動uwsgi報錯的解決方法

    這篇文章主要給大家介紹了關于django啟動uwsgi報錯的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-04-04

最新評論