04.python基础——函数

1.函数的基本用法示例:

def func01(name, times):
  for i in range(times):
    print(f"i love {name}")
func01("Python",2)  #输出”i love Python“两遍
def func02(a,b,c):
    return "".join((a,b,c))
print(func02("我","爱","Python"))  #输出 我爱Python
def func03(x,y,z):
    return x,y,z
x , y ,z=func03(1,2,3)
print(x,y,z) #输出 1 2 3

打包与解包:

##打包参数:
def func04(*args):   #打包参数(即参数的个数不确定)
    print(args)
func04(1,2,3)  #输出 (1, 2, 3)


##key:word
def func05(**kwargs): #key:word
    print(kwargs)
func05(a=1,b=2)  #输出{'a': 1, 'b': 2}

##综合应用:
def totalFunc(a,*b,**c):
    print(a,b,c)
totalFunc(1,2,3,x=5,y=6)  #1 (2, 3) {'x': 5, 'y': 6}


##解包参数:
def func06(a,b,c,d):
    print(a,b,c,d)

tuple = (1,2,3,4)
func06(*tuple) #*是用来对元组解包,输出1 2 3 4

kwargs ={'a':1,'b':2,'c':3,'d':4}
func06(**kwargs) #**对字典解包,输出1 2 3 4

2. 嵌套函数:

def funcA():
    x = 50
    def funcB():
        x = 60
        print(x)
    funcB()
    print(x)

funcA()   #输出60 50

3.闭包 

def power(i):
    def exp(j):
        print(i**j)  #代表幂
    return exp
square = power(2)
cube=power(3)

print(square(2)) #输出2^2
print(cube(4))  #输出3^4
def outer():
    x = 0
    y = 0
    def inner(x1,y1):
        nonlocal x,y    #将局部变量化为外部变量
        x+=x1
        y+=y1
        print(x, y)
    return inner
move  = outer()
print(move(1,2))  #输出1 2
print(move(-1,-2)) #输出0 0

4.装饰器:把函数作为变量调用

import time
def time_master(func):
      def call_func():
          start=time.time()
          func()
          end=time.time()
          print(f"一共耗费了{int(end-start)}秒")
      return call_func

def myFunc():
    time.sleep(2)
    print("myFunc函数已调用")

myFunc=time_master(myFunc)
myFunc()  #myFunc函数已调用  一共耗费了2秒

5.labmda表达式:

squareX = lambda x:x*x   #左边代表输入值,右边代表输出值
print(squareX(2))  #输出4

y=[lambda x:x*x,2,3,]
print(y[0](y[1]))  #输出4

mapped = map(lambda x:ord(x)+10 ,"fishC")
print(list(mapped))  #[112, 115, 125, 114, 77]

6.迭代函数:
例一:求阶乘

def factRecur(n):
    if n==1:
        return 1
    else:
        return n*factRecur(n-1)
print(factRecur(5))  #输出5!

例二:求斐波那契数列

def fibi(n):
    a=1
    b=1
    c=1
    while n>=2:
        c=a+b
        a=b
        b=c
        n-=1
    return n


def fibiIncur(n):
    if n ==1 or n==2:
        return 1
    else:
        return fibi(n-1)+fibi(n-2)
print(fibiIncur(3))  # 输出2

 例三:汉诺塔:

def hanoi(n,a,b,c):  #一共三层,分别命名为a b c
    if n==1:
        print(a,'-',c)  #如果只有一层,直接从a层移动到c层
    else:
        hanoi(n-1,a,c,b) #把n-1层当作一个整体,从a移动到b
        print(a,'-',c)  #把最后一层从a移动到c
        hanoi(n-1,b,a,c)  #把n-1层当作一个整体,从b移动到c

hanoi(3,'第一层','第二层','第三层')  #输入4个参数

7.函数类型注释

#表示两个参数,其中一个为list类型,
# 另一个为int类型,且值为3,
# 返回值为string类型
def times(s:list,n:int=3) ->str :  
    return s * n

print(times([1,2,3]))  #[1, 2, 3, 1, 2, 3, 1, 2, 3]
def times(s:dict[str,int] ,n:int=2) ->list:
    return list(s.keys()) *n

print(times({'x':1,'y':2,'z':3}))
#['x', 'y', 'z', 'x', 'y', 'z']

8. functools中的高阶函数:
8.1  reduce函数

import functools
def add(x,y):
    return x+y

a =functools.reduce(add,range(1,5))
print(a)  #reduce表示不断调用add函数,将1 2 3 4传入
#add(add(add(1,2),3),4)

b= functools.reduce(lambda x,y:x*y,range(1,11))
print(b)  #输出 10!

8.2偏函数:

square =functools.partial(pow,2)
print(square(2))  #输出4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值