Python——函数,,1、函数定义(1)函


1、函数定义

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

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

函数可以反馈结果

(2)分类:

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

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

(3)函数定义:使用def语句
def <name>(<parameters>):
<body>

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

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

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

(4)形参,实参

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

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

2、示例

1 def happy():2     print("happy birthday to you!")3 4 def sing(person):5     print("happy birthday to "+person+‘ !‘)6 happy()7 happy()8 sing(‘hanmeimei‘)9 happy()

技术分享

调用两个函数

1 def sing(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 def square(x):2     y=x*x3     return y4 def square1(x):5     return x*x6 a=square(2)7 b=square1(3)8 print(a)9 print(b)

技术分享

(3)三角形周长函数

 1 import math 2  3 def square(x): 4     return x*x 5 def distance(x1,y1,x2,y2): 6     L=math.sqrt(square(x1-x2)+square(y1-y2)) 7     return L 8 def isTriangle(x1,y1,x2,y2,x3,y3): 9     flag=((x1-x2)*(y3-y2)-(x3-x2)*(y1-y2))!=010     return flag11 12 def main():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 import math 2  3 def square(x): 4     return x*x 5 def distance(x1,y1,x2,y2): 6     L=math.sqrt(square(x1-x2)+square(y1-y2)) #嵌套了求平方的函数 7     return L 8 def isTriangle(x1,y1,x2,y2,x3,y3): 9     if ((x1-x2)*(y3-y2)-(x3-x2)*(y1-y2))!=0: #比例算法,三点在不在一条线10         return 111 12 def main():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 def isTriangle(num):2     if num!=0: #比例算法,三点在不在一条线3         return 14     else:5         return 06     7 a=eval(input("输入数字:"))8 print(isTriangle(a))

技术分享

def isTriangle(num):    if num!=0: #比例算法,三点在不在一条线        return 1    a=eval(input("输入数字:"))print(isTriangle(a))

技术分享

不符合条件时输出None。

1 def isTriangle(num):2     length=num!=03     return length4     5 a=eval(input("输入数字:"))6 print(isTriangle(a))

技术分享

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

(2)

1 def addinterest(balance,rate):2     newBalance=balance*(1+rate)3     return newBalance4 def main():5     amount=10006     rate=0.057     amount=addinterest(amount,rate)8     print(amount)9 main()

技术分享

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

1 def addinterest(balance,rate):2     balance=balance*(1+rate)3     4 def main():5     amount=10006     rate=0.057     addinterest(amount,rate)8     print(amount)9 main()

技术分享

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

1 def addinterest(balances,rate):2     for i in range(len(balances)):3         balances[i]=balances[i]*(1+rate)4 def main():5     amounts=[1000,900,830,400]6     rate=0.057     addinterest(amounts,rate)8     print(amounts)9 main()

技术分享

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

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

 1 def addinterest(balances,rate): 2     for i in range(len(balances)): 3         balances[i]=balances[i]*(1+rate) 4     return balances 5 def main(): 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) #四个~代表100010     print("~"*total)#前面是输入符号,后面是数量,中间用*链接11 print("0.0k                2.5k                5.0k                7.5k                10.0k")

技术分享

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

 1 def totalnum(principal): 2     total=int(principal*4/1000) 3     return total 4  5 def creatTable(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 def main():14     principal=100015     apr=0.216     creatTable(principal,apr)17 18 main()

技术分享

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

5、递归

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

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

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

(2)阶乘

1 def fact(n):2     if n==0:3         return 14     else:5         return n*fact(n-1)6 n=27 print(fact(n))

技术分享

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

(3)字符串反转

Python列表有反转的内置方法

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

方法2:递归

1 def reverse(s):2     if s=="":3         return s4     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 in plist: 7               8              p.forward(l) 9              q=p.clone()#克隆p10              p.left(a)11              q.right(a)12              lst.append(p)13              lst.append(q)14          tree(lst,l*f,a,f)15 16 def main():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——函数

评论关闭