python中基例_Python——函数

本文详细介绍了Python函数的定义、分类及使用,包括自定义函数、系统内置函数和库函数。通过示例展示了函数的参数传递、返回值以及递归的概念。还探讨了如何通过函数减少重复代码,提高代码效率。同时,讲解了如何利用函数进行三角形周长计算,字符串反转以及递归计算阶乘。最后,通过一个树形图绘制的例子展示了递归在图形绘制中的应用。
摘要由CSDN通过智能技术生成

1、函数定义

(1)函数:完成特定功能的一个语句组,通过调用函数名来完成语句组的功能。

为函数提供不同的参数,可以实现对不同数据的处理

函数可以反馈结果

(2)分类:

自定义函数:用户自己编写的

系统自带函数: Python内嵌的函数(如abs()、eval())、 Python标准库中的函数(如math库中的sqrt())、图形库中的方法(如myPoint.getX())等

(3)函数定义:使用def语句

def ():

函数名:可以是任何有效的Python标识符

参数列表:是调用函数时传递给它的值(可以由多个,一个,或者零个参数组成,当有多个参数时,各个参数用逗号分隔)

参数个数大于等于零,多个参数由逗号分隔

(4)形参,实参

形式参数:定义函数时,函数名后面圆括号中的变量,简称“形参”。形参只在函数内部有效

实际参数:调用函数时,函数名后面圆括号中的变量,简称 “实参”。

2、示例

1 defhappy():2 print("happy birthday to you!")3

4 defsing(person):5 print("happy birthday to"+person+‘!‘)6 happy()7 happy()8 sing(‘hanmeimei‘)9 happy()

调用两个函数

1 defsing(person):2 print("happy birthday to you!")3 print("happy birthday to you!")4 print("happy birthday to"+person+‘!‘)5 print("happy birthday to you!")6

7 sing(‘hanmeimei‘)

只调用一个函数的程序,明显比两个函数要繁琐,所以重复性质的代码,定义函数可以减少工作量。

3、函数的返回值

return语句:程序退出该函数,并返回到函数被调用的地方。return语句返回的值传递给调用程序

Python函数的返回值有两种形式:

返回一个值

返回多个值

(1)无返回值的return语句等价于return None。

(2)返回值可以是一个变量,也可以是一个表达式。

1 defsquare(x):2 y=x*x3 returny4 defsquare1(x):5 return x*x6 a=square(2)7 b=square1(3)8 print(a)9 print(b)

(3)三角形周长函数

1 importmath2

3 defsquare(x):4 return x*x5 defdistance(x1,y1,x2,y2):6 L=math.sqrt(square(x1-x2)+square(y1-y2))7 returnL8 defisTriangle(x1,y1,x2,y2,x3,y3):9 flag=((x1-x2)*(y3-y2)-(x3-x2)*(y1-y2))!=010 returnflag11

12 defmain():13 print("输入三个点的坐标:")14 x1,y1=eval(input("x1,y1="))15 x2,y2=eval(input("x2,y2="))16 x3,y3=eval(input("x3,y3="))17 if(isTriangle(x1,y1,x2,y2,x3,y3)):18 perim=distance(x1,y1,x2,y2)+distance(x1,y1,x3,y3)+distance(x2,y2,x3,y3)19 print(‘the primeter is‘,perim)20 else:21 print(‘this is not triangle‘)22 main()

1 importmath2

3 defsquare(x):4 return x*x5 defdistance(x1,y1,x2,y2):6 L=math.sqrt(square(x1-x2)+square(y1-y2)) #嵌套了求平方的函数

7 returnL8 defisTriangle(x1,y1,x2,y2,x3,y3):9 if ((x1-x2)*(y3-y2)-(x3-x2)*(y1-y2))!=0: #比例算法,三点在不在一条线

10 return 1

11

12 defmain():13 print("输入三个点的坐标:")14 x1,y1=eval(input("x1,y1="))15 x2,y2=eval(input("x2,y2="))16 x3,y3=eval(input("x3,y3="))17 if(isTriangle(x1,y1,x2,y2,x3,y3)):18 perim=distance(x1,y1,x2,y2)+distance(x1,y1,x3,y3)+distance(x2,y2,x3,y3)19 print(‘the primeter is:{0:0.3f}‘.format(perim))20 print(‘the primeter is %0.3f‘%perim)#两种输出方法

21 else:22 print(‘this is not triangle‘)23 main()

将简化后的判断是否是三角形的布尔语句补充完整了,用了两种输出方式来输出内容;注意将比例式写成乘法式简化判断条件。

4、函数的返回值return

(1)

1 defisTriangle(num):2 if num!=0: #比例算法,三点在不在一条线

3 return 1

