“Python函数的基本使用”的版本间的差异
(→函数体) |
(→函数的调用) |
||
(未显示同一用户的27个中间版本) | |||
第1行: | 第1行: | ||
+ | ==问题引出== | ||
+ | 我们之前调用的这些简介的代码,他们有一个共同的名字叫什么 ? | ||
+ | |||
+ | *函数 描述 | ||
+ | *abs(x) x的绝对值 | ||
+ | *divmod(x,y) | ||
+ | *pow(x,y) x的y次幂 | ||
+ | *round(x,n) x四舍五入,保留n位小数 | ||
+ | *max(x1,x2,...,xn) x1,x2,x3,...xn的最大值 | ||
+ | *min(x1,x2,...,xn) x1,x2,x3,...xn的最小值 | ||
+ | |||
+ | |||
+ | *abs(x): 求绝对值 | ||
+ | <nowiki>>>> x,y = 9,2 | ||
+ | >>> abs(x) | ||
+ | 9 | ||
+ | >>> abs(-x) | ||
+ | 9</nowiki> | ||
+ | *divmod(x,y):获得除法的商和余数 | ||
+ | <nowiki>>>> x,y = 9,2 | ||
+ | >>> divmod(x,y) | ||
+ | (4, 1)</nowiki> | ||
+ | |||
==函数是什么== | ==函数是什么== | ||
函数是一段具有特定功能的、可重用的语句组,通过函数名来表示和调用。 | 函数是一段具有特定功能的、可重用的语句组,通过函数名来表示和调用。 | ||
第6行: | 第29行: | ||
*将可能需要反复执行的代码封装为函数,并在需要该功能的地方进行调用,不仅可以实现代码复用,更重要的是可以保证代码的一致性,只需要修改该函数代码则所有调用均受到影响。 | *将可能需要反复执行的代码封装为函数,并在需要该功能的地方进行调用,不仅可以实现代码复用,更重要的是可以保证代码的一致性,只需要修改该函数代码则所有调用均受到影响。 | ||
*设计函数时,应注意提高模块的内聚性,同时降低模块之间的隐式耦合。 | *设计函数时,应注意提高模块的内聚性,同时降低模块之间的隐式耦合。 | ||
− | * | + | *例1:群发祝福 |
<nowiki>def happy(): | <nowiki>def happy(): | ||
print("Happy birthday to you!") | print("Happy birthday to you!") | ||
第19行: | 第42行: | ||
==函数的定义== | ==函数的定义== | ||
函数的使用包括两部分:'''函数的定义'''和'''函数的调用'''。 函数是一种功能抽象。 | 函数的使用包括两部分:'''函数的定义'''和'''函数的调用'''。 函数是一种功能抽象。 | ||
− | |||
− | |||
===语法=== | ===语法=== | ||
第40行: | 第61行: | ||
如果需要返回值,函数体中使用保留字return返回值。函数可以没有return语句,函数体结束 后会将控制权返回给调用者。 | 如果需要返回值,函数体中使用保留字return返回值。函数可以没有return语句,函数体结束 后会将控制权返回给调用者。 | ||
+ | [[文件:python2022112201.png|600px]] | ||
+ | |||
+ | 例:汇率计算器 | ||
+ | |||
+ | <nowiki> | ||
+ | def DolConvert(Num): | ||
+ | Num =eval(Num); | ||
+ | Dollar =Num /6; | ||
+ | return Dollar | ||
+ | |||
+ | if __name__ == '__main__': | ||
+ | Num = input("请输入人民币值: ") | ||
+ | result = DolConvert(Num) | ||
+ | print("能兑换的美元为:",result)</nowiki> | ||
+ | |||
+ | ===拓展:if __name__ == '__main__':的作用=== | ||
+ | if __name__ == 'main':是程序的入口。 | ||
− | + | 一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在 if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。 | |
− | + | ||
− | + | 练习:编写函数,给定两个直角边a,b的长度,计算斜边的长度。 | |
− | + | ||
− | + | 练习:编写函数,求三个数a,b,c之间的最大值, | |
− | + | ==函数设计的原则== | |
− | + | *设计函数时,应注意提高模块的内聚性,同时降低模块之间的隐式耦合。 | |
− | |||
− | |||
− | + | ==函数的参数== | |
参数列表:是调用该函数时传递给它的值,可以有零个、一个或多个,当传递多个参数时各参数由逗号分隔,当没有参数时也要保留圆括号。 | 参数列表:是调用该函数时传递给它的值,可以有零个、一个或多个,当传递多个参数时各参数由逗号分隔,当没有参数时也要保留圆括号。 | ||
第60行: | 第96行: | ||
*括号后面的冒号必不可少 | *括号后面的冒号必不可少 | ||
+ | <nowiki>def multiply(x,y = 10): | ||
+ | return x*y | ||
+ | |||
+ | s = multiply(99,2) | ||
+ | print(s) | ||
+ | </nowiki> | ||
− | |||
− | + | ==函数体== | |
+ | 函数体:是函数每次被调用时执行的代码,由一行或多行语句组成。 | ||
− | + | 函数体相对于def关键字必须保持一定的空格缩进 | |
− | + | Python允许嵌套定义函数 | |
− | + | 函数体中可能存在return语句。函数执行结束后,根据return保留字的指示决 定是否返回结果,如果返回结果,则结果将被放置到函数被调用的位置,函数使用完毕,程序继续运行。 | |
− | |||
− | + | 例:阶乘函数的调用 | |
− | |||
− | |||
− | + | <nowiki>#1*2*3*....*n | |
+ | def jiecheng(Num): | ||
+ | s =1 | ||
+ | for i in range(1,Num+1): | ||
+ | s *= i | ||
− | + | return s | |
− | |||
− | |||
− | |||
− | return | ||
− | |||
− | |||
− | === | + | #n*(n+1)*...*m |
+ | def jiecheng2(n,m): | ||
+ | if n>m: | ||
+ | n,m =m,n | ||
+ | |||
+ | s =1 | ||
+ | for i in range(n,m+1): | ||
+ | s *= i | ||
− | + | return s | |
− | + | </nowiki> | |
− | + | *编写并调用函数,计算1*2*3*...*n的阶乘 | |
+ | *编写并调用函数 ,计算 n*(n+1)*...*m的值,其中n<m | ||
+ | |||
+ | ==函数的返回值== | ||
关于return语句: | 关于return语句: | ||
第99行: | 第146行: | ||
*return语句用来结束函数,不论return语句出现在函数的什么位置,一旦得到执行将直接结束函数的执行。 | *return语句用来结束函数,不论return语句出现在函数的什么位置,一旦得到执行将直接结束函数的执行。 | ||
− | <nowiki>def | + | *更多关于return语句,可以参考:[[Python函数的返回值]] |
− | return | + | |
+ | ===例:计算平方和=== | ||
+ | 如下函数返回两个数的平方和,请补充横线处代码 | ||
+ | |||
+ | <nowiki>def psum(___①___): | ||
+ | ___②___ a**2 + b**2 | ||
+ | |||
+ | a=eval(input()) | ||
+ | b=eval(input()) | ||
+ | print(psum(a,b))</nowiki> | ||
+ | |||
+ | <nowiki>#寻找10~100的第一个“倒序数" | ||
+ | |||
+ | def revert( ): | ||
+ | for i in range(10,100): | ||
+ | a = i //10 | ||
+ | b = i %10 | ||
+ | print(a,b) | ||
+ | if a==b : | ||
+ | return i | ||
+ | |||
+ | print("没有倒序数") | ||
+ | return 0 | ||
+ | |||
+ | s = revert( ) | ||
+ | print("10,100之间的倒序数为:",s)</nowiki> | ||
+ | |||
+ | 函数也可以没有return: | ||
+ | |||
+ | *练习:编写函数,求两个数的最大公约数 | ||
+ | |||
+ | <nowiki>求最大公约数与最小公倍数的方法很多,一个比较直观的方法是采用逐个尝试法。 | ||
+ | 求a,b的最大公约数d,那么设置m=min(a,b),一定d<=m,即d比a,b中最小的一个还小,于是可以从序列m,m-1,m-2,...,2,1中去寻找能被a,b除尽的数d,找到的第一个d就是a与b的最大公约数,最坏的情况是d=1。 | ||
− | |||
− | |||
</nowiki> | </nowiki> | ||
− | + | *练习:编写函数,求两个数的最小公倍数 | |
− | + | <nowiki>求最大公约数与最小公倍数的方法很多,一个比较直观的方法是采用逐个尝试法。 | |
− | <nowiki> | + | 求a,b的最小公倍数c,那么设置m=max(a,b),一定d>=m,即d比a,b中最大的一个还大,于是可以从序列m,m+1,m+2,...,a*b中去寻找能被a,b除尽的数d,找到的第一个d就是a与b的最小公倍数,最坏的情况是c=a*b。 |
− | |||
− | |||
</nowiki> | </nowiki> | ||
第125行: | 第200行: | ||
3.执行函数体语句。 | 3.执行函数体语句。 | ||
4.函数调用结束后给出返回值,程序回到调用前的暂停处,继续执行。 | 4.函数调用结束后给出返回值,程序回到调用前的暂停处,继续执行。 | ||
+ | |||
+ | 编写并调用函数 ,计算 n*(n+1)*...*m的值,其中n<m | ||
+ | |||
+ | <nowiki> | ||
+ | |||
+ | def jiecheng3(n,m): | ||
+ | s1 =jiecheng(m) | ||
+ | s2 =jiecheng(n-1) | ||
+ | s =s1/s2 | ||
+ | print(s) | ||
+ | |||
+ | if __name__ == '__main__': | ||
+ | #n = eval(input("请输入一个数:")) | ||
+ | jiecheng2(3,5) | ||
+ | jiecheng3(3,5)</nowiki> | ||
+ | |||
+ | 编写并调用函数 ,计算1+(1+2)+(1+2+3)+(1+2+3+4)+,,,+(1+2+3+,,,+n)的和 | ||
+ | |||
+ | <nowiki>#计算1+(1+2)+(1+2+3)+(1+2+3+4)+,,,+(1+2+3+,,,+n)的和 | ||
+ | ''' | ||
+ | #计算1+2+3+,,,+n)的和 | ||
+ | def sum(n): | ||
+ | s = 0 | ||
+ | for i in range(1,n+1,1): | ||
+ | s +=i | ||
+ | return s | ||
+ | |||
+ | def sum_total(n): | ||
+ | mysum =0 | ||
+ | for i in range(1,n+1,1): | ||
+ | mysum += sum(i) | ||
+ | |||
+ | return mysum</nowiki> | ||
*例1:生日歌;例2:汇率计算器 | *例1:生日歌;例2:汇率计算器 | ||
第131行: | 第239行: | ||
*[[文件:java2-4.png]] | *[[文件:java2-4.png]] | ||
*在定义函数时,开头部分的注释并不是必需的,但如果为函数的定义加上注释的话,可以为用户提供友好的提示。 | *在定义函数时,开头部分的注释并不是必需的,但如果为函数的定义加上注释的话,可以为用户提供友好的提示。 | ||
− | |||
− | + | ||
− | + | ||
− | + | 练习:设计一个由美元兑换人民币的函数 | |
− | + | ||
− | + | 思考:在求和的函数中,如何使求和的步长值也变为可自定义的? | |
− | + | ||
− | + | ==练习== | |
− | + | 编写并调用函数,计算1*2*3*...*n的阶乘 | |
− | + | ||
− | + | 编写并调用函数 ,计算 n*(n+1)*...*m的值,其中n<m | |
− | + | ||
− | + | 思考:在求和的函数中,如何使求和的步长值也变为可自定义的? | |
+ | |||
+ | 编写函数,求三个数a,b,c之间的最大值, |
2023年5月23日 (二) 04:12的最新版本
目录
问题引出
我们之前调用的这些简介的代码,他们有一个共同的名字叫什么 ?
- 函数 描述
- abs(x) x的绝对值
- divmod(x,y)
- pow(x,y) x的y次幂
- round(x,n) x四舍五入,保留n位小数
- max(x1,x2,...,xn) x1,x2,x3,...xn的最大值
- min(x1,x2,...,xn) x1,x2,x3,...xn的最小值
- abs(x): 求绝对值
>>> x,y = 9,2 >>> abs(x) 9 >>> abs(-x) 9
- divmod(x,y):获得除法的商和余数
>>> x,y = 9,2 >>> divmod(x,y) (4, 1)
函数是什么
函数是一段具有特定功能的、可重用的语句组,通过函数名来表示和调用。
经过定义,一组语句等价于一个函数,在需要使用这组语句的地方,直接调用函数名称即可。
- 将可能需要反复执行的代码封装为函数,并在需要该功能的地方进行调用,不仅可以实现代码复用,更重要的是可以保证代码的一致性,只需要修改该函数代码则所有调用均受到影响。
- 设计函数时,应注意提高模块的内聚性,同时降低模块之间的隐式耦合。
- 例1:群发祝福
def happy(): print("Happy birthday to you!") def happyTo(name): print("Happy birthday, dear {}!".format(name)) happy( ) happyTo("Mike") print() happyTo("Lily")
函数的定义
函数的使用包括两部分:函数的定义和函数的调用。 函数是一种功能抽象。
语法
函数定义语法:
def <函数名>([参数列表]): '''注释''' <函数体> return <返回值列表>
- 函数名:可以是任何有效的Python标识符
- 参数列表:是调用该函数时传递给它的值,可以有零个、一个或多个,当传递多个参数时各参数由逗号分隔,当没有参数时也要保留圆括号。
- 函数体:是函数每次被调用时执行的代码,由一行或多行语句组成。
如果需要返回值,函数体中使用保留字return返回值。函数可以没有return语句,函数体结束 后会将控制权返回给调用者。
例:汇率计算器
def DolConvert(Num): Num =eval(Num); Dollar =Num /6; return Dollar if __name__ == '__main__': Num = input("请输入人民币值: ") result = DolConvert(Num) print("能兑换的美元为:",result)
拓展:if __name__ == '__main__':的作用
if __name__ == 'main':是程序的入口。
一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在 if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。
练习:编写函数,给定两个直角边a,b的长度,计算斜边的长度。
练习:编写函数,求三个数a,b,c之间的最大值,
函数设计的原则
- 设计函数时,应注意提高模块的内聚性,同时降低模块之间的隐式耦合。
函数的参数
参数列表:是调用该函数时传递给它的值,可以有零个、一个或多个,当传递多个参数时各参数由逗号分隔,当没有参数时也要保留圆括号。
注意:
- 函数形参不需要声明类型,也不需要指定函数返回值类型
- 即使该函数不需要接收任何参数,也必须保留一对空的圆括号
- 括号后面的冒号必不可少
def multiply(x,y = 10): return x*y s = multiply(99,2) print(s)
函数体
函数体:是函数每次被调用时执行的代码,由一行或多行语句组成。
函数体相对于def关键字必须保持一定的空格缩进
Python允许嵌套定义函数
函数体中可能存在return语句。函数执行结束后,根据return保留字的指示决 定是否返回结果,如果返回结果,则结果将被放置到函数被调用的位置,函数使用完毕,程序继续运行。
例:阶乘函数的调用
#1*2*3*....*n def jiecheng(Num): s =1 for i in range(1,Num+1): s *= i return s #n*(n+1)*...*m def jiecheng2(n,m): if n>m: n,m =m,n s =1 for i in range(n,m+1): s *= i return s
- 编写并调用函数,计算1*2*3*...*n的阶乘
- 编写并调用函数 ,计算 n*(n+1)*...*m的值,其中n<m
函数的返回值
关于return语句:
- 在Python中,定义函数时也不需要声明函数的返回值类型,而是使用return语句结束函数执行的同时返回任意类型的值,函数返回值类型与return语句返回表达式的类型一致。
- return语句用来结束函数,不论return语句出现在函数的什么位置,一旦得到执行将直接结束函数的执行。
- 更多关于return语句,可以参考:Python函数的返回值
例:计算平方和
如下函数返回两个数的平方和,请补充横线处代码
def psum(___①___): ___②___ a**2 + b**2 a=eval(input()) b=eval(input()) print(psum(a,b))
#寻找10~100的第一个“倒序数" def revert( ): for i in range(10,100): a = i //10 b = i %10 print(a,b) if a==b : return i print("没有倒序数") return 0 s = revert( ) print("10,100之间的倒序数为:",s)
函数也可以没有return:
- 练习:编写函数,求两个数的最大公约数
求最大公约数与最小公倍数的方法很多,一个比较直观的方法是采用逐个尝试法。 求a,b的最大公约数d,那么设置m=min(a,b),一定d<=m,即d比a,b中最小的一个还小,于是可以从序列m,m-1,m-2,...,2,1中去寻找能被a,b除尽的数d,找到的第一个d就是a与b的最大公约数,最坏的情况是d=1。
- 练习:编写函数,求两个数的最小公倍数
求最大公约数与最小公倍数的方法很多,一个比较直观的方法是采用逐个尝试法。 求a,b的最小公倍数c,那么设置m=max(a,b),一定d>=m,即d比a,b中最大的一个还大,于是可以从序列m,m+1,m+2,...,a*b中去寻找能被a,b除尽的数d,找到的第一个d就是a与b的最小公倍数,最坏的情况是c=a*b。
函数的调用
通过函数名调用函数功能,对函数的各个参数赋予实际值,称为函数的调用。
实际值可以是实际数据,也可以是在调用函数前已经定义过的变量。
- 程序调用一个函数需要执行以下四个步骤。
1.调用程序,在调用处暂停执行。 2.在调用时将实参复制给函数的形参。 3.执行函数体语句。 4.函数调用结束后给出返回值,程序回到调用前的暂停处,继续执行。
编写并调用函数 ,计算 n*(n+1)*...*m的值,其中n<m
def jiecheng3(n,m): s1 =jiecheng(m) s2 =jiecheng(n-1) s =s1/s2 print(s) if __name__ == '__main__': #n = eval(input("请输入一个数:")) jiecheng2(3,5) jiecheng3(3,5)
编写并调用函数 ,计算1+(1+2)+(1+2+3)+(1+2+3+4)+,,,+(1+2+3+,,,+n)的和
#计算1+(1+2)+(1+2+3)+(1+2+3+4)+,,,+(1+2+3+,,,+n)的和 ''' #计算1+2+3+,,,+n)的和 def sum(n): s = 0 for i in range(1,n+1,1): s +=i return s def sum_total(n): mysum =0 for i in range(1,n+1,1): mysum += sum(i) return mysum
- 例1:生日歌;例2:汇率计算器
练习:设计一个由美元兑换人民币的函数
思考:在求和的函数中,如何使求和的步长值也变为可自定义的?
练习
编写并调用函数,计算1*2*3*...*n的阶乘
编写并调用函数 ,计算 n*(n+1)*...*m的值,其中n<m
思考:在求和的函数中,如何使求和的步长值也变为可自定义的?
编写函数,求三个数a,b,c之间的最大值,