第017讲:函数 - Python的乐高积木
测试题
0. 你有听说过DRY吗?
# DRY(Don't Repeat Yourself.)原则
# 不要重复拷贝一段代码
1. 都是重复一段代码,为什么我要使用函数(而不使用简单的拷贝黏贴)呢?
使用函数有以下好处:
- 可以降低代码量(调用函数只需要一行,而拷贝黏贴需要N倍代码)
- 可以降低维护成本(函数只需修改def部分内容,而拷贝黏贴则需要每一处出现的地方都作修改)
- 使序更容易阅读(没有人会希望看到一个程序重复一万行“I love FishC.com”
2. 函数可以有多个参数吗?
- 理论上可以无限个,但要你能记得住这么多
- 建议三五个就够了,太多反而影响阅读
3. 创建函数使用什么关键字,要注意什么?
- 关键字 def
- 函数名后边要加上小括号 ()
- 小括号后边是冒号 :
- 缩进部分属于函数内容
def MyFun():
# 函数体
# 非函数体
4. 请问这个函数有多少个参数?
def MyFun((x, y), (a, b)):
return x * y - a * b
- 这个函数是错的,函数参数是变量
- 这里试图用 元祖 来传递是不可行的
# 修改方式
>>> def MyFun():
return x[0]*x[1] - y[0]*y[1]
>>> MyFun((1,3),(2,5))
-7
5. 请问调用以下这个函数会打印什么内容?
>>> def hello():
print('Hello World!')
return
print('Welcome To FishC.com!')
>>> hello()
'Hello World!'
- 因为当Python 执行到 return 语句时,Python 认为函数到此结束,需要返回了(尽管没有任何返回值)
动动手
0. 编写一个函数 power() 模拟内建函数 pow(),即 power(x, y) 为计算并返回 x 的 y 次幂的值。
def power(x,y):
c = x**y
print(c)
power(2,2)
1. 编写一个函数,利用欧几里得算法(脑补链接)求最大公约数,例如 gcd(x, y) 返回值为参数 x 和参数 y 的最大公约数。
def gcd(x,y):
while y: # y没被除尽就表示余数不为0,及True,则继续循环下去
t = x % y
x = y
y = t
return x
2. 编写一个将十进制转换为二进制的函数,要求采用“除2取余”(补脑链接)的方式,结果与调用 bin() 一样返回字符串形式。
def bin(dec):
temp = [] # 空列表,存放计算的值
result = '' # 空字符串,最后来拼接每一个值
while dec:
quo = dec % 2 # 把十进制除以2的余数赋予变量
dec = dec // 2 # 第一次循环后将十进制除以2取整赋值用于下一次计算
temp.append(quo) # 将余数写入列表保存
while temp: # 将列表中每一个值提取出来
result += str(temp.pop()) # 倒序形式拼接
return result
print(bin(181))