4 else:5 return06

7 a=eval(input("输入数字:"))8 print(isTriangle(a))

defisTriangle(num):if num!=0: #比例算法,三点在不在一条线

return 1a=eval(input("输入数字:"))print(isTriangle(a))

不符合条件时输出None。

1 defisTriangle(num):2 length=num!=03 returnlength4

5 a=eval(input("输入数字:"))6 print(isTriangle(a))

length=num!=0,这个布尔表达式,是先判断num是否等于0,如果不等于零,则True,如果等于0,则False,length等于这两种情况。

(2)

1 defaddinterest(balance,rate):2 newBalance=balance*(1+rate)3 returnnewBalance4 defmain():5 amount=1000

6 rate=0.05

7 amount=addinterest(amount,rate)8 print(amount)9 main()

(3)单个数和列表返回数的区别

1 defaddinterest(balance,rate):2 balance=balance*(1+rate)3

4 defmain():5 amount=1000

6 rate=0.05

7 addinterest(amount,rate)8 print(amount)9 main()

可以看出函数形参的值并没有返回给实参,所以最后出来的还是1000,需要像上面的程序一样,明确表明返回值,才能运行出来1050.

1 defaddinterest(balances,rate):2 for i inrange(len(balances)):3 balances[i]=balances[i]*(1+rate)4 defmain():5 amounts=[1000,900,830,400]6 rate=0.05

7 addinterest(amounts,rate)8 print(amounts)9 main()

对比上面,数组类型的值可以直接返回。视频中介绍说是原来数值被掩盖,本质原理搞不懂。?????

将这段代码改为有返回值的情况如下。

1 defaddinterest(balances,rate):2 for i inrange(len(balances)):3 balances[i]=balances[i]*(1+rate)4 returnbalances5 defmain():6 amounts=[1000,900,830,400]7 rate=0.05

8 amounts=addinterest(amounts,rate)9 print(amounts)10 main()

(4)函数的拆分

1 print("this program plots the growth of a 10-years investment")2 #principal=eval(input("enter the initial principal"))

3 #apr=eval(input("enter the annualized interest rate"))

4 principal=1000

5 apr=0.2

6 for year in range(1,11):7 principal=principal*(1+apr)8 print("%2s"%year,end=‘‘)#前面是输出年份,后者是保留一行

9 total=int(principal*4/1000) #四个~代表1000

10 print("~"*total)#前面是输入符号,后面是数量,中间用*链接

11 print("0.0k 2.5k 5.0k 7.5k 10.0k")

将部分功能拆分出来,形成单独函数

1 deftotalnum(principal):2 total=int(principal*4/1000)3 returntotal4

5 defcreatTable(principal,rate):6 for year in range(1,11):7 principal=principal*(1+rate)8 print("%d"%year,end="")9 total=totalnum(principal)10 print("~"*total,end=‘‘)11 print("%.2f"%principal)12

13 defmain():14 principal=1000

15 apr=0.2

16 creatTable(principal,apr)17

18 main()

注意,想要不换行的联接 end=‘‘,输入符号‘~’*num,的形式

5、递归

(1)递归的定义递归不是循环

最后计算基例:0!。 0!是已知值

递归定义特征 :有一个或多个基例是不需要再次递归的;所有的递归链都要以一个基例结尾。

(2)阶乘

1 deffact(n):2 if n==0:3 return 1

4 else:5 return n*fact(n-1)6 n=2

7 print(fact(n))

递归和循环不一样,递归时多次调用一个函数,而循环是在一个函数中多次重复计算。

(3)字符串反转

Python列表有反转的内置方法

方法1:字符串转换为字符列表,反转列表,列表转换回字符串

方法2:递归

1 defreverse(s):2 if s=="":3 returns4 else:5 return s[1:]+s[0]6

7 s=‘hello‘

8 s=reverse(s)9 print(s)

一定要给递归一个初值,要不会造成死循环。

(4)树

1 from turtle import *

2

3 def tree(plist,l,a,f):#l 画的初始长度,a角度

4 if l>5:5 lst=[]6 for p inplist:7

8 p.forward(l)9 q=p.clone()#克隆p

10 p.left(a)11 q.right(a)12 lst.append(p)13 lst.append(q)14 tree(lst,l*f,a,f)15

16 defmain():17 p=Turtle()18 p.color(‘green‘)19 p.pensize(5)20 p.hideturtle() #隐藏箭头

21 p.speed(9)22 #p.getscreen().tracer(3,0)

23 p.left(90) #向左转90度,竖直向上

24 p.penup() #提起画笔

25 p.goto(0,-200) #26 p.pendown()27 t=tree([p],110,65,0.6375)28

29 main()

Python——函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值