第017讲:函数 - Python的乐高积木

第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))
上一篇:017 PCIe总线的事务层(一)


下一篇:L1-017 到底有多二