我是靠谱客的博主 慈祥飞机,最近开发中收集的这篇文章主要介绍函数(课后测试题及答案 ),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.形参和实参

函数从调用的角度来说,分为形式参数和实际 参数。形参是指函数创建和定义过程中小括号里的参数;而实参指得是函数在被调用过程中传递进来的参数。如下所示

>>> def MyFirstFunction(name):
'函数定义过程中的name是叫形参'
#因为Ta只是一个形式,表示占据一个参数位置
print('传递进来的' + name + '叫做实参,因为Ta是具体的参数值!')
>>> MyFirstFunction('小甲鱼')
传递进来的小甲鱼叫做实参,因为Ta是具体的参数值!

2.函数文档(.doc

给函数写文档是为了让别人可以更好的理解你的函数,所以这是一个好习惯。函数文档的作用是描述该函数的功能。

>>> def MyFirstFunction(name):
'函数定义过程中的name是叫形参'
#因为Ta只是一个形式,表示占据一个参数位置
print('传递进来的' + name + '叫做实参,因为Ta是具体的参数值!')
>>> MyFirstFunction.__doc__
#MyFirstFunction没有()
'函数定义过程中的name是叫形参'

我们发现,在函数开头写下的字符串是不会打印出来的,但它作为函数的一部分存储起来。这个称为函数文档字符串,它的功能跟注释一样。

与注释不同的是,函数文档字符串可以通过特殊属性 ._ doc (注:. doc _两边分别是两条下划线):

也可以使用help()函数查看函数的文档

函数文档写在一个字符串里面,写2个,只会打印出第一个,第二个不会打印打出,例如:

>>> def MyFirstFunction(name,age):
'这是一个函数文档'
'用来记录函数的使用记录'
print('班长:'+ name +',年龄:' + age)
>>> MyFirstFunction.__doc__
'这是一个函数文档'

3.关键字参数

普通的参数叫做位置参数,使用位置参数可以解决程序员在调用一个函数时候,搞乱位置参数的顺序,以至于函数无法按照预期实现的潜在问题。

>>> def saySome(name,words):
print(name + "—>" +words)
>>> saySomething("小甲鱼","让编程改变世界!")
小甲鱼—>让编程改变世界!
>>> saySome("让编程改变世界!","小甲鱼")
让编程改变世界!—>小甲鱼
'为了不让调用的参数位置弄混,加上关键字参数,就不会出错了'
>>> saySome(words="让编程改变世界!",name="小甲鱼")
小甲鱼—>让编程改变世界!

关键字参数其实就是在传入实参时指定形参的变量名,在调用函数的时候使用的!

4.默认参数

默认参数就是在函数定义的时候,给形参赋予了默认值的参数:

>>> def saySome(name="小甲鱼",words="让编程改变世界!"):
print(name + '—>' +words)
>>> saySome()
#调用函数时没有参数,就会去找默认参数
小甲鱼—>让编程改变世界!
>>> saySome("小鱿鱼","也可以改变世界") #重新赋予实参,会调用函数时会调用实参,不会调用默认的参数
小鱿鱼—>也可以改变世界
>>> def test1(name = '甲鱼',age = '20'):
print('语文老师的名字是:'+ name +',年龄:' + age)
>>> test1()
语文老师的名字是:甲鱼,年龄:20
>>> test1('youyu')
语文老师的名字是:youyu,年龄:20
>>> test1(name = 'lucu')
语文老师的名字是:lucu,年龄:20

使用默认参数的话,就可以不带参数去调用函数。所以,它们之间的区别是:关键字参数是在函数调用的时候,通过参数名指定要赋值的参数,这样做就不怕因为搞不清参数的顺序而导致函数的调用出错;而默认参数是在参数定义过程中,为形参赋初值,当函数调用的时候,不传递参数,则默认使用形参的初始值代替。

5.收集参数(可变参数)

表示Function(param)
收集参数在大多数的时候被称作可变参数,仅需要在参数前面加上星号(
)即可:

>>> def TestFun(*param):
print('函数的长度是:',len(param))
print('第二个参数是:',param[1])
>>> TestFun(1,'hello',3.14)
函数的长度是: 3
第二个参数是: hello

Python就是把标志为收集参数的参数们打包成一个元组。

注意:如果在收集参数的后面还需要指定其它参数,在调用函数的时候就应该使用关键字参数来指定,否则Python就都会把你的实参都列入收集参数的范畴。

>>> def TestFun(*param,dec):
print('函数的长度是%d' % len(param))
print('最后一个参数是:',param[-1])
>>> TestFun(2,4,6,'world',7,8)
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
TestFun(2,4,6,'world',7,8)
TypeError: TestFun() missing 1 required keyword-only argument: 'dec'
>>> TestFun(2,4,6,'world',7,dec=8)
函数的长度是5
最后一个参数是: 7

建议:

在参数中带有收集参数是,可以将其它参数设置为默认参数,这样不容易出错

>>> def TestFun(*param,dec=9):
print('函数的长度是%d' % len(param))
print('最后一个参数是:',param[-1])
>>> TestFun(2,4,6,'world',7,5)
函数的长度是6
最后一个参数是: 5
>>> def test(*param,keyname=8):
print('收集参数是:',param)
print('关键字参数是:',keyname)
>>> test(1,2,3,4,9)
收集参数是: (1, 2, 3, 4, 9)
关键字参数是: 8

课后习题及答案
0.请问一下哪个是形参哪个是实参?

>>> def MyFun(x):
return(x**3)
y = 3
print(MyFun(y))
>>> MyFun(3)
27
x是形参,y是实参

1.函数文档和直接用#为函数写注释有什么不同
函数文档可以用属性.__doc__调用,即Function.doc

#注释

2.使用关键字参数,可以避免什么问题的出现
可以避免调用函数是参数传递错误的问题

3.使用help(print)查看print()这个BIF有哪些默认参数?分别起到什么作用?

4.默认参数和关键字参数表面最大的区别是什么?
默认参数在函数定义时就赋值,关键字参数是在函数调用时赋值

动动手:
0.编一个符合以下要求的函数:
a)计算打印所有参数的和乘以基数(base=3)的结果
b)如果参数中最后一个参数为(base=5),则设定基数为5,基数不参与求和计算。

