Task09:函数与Lambda表达式

思维导图

在这里插入图片描述

代码

1.函数

# 函数的调用
def printme(str):
    print(str)


printme('我要调用用户自定义函数')
printme('再次调用同一函数')
temp = printme('hello')
print(temp)


# 没有return,返回none

def add(a, b):
    print(a + b)


add(1, 2)
add([1, 2, 3], [4, 5, 6])


# 对于不同的数据类型,+代表的意思是不同的

# 函数参数
def printinfo(name, age=8):
    print('Name:{0},Age:{1}'.format(name, age))


printinfo('小马')
printinfo('小马', 10)


# 默认参数的默认值,第一位置是位置参数,第二位置为默认参数
def printinfo(name, age):
    print('Name:{0},Age:{1}'.format(name, age))


printinfo(age=8, name='小马')


# 可变参数
def printinfo(arg1, *args):
    print(arg1)
    for var in args:
        print(var)


printinfo(10)
printinfo(70, 60, 50)


# 关键字参数-字典
def printinfo(arg1, *args, **kwargs):
    print(arg1)
    print(args)
    print(kwargs)


printinfo(70, 60, 50)
printinfo(70, 60, 50, a=1, b=2)


# 命名关键字参数
def printinfo(arg1, *, nkw, **kwargs):
    print(arg1)
    print(nkw)
    print(kwargs)


printinfo(70, nkw=10, a=1, b=2)


# 命名的参数名不能不出现
def back():
    return 1, 3.14


print(back(), type(back()))


# return的是tuple类型


# 求打折的例子
def discounts(price, rate):
    final_price = price * rate
    return final_price


old_price = float(input('请输入原价'))
rate = float(input('请输入折扣率'))
new_price = discounts(old_price, rate)
print('打折后的价格为:%0.2f' % new_price)

# 当内部作用域想修改为外部作用域的变量时,就要用到global
num = 1


def fun1():
    global num
    print(num)
    num = 123
    print(num)


fun1()
print(num)


# 内嵌函数
def outer():
    print('outer函数在这被调用')

    def inner():
        print('inner函数在这里被调用')

    outer(inner())  # 该行没有执行,该函数只能在outer函数内部被调用


outer()


def funX(x):
    def funY(y):
        return x * y

    return funY


i = funX(8)
print(type(i))
print(i(5))


# 如果在一个内部函数里对外层非全局作用域的变量进行引用,那个内部函数就被认为是闭包,通过闭包可以访问外层非全局作用域的变量

# 闭包的返回值通常是函数
def make_counter(init):
    counter = [init]

    def inc(): counter[0] += 1

    def dec(): counter[0] -= 1

    def get(): return counter[0]

    def reset(): counter[0] = init

    return inc, dec, get, reset


inc, dec, get, reset = make_counter(0)
inc()
inc()
inc()
print(get())
dec()
print(get())
reset()
print(get())


# 修改闭包作用域中的变量则需要用nonlocal关键字
def outer():
    num = 10

    def inner():
        nonlocal num
        num = 100
        print(num)

    inner()
    print(num)


outer()

# 循环
n = 5
for k in range(1, 5):
    n = n * k
print(n)

#阶乘的两种算法
# 递归
def factoria(n):
    if n == 1:
        return 1
    return n * factoria(n - 1)

print(factoria(5))

#斐波那契数列f(n)=f(n-1)+f(n-2), f(0)=0,f(1)=1
i=0
j=1
lst=list([i,j])#k可以用来控制次数
for k in range(2,11):
    k=i+j
    lst.append(k)
    i=j
    j=k
print(lst)
#斐波那契求法2
def recur_fibo(n):
    if n<=1:
        return n
    return recur_fibo(n-1)+recur_fibo(n-2)

lst=list()
for k in range(11):
    lst.append(recur_fibo(k))
print(lst)

2.lambda

#匿名函数
def sqr(x):
    return x**2
print(sqr)

y=[sqr(x) for x in range(10)]
print(y)

lbd_sqr=lambda x:x**2
print(lbd_sqr)

y=[lbd_sqr(x) for x in range(10)]
print(y)

summary=lambda arg1,arg2:arg1+arg2
print(summary(10,20))

func=lambda *args:sum(args)
print(func(1,2,3,4,5))

#函数式编程和非函数式编程
def f(x):
    for i in range(0,len(x)):
        x[i]+=10
    return x
x=[1,2,3]
f(x)
print(x)
#函数式编程
def f(x):
    y=[]
    for item in x:
        y.append(item+10)
        return y
x=[1,2,3]
f(x)
print(x)

odd=lambda x:x%2==1
templist=filter(odd,[1,2,3,4,5,6,7,8,9])
print(list(templist))

m1=map(lambda x:x**2,[1,2,3,4,5])
print(list(m1))

m2=map(lambda x,y:x+y,[1,3,5,7,9],[2,4,6,8,10])
print(list(m2))

习题

汉诺塔问题:

def hanoi(n: int, A: str, B: str, C: str):
    if n == 1:
        print(f"move from {A} to {C}")
    else:
        hanoi(n - 1, A, C, B)
        print(f"move from {A} to {C}")
        hanoi(n - 1, B, A, C)


hanoi(3, "A", "B", "C")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值