Python中的函式

2021-07-26 22:08:15 字數 3080 閱讀 9306

# -*- coding: utf-8 -*-

import math

deff

(x) :

return x * x

defadd

(x, y, f):

return f(x) + f(y)

print add(1, 2, f)

print add(1, 2, math.sqrt)

# -*- coding: utf-8 -*-

deff

(x) :

return x * x

print map(f, range(1, 11))

# -*- coding: utf-8 -*-

deff

(x, y):

return x + y

print reduce(f, range(1, 11))

print reduce(f, range(1, 11), 0)

# -*- coding: utf-8 -*-

deff

(x) :

#判斷字串是否非空

return x and len(x.strip()) > 0

print filter(f, [none, '', 'dada', 'adasa'])

# -*- coding: utf-8 -*-

defreversed_cmp

(x, y):

#倒序排序

if x > y:

return -1

if x < y:

return

1return

0print sorted(range(1, 11), reversed_cmp)

eg:

# -*- ending: utf-8 -*-

deff

():print

'call f()...'

# 定義函式g:

defg

():print

'call g()...'

# 返回函式g:

return g

返回函式可以把一些計算延遲執行。例如,如果定義乙個普通的求和函式:

# -*- coding: utf-8 -*-

defcalc_sum

(lst):

deflazy_sum

():return sum(lst)

return lazy_sum

f = calc_sum(range(1, 11))

print f()

注意: 發現沒法把 lazy_sum 移到 calc_sum 的外部,因為它引用了 calc_sum 的引數 lst。

像這種內層函式引用了外層函式的變數(引數也算變數),然後返回內層函式的情況,稱為閉包(closure)。

閉包的特點是返回的函式還引用了外層函式的區域性變數,所以,要正確使用閉包,就要確保引用的區域性變數在函式返回後不能變。舉例如下:

# 希望一次返回3個函式,分別計算1x1,2x2,3x3:

9process finished with exit code 0

你可能認為呼叫f1(),f2()和f3()結果應該是1,4,9,但實際結果全部都是 9(請自己動手驗證)。

原因就是當count()函式返回了3個函式時,這3個函式所引用的變數 i 的值已經變成了3。由於f1、f2、f3並沒有被呼叫,所以,此時他們並未計算 i*i,當 f1 被呼叫時:

因為f1現在才計算i*i,但現在i的值已經變為3

因此,返回函式不要引用任何迴圈變數,或者後續會發生變化的變數。

lambda x: x * x
關鍵字lambda 表示匿名函式,冒號前面的 x 表示函式引數。

匿名函式有個限制,就是只能有乙個表示式,不寫return,返回值就是該表示式的結果。

使用匿名函式,可以不必定義函式名,直接建立乙個函式物件,很多時候可以簡化**.

# -*- coding: utf-8 -*-

deflog

(f):

deffn

(*args, **kw):

print

'call ' + f.__name__ + '()...'

return f(*args, **kw)

return fn

@log

defadd

(x, y):

return x + y

print add(1, 2)

# -*- coding: utf-8 -*-

import time

defperformance

(f):

deffn

(*args, **kw):

t1 = time.time()

r = f(*args, **kw)

t2 = time.time()

print

'call %s() in %fs' % (f.__name__, (t2 - t1))

return r

return fn

@performance

deffactorial

(n):

return reduce(lambda x,y: x*y, range(1, n+1))

python函式實驗 Python中的函式

一 定義 1 def函式名 引數 2 3 4 函式體5 6 返回值 函式的定義主要有如下要點 def 表示函式的關鍵字 函式名 函式的名稱,日後根據函式名呼叫函式,用引號標記即可 函式體 函式中進行一系列的邏輯計算,如 傳送郵件 計算出 11,22,38,888,2 中的最大數等.引數 為函式體提供...

python中的lo函式 Python 函式

函式 內建函式 print input len type print hello world 函式 引數 定義函式 def greet name print name 早上好 return 第一行def的意思是定義 define greet是 函式名 自己取的 再搭配乙個括號和冒號,括號裡面的nam...

Python中的函式

你可以定義乙個由自己想要功能的函式,以下是簡單的規則 任何傳入引數和自變數必須放在圓括號中間。圓括號之間可以用於定義引數。函式的第一行語句可以選擇性地使用文件字串 用於存放函式說明。函式內容以冒號起始,並且縮排。return expression 結束函 數,選擇性地返回乙個值給呼叫方。不帶表示式的...