Python 函式相關概念

2022-09-16 08:12:10 字數 2215 閱讀 3090

條件1. 接受乙個或多個函式作為引數

條件2. 輸出乙個函式

舉例:

def counter(base):

def inc(step=1):

nonlocal base #修改外部變數base,賦值需要nonlocal

base += step

return base

return inc

foo = counter(5)

foo1 = counter(5)

print(foo == foo1) #false

print(id(foo),foo)

print(id(foo1),foo1)

舉例:有這樣乙個add函式

def add(x,y):    #柯里化成 add(x)(y) 的格式

return x + y

將此函式柯里化

def add(x):

def _add(y):

return x + y

return _add

foo = add(7) #等同於 add(7)(8)

print(foo(8))

def increasing():

id = 0

while true:

id += 1

yield id

user_id = increasing()

for _ in range(10):

print(next(user_id))

舉例:

def logger(fn):

def _logger(*args,**kwargs):

print('before')

ret = fn(*args,**kwargs)

print('after')

return ret

return _logger

@logger # add = logger(add)

def add(x,y):

return x + y

print(add(5,600))

舉例:

import functools

import datetime

import time

def copy_property(src):

def _copy_property(dst):

dst.__name__ = src.__name__

dst.__doc__ = src.__doc__

#dst.__qualname__ = src.__qualname__ #限定名

return dst

return _copy_property

def timeouttip(t):

def logger(func):

#@functools.wraps(func)

@copy_property(func)

'''test2'''

# before 功能增強

start = datetime.datetime.now()

# print('call:{}() starttime:{} nowdescription:{}'.format(func.__name__,start,func.__doc__),end='\t\t')

print('call:{}()'.format(func.__name__), end='\t\t')

ret = func(*args,**kwargs)

# after 功能增強

stoptime = (datetime.datetime.now() - start).total_seconds()

if stoptime > t:

print('timeout time:{} '.format(stoptime))

return ret

return logger

@timeouttip(2) #帶參裝飾器與不帶參裝飾器的區別

def add(x,y):

'''test1'''

#time.sleep(3)

print('returnvalue = x+y')

return x+y

print(add(100,y=200))

print(add.__doc__,add.__qualname__)

python函式相關

函式的定義為 def func1 a,b,c 1,args,d kwargs pass函式定義中的引數,稱謂形參,而其中a,b稱為位置引數,c和d稱為關鍵字引數,若按順序傳參的話,c可以作位置引數來傳遞實參,而d由於位於可變引數之後,所以只能作為關鍵字引數來傳入實參,而且可變引數前的引數必須是關鍵字...

Python函式相關

對於不可變引數,函式內部操作引數不會改變實參 對於可變型別,函式內部操作會改變實參 列表,字典 全域性變數,定義時一般會在前面加 g 或 gl 列表 可以將兩個列表合併在一塊,實際就是呼叫列表的extend方法 預設引數 定義函式時,可以將某個引數定義乙個預設值,具有預設值的引數就叫預設引數 呼叫函...

Python 函式相關

這次用的是ipad pro 藍芽鍵盤 colaboatory 雲ide。不得不說谷歌還是np,免費提供雲ide,免費提供gpu訓練深度學習模型,用safari就可以寫。缺點是得全程掛vpn,而且不知道為什麼無法使用簡體中文輸入法,只好用繁體輸入法打注釋。下面是關於函式返回值的一些操作 def fun...