python方法(函数)

定义格式

def 方法名(参数1,参数2,参数3):
    # 具体实现
    return #返回值

参数默认值

def desc(name='no-name',age=0):
    print("%s %d"%(name,age))
# 调用
desc() # no-name 0
desc("jack",10) # jack 10

可变参数——参数数量任意

针对list型参数

def add(*numbers):
    res=0
    for i in numbers:
        res = res+i
    return res
# 调用
add(1,2,3,4)
add(1,2,3)
add(1,2)

针对dict型参数

def calc2(object,**arr):
    for i in arr:
        object.update({i:arr[i]})
    return object
# 调用
obj=calc2({},name="jack",age=19)
print(obj)

小技巧

带上虚参名,参数可以不按照顺序写

def insertArr(arr,v1,v2,v3):
    arr.insert(len(arr),v1)
    arr.insert(len(arr),v2)
    arr.insert(len(arr),v3)
    return arr
# 带上虚参名,参数可以不按照顺序写
arr=insertArr(v2='a',arr=[],v1='b',v3='c')

但不带虚参名,参数传入顺序必须按定义来传

函数内定义函数

def add():
    def v1():
        return 10
    def v2():
        return 2
    return v1() + v2()
# 调用
print(add()) # 12

返回多个值

def re_position(y,x):
    return x,y
x = 10
y = 20
x,y = re_position(x,y)# x=20 y=10

返回值:函数

python函数的返回值除了一次返回多个值,也支持返回函数,如下👇

def re_fun():
    def run():
        print("success")
    # 返回值:函数
    return run
f = re_fun()
f()

匿名函数

lambda表达式

res=list( map( lambda x:x*x,[i for i in range(1,10)] ) )
# 等效于
def f(x):
    return x*x
res = list(map(f,[i for i in range(1,10)]))

再来个2个参数的lambda表达式

# 计算1-4的和
res=reduce( lambda x,y:x+y,[i for i in range(1,5)] )

偏函数

由python的functools提供,可固定住传入参数

from functools import partial
int2 = partial(int,base=8)
print(int2('10'))

再举个栗子

def add(v1,v2,v3,v4):
    print("%d %d %d %d"%(v1,v2,v3,v4))
    return v1 + v2 + v3 +v4
# 相当于代理了函数,且固定了值,不允许在调用int2时向固定的值传参
int2 = partial(add,v2=2,v3=3,v4=4)
print(int2(1))

装饰器

由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。

def now():
    print('2023-01-17')
f = now
f()
posted @ 2023-01-18 09:45  勤匠  阅读(15)  评论(0编辑  收藏  举报