Python 第三周① 函数和代码复用

该博客围绕Python函数展开,介绍了函数的定义、参数传递(包括可选参数、可变参数及两种传递方式),阐述了局部变量与全局变量的关系,还提及lambda函数。此外,通过七段数码管绘制、字符串反转、斐波那契数列、汉诺塔、科赫雪花等实例展示函数的使用和递归。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数的定义和使用

函数的定义
def <函数名>(<参数0或多个>):
	<函数体>
	return <返回值>
参数传递
可选参数传递
def <函数名>(<非可选参数>,<可选参数>):
	<函数体>
	return <返回值>

可选参数必须放在必选参数之后。

可变参数传递
def <函数名>(<参数>,*b):
	<函数体>
	return <返回值>

*b:可以给出任意数量的参数。

参数传递两种方式

举例:

def fact(n,m=1):
	s = 1
	for i in range(1,n+1):
		s *= i 
	return s//m

位置传递:

>>>fact(10,5)
725760

名称传递:

>>>fact(m=5,n=10)
725760
局部变量与全局变量

局部变量与全局变量
1.局部变量和全局变量是不同变量。
2.可以通过global保留字在函数内部声明全局变量。
3.局部变量为组合数据类型且未创建,等同于全局变量。

lambda函数
<函数名> = lambda<参数>:<表达式>
>>>f = lambda x,y:x+y
>>>f(10,15)
25

一般情况下,建议使用def函数体。

实例:七段数码管绘制
import turtle,time

def drawgap():
    turtle.penup()
    turtle.fd(5)

def drawLine(draw):
    drawgap()
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(40)
    drawgap()
    turtle.right(90)

def drawDigit(digit):
    drawLine(True) if digit in [2, 3, 4, 5, 6, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 2, 6, 8] else drawLine(False)
    turtle.left(90)
    drawLine(True) if digit in [0, 4, 5, 6, 9] else drawLine(False)
    drawLine(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)
    turtle.left(180)
    turtle.penup()
    turtle.fd(20)

def drawDate(date):
    turtle.pencolor("red")
    for i in date:
        if i == '-':
            turtle.write("年",font=("Arial", 18, "normal"))
            turtle.pencolor("green")
            turtle.fd(40)
        elif i == '=':
            turtle.write("月", font=("Arial", 18, "normal"))
            turtle.pencolor("blue")
            turtle.fd(40)
        elif i == '+':
            turtle.write("日", font=("Arial", 18, "normal"))
        else:
            drawDigit(eval(i))
def main():
    turtle.setup(800, 350, 200, 200)
    turtle.penup()
    turtle.fd(-300)
    turtle.pensize(5)
    drawDate(time.strftime("%Y-%m=%d+", time.gmtime()))
    turtle.hideturtle()
    turtle.done()

main()

运行结果:
在这里插入图片描述

函数递归
实例一:将字符串s反转后输出
def rvs(s):
    if s == '':
        return s
    else:
        return rvs(s[1:])+s[0]
实例二:斐波那契数列
def f(n):
    if n == 1 or n ==2:
        return 1
    else:
        return f(n-1)+f(n-2)
实例三:汉诺塔
count = 0
def hanoi(n, src, dst, mid):
    global count
    if n == 1 :
        print("{}:{}->{}".format(1, src, dst))
        count += 1
    else:
        hanoi(n-1, src, mid, dst)
        print("{}:{}->{}".format(n, src, dst))
        count += 1
        hanoi(n-1, mid, dst, src)
hanoi(3, "A", "C", "B")
print(count)
科赫雪花实例
import turtle
def koch(size, n):
    if n == 0:
        turtle.fd(size)
    else:
        for angle in [0, 60, -120, 60]:
            turtle.left(angle)
            koch(size/3, n-1)
def main():
    turtle.setup(600, 600)
    turtle.penup()
    turtle.goto(-200, 100)
    turtle.pendown()
    turtle.pensize(2)
    level = 3
    koch(400, level)
    turtle.right(120)
    koch(400, level)
    turtle.right(120)
    koch(400, level)
    turtle.hideturtle()
    turtle.done()
main()

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值