学习时间:2017/10/17
第18、19、20、21、22、23课:函数
18课知识点汇总:
创建和调用函数:
>>> def Function_name(parameters): #函数创建
function body
>>> Function_name(parameters) #函数调用
18课课后题汇总:
1. 什么是DRY?DRY是程序员们公认的指导原则:Don’t Repeat Yourself. 不要再去重复拷贝一段代码了。使用函数的好处:降低代码量、降低维护成本、易读。
2.以下函数有几个参数?
>>> def MyFun((x,y),(a,b)):
return (x*y-a*b)
答案为0个,因为类似于这样的写法是错误的。函数的参数需要的是变量,而这里试图用“元祖”的形式来传递是不可行的。
如果要表达传递元组可用以下方式:
>>> def MyFun(x,y):
return (x[0]*x[1]-y[0]*y[1])
>>> MyFun((3,4),(1,2))
10
3.请问调用以下这个函数会打印什么内容?
>>> def hello():
print('Hello World!')
return
print('Welcome To FishC.com!')
会打印
>>> hello()
Hello World!
因为当Python执行到return语句的时候,Python认为函数到此结束,需要返回了(尽管没有任何返回值)。
4.编写一个将十进制转换为二进制的函数,要求采用“除2取余”[概念链接]的方式,结果与调用bin()一样返回字符串形式。
>>> def Dec2Bin(dec):
temp=[]
result=''
while dec:
quo=dec%2
dec=dec//2
temp.append(quo)
while temp:
result+=str(temp.pop())
return result
>>> print(Dec2Bin(62))
111110
5.编写一个函数,利用欧几里得算法[概念链接]求最大公约数,例如gcd(x, y)返回值为参数x和参数y的最大公约数。
欧几里得算法:两个数的最大公约数是指能同时整除它们的最大正整数。
设两数为a
、b(a≥b)
,求a
和b
最大公约数(a,b)
的步骤如下:
(1)用a
除以b(a≥b)
,得a÷b=q...r1(r1≥0)
。
(2)若 r1=0
,则 (a,b)=b
;
(3)若 r1≠0
,则再用b
除以r1
,得b÷r1=q...r2(r2≥0)
.
(4)若 r2=0
,则 (a,b)=r1
;若r2≠0
,则继续用 r1
除以 r2
,……,如此下去,直到能整除为止。
其最后一个余数为0的除数即为 (a,b)
的最大公约数。
>>> def gcd(x,y):
while y:
remainder = x % y
x = y
y = remainder
return x
#本应返回的是除数,但是由于每一次while循环中已经将y赋给x,故返回x
>>> print(gcd(4,6))
2
>>> print(gcd(6,4))
2
易错处:在这里,不用判断两个参数的大小,因为小数除以大数比大数除以小数就多一次while循环,这次while循环中只是将两个数字位置调换,并无其他影响。
19课知识点汇总:
1.形参和实参
>>> def MyFirstFunction(name):
'函数定义过程中的name叫形参'
#因为它知识一个形式,表示占据一个参数位置
print('传递进来的'+name+'叫做实参,因为它是具体的参数值')
>>> MyFirstFunction('小甲鱼')
传递进来的小甲鱼叫做实参,因为它是具体的参数值
2.函数文档
以上1中程序中‘函数定义过程中的name叫形参’
这个用单引号括起来的内容叫做函数文档,用来解释整个函数的内容梗概,可用function_name.__doc__
查看该函数文档(或用help()查看)。它与注释功能相同,但严格来讲,注释只是解释说明部分代码的信息。
>>> MyFirstFunction.__doc__
'函数定义过程中的name叫形参'
>>> help(MyFirstFunction)
Help on function MyFirstFunction in module __main__:
MyFirstFunction(name)
函数定义过程中的name叫形参
3.关键词参数
函数有多个参数时,用位置索引参数时可能会发生参数顺序引起的BUG,而用关键字索引参数就可以指定具体调用的是哪个参数,不用按照形参顺序去传递实参。例如:
>>> def SaySome(name,words):
print(name+'->'+words)
>>> SaySome('小甲鱼','让编程改变世界')
小甲鱼->让编程改变世界
>>> SaySome(words='让编程改变世界',name='小甲鱼')
小甲鱼->让编程改变世界
4.默认参数
默认参数是为形参定义了默认值,当函数调用时未传递实参也不会报错,默认使用形参的初始值代替。
>>> def SaySome(name='小甲鱼',