>>> def Sum_X_base(*param,base = 3):
result = 0
for each in param:
result += each
if param[-1] == 5:
base = 5
Sum = result *base
return Sum
>>> Sum_X_base(1,2,3)
18
>>> Sum_X_base(1,2,5)
40

1.寻找水仙花数
如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数,例如153=13+53+3^3,因此153是一个水仙花数,编写一个程序,找出所有的水仙花数。

Narcissus [nɑːˈsɪsəs]:水仙

>>> def FoundNarcissus():
for each in range(100,1000):
temp = each
sum = 0
while temp:
sum += (temp % 10)**3
temp = temp // 10
if (sum == each):
return each
>>> FoundNarcissus()
153

正确的代码如下:

>>> def Narcissus():
for each in range(100,1000):
temp = each
result = 0
while temp:
result += (temp %10)**3
temp = temp // 10
if (result == each):
print(each)
>>> Narcissus()
153
370
371
407

2.编写一个函数findstr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数,例如:假如输入的字符串为:You cannot improve your past,but you can improve your future.Once time is wasted,life is wasted.子字符串为im,该函数执行后打印“子字符串在目标字符串中共常出现3次”。

def findStr(desStr, subStr):
count = 0
length = len(desStr)
if subStr not in desStr:
print('在目标字符串中未找到子字符串!')
else:
for each1 in range(length-1):
if desStr[each1] == subStr[0]:
if desStr[each1+1] == subStr[1]:
count += 1
print('子字符串在目标字符串中共出现次',count)
desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
print(findStr(desStr, subStr))

最后

以上就是慈祥飞机为你收集整理的函数(课后测试题及答案 )的全部内容,希望文章能够帮你解决函数(课后测试题及答案 )所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部