溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python函數(shù)式編程舉例分析

發(fā)布時(shí)間:2021-11-25 11:28:08 來源:億速云 閱讀:179 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“python函數(shù)式編程舉例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“python函數(shù)式編程舉例分析”吧!

入門

Python內(nèi)置了很多有用的函數(shù),我們可以直接調(diào)用。

要調(diào)用一個(gè)函數(shù),需要知道函數(shù)的名稱和參數(shù),比如求絕對(duì)值的函數(shù)abs,只有一個(gè)參數(shù)。

也可以在交互式命令行通過help(abs)查看abs函數(shù)的幫助信息。

調(diào)用abs函數(shù):

>>> abs(100)
100
>>> abs(-20)
20
>>> abs(12.34)
12.34

函數(shù)式編程

在Python中的函數(shù)就是為了實(shí)現(xiàn)某一段功能的代碼段,可以重復(fù)利用。

就是以后不要重復(fù)造輪子,遇到那個(gè)場(chǎng)景就用那個(gè)函數(shù),就是函數(shù)式編程。

下面,我定義一個(gè) my_func,傳入一個(gè)Hello World,再打印一個(gè)Hello World

def my_func(message):
    print('Got a message: {}'.format(message))

# 調(diào)用函數(shù) my_func()
my_func('Hello World')
# 輸出
Got a message: Hello World

簡(jiǎn)單的知識(shí)點(diǎn)

  • def是函數(shù)的聲明

  • my_func是函數(shù)的名稱

  • message 是函數(shù)的參數(shù)

  • print 是函數(shù)的主體部分

  • 在函數(shù)的最后 可以返回調(diào)用結(jié)果(return 或yield ),也可以不返回

「定義在前,調(diào)用在后」

def my_sum(a, b):
    return a + b

result = my_sum(3, 5)
print(result)

# 輸出
8

對(duì)于函數(shù)的參數(shù)可以設(shè)定默認(rèn)值

def func(param = 0):
    pass

如果param沒有傳入,那么參數(shù)默認(rèn)是0,如果傳入了參數(shù),就覆蓋默認(rèn)值

多態(tài)

傳入的參數(shù)可以接受任何數(shù)據(jù)類型

比如,列表

print(my_sum([1, 2], [3, 4]))

# 輸出
[1, 2, 3, 4]

再比如,字符串

print(my_sum('hello ', 'world'))

# 輸出
hello world

當(dāng)然,如果參數(shù)數(shù)據(jù)類型不同,而兩者無(wú)法相加

print(my_sum([1, 2], 'hello'))
TypeError: can only concatenate list (not "str") to list

同一個(gè)函數(shù)可以應(yīng)用到整數(shù),列表,字符串等等的操作稱為多態(tài)。這可不是變態(tài)。

嵌套函數(shù)

函數(shù)嵌套就是函數(shù)中有函數(shù),就叫嵌套函數(shù)了。

def f1():
    print('hello')
    def f2():
        print('world')
    f2()
f1()

# 輸出
hello
world

函數(shù)的嵌套保證了內(nèi)部函數(shù)的調(diào)用,內(nèi)部函數(shù)只能被外部函數(shù)所調(diào)用,不會(huì)作用于全局域中。

合理使用函數(shù)嵌套,提高運(yùn)算速度

比如計(jì)算5的階乘。

def factorial(input):
    
    if not isinstance(input, int):
        raise Exception('input must be an integer.')
    if input < 0:
        raise Exception('input must be greater or equal to 0' )
  
    def inner_factorial(input):
        if input <= 1:
            return 1
        return input * inner_factorial(input-1)
    return inner_factorial(input)


print(factorial(5))

120

函數(shù)變量作用域

如果變量是izai函數(shù)內(nèi)部定義的,稱為局部變量,只在函數(shù)內(nèi)部有效,當(dāng)函數(shù)執(zhí)行完畢,局部變量就會(huì)被回收。

全局變量就是寫在函數(shù)外面的。

MIN_VALUE = 1
MAX_VALUE = 10
def validation_check(value):
    if value < MIN_VALUE or value > MAX_VALUE:
        raise Exception('validation check fails')

這里的MIN_VELUE 和MAX_VALUE就是全局變量,但是我們不能在函數(shù)的內(nèi)部隨意改變?nèi)肿兞康闹?/p>

MIN_VALUE = 1
def validation_check(value):
    MIN_VALUE += 1
    
validation_check(5)

報(bào)錯(cuò):UnboundLocalError: local variable 'MIN_VALUE' referenced before assignment

要想改變 必須加上global這個(gè)聲明

MIN_VALUE = 1
def validation_check(value):
    global MIN_VALUE  
    MIN_VALUE += 1
    
validation_check(5)

global告訴python解析器,函數(shù)內(nèi)部的變量MIN_VALUE就是定義的全局變量,這里輸入的是2,這樣修改的全局變量的值

MIN_VALUE = 1
MAX_VALUE = 10
def validation_check():
    MIN_VALUE = 3
    print(MIN_VALUE)
validation_check()
print(MIN_VALUE)

# 3
# 1

對(duì)于嵌套函數(shù)來說,內(nèi)部函數(shù)無(wú)法修改外部函數(shù)定義的變量,可以訪問,想要修改就要加上 nonolocal

def outer():
    x = "local"
    def inner():
        nonlocal x # nonlocal 關(guān)鍵字表示這里的 x 就是外部函數(shù) outer 定義的變量 x
        x = 'nonlocal'
        print("inner:", x)
    inner()
    print("outer:", x)
outer()
# 輸出
inner: nonlocal
outer: nonlocal

不加就不會(huì)覆蓋

def outer():
    x = "local"
    def inner():
        x = 'nonlocal' # 這里的 x 是 inner 這個(gè)函數(shù)的局部變量
        print("inner:", x)
    inner()
    print("outer:", x)
outer()
# 輸出
inner: nonlocal
outer: local

閉包

函數(shù)的閉包其實(shí)和函數(shù)的嵌套很相似。和嵌套不同,閉包的外部函數(shù)返回是一個(gè)函數(shù),而不是一個(gè)具體的值。

閉包就是在函數(shù)里面調(diào)用函數(shù),一般用return來執(zhí)行,return出內(nèi)部調(diào)用的函數(shù)名。

我們接下來計(jì)算下一個(gè)數(shù)的n次冪,用閉包寫如下:

def nth_power(exponent):
    def exponent_of(base):
        return base ** exponent
    return exponent_of # 返回值是 exponent_of 函數(shù)

square = nth_power(2) # 計(jì)算一個(gè)數(shù)的平方
cube = nth_power(3) # 計(jì)算一個(gè)數(shù)的立方 
square
# 輸出
<function __main__.nth_power.<locals>.exponent(base)>

cube
# 輸出
<function __main__.nth_power.<locals>.exponent(base)>

print(square(2))  # 計(jì)算 2 的平方
print(cube(2)) # 計(jì)算 2 的立方
# 輸出
4 # 2^2
8 # 2^3

當(dāng)然,我們也可以通過一個(gè)函數(shù)來寫這個(gè)功能:

def nth_power(base,exponent):
    return base**exponent

但是,使用閉包,可以讓程序變得更加簡(jiǎn)潔易懂。

到此,相信大家對(duì)“python函數(shù)式編程舉例分析”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI