show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次通过包饺子理解了
- 层层嵌套的工业化思路
- 形式参数与实际参数
- 以及对于工业化的反思
- 如果想要在原来画松树的基础上
- 给松树树冠上颜色
- 应该怎么做呢?🤔
- 首先修改原始的代码
- 添加一个参数color
- 并给这个参数一个默认值
- "white"
- 并给这个参数一个默认值
- 因为默认值的缘故
- 期待的函数调用仍然能够完成
- 如何理解默认参数呢?
- 就是给参数一个默认值
- 即使不传递参数
- 使用默认参数
- 仍能完成函数调用
- 从汇编角度如何理解呢?
- 有相应的值
- 也有相应的语句设置默认值
- 那么调用的时候如何分辨呢?
- 如果用的是默认值
- 就不再重新LOAD_CONST了
- 函数默认值还有什么要注意的呢?
- 函数默认值的赋值是在函数定义的时候完成的
- 第一类L在积累
- 第二类使用默认值不积累
- 我们去修改我们的松树程序
- 把这个接收到的color参数(argument)
- 再传递给draw_pine_head函数
- 完成具体的树冠的绘画
- 而且把颜色控制信息加到了程序中
- 7、10行程序
- 调用的时候
- 传递给函数一个色彩名称
- 函数通过查询颜色字典(colors)
- 得到具体的色彩代码
- 这种方法叫做表驱动
- 方法来自于c语言
- 用序号来驱动
- 指向字符串的指针数组的元素位置
- 从而代替if、switch的方法
- 我们是用字典来实现的
-
增加字典项就相当于加分支数量
- 目前总共三种颜色
-
可以运行么?
- 从汇编角度如何理解参数默认值呢?
- 比较两个汇编
- 36行加载了第一个参数6
- 37行加载了第二个参数"green"
- 这行就是分别所在
- 这行加载的就是color的参数的值
- 没有使用默认参数
- 使用默认值的函数
def draw_pine(n,color="white"):
draw_pine_head(n,color)
draw_pine_body()
def draw_pine_head(n,color="white"):
print(color)
print("\\33["+d_colors[color]+"m",end="")
draw_pine_triangle()
draw_pine_triangle()
print("\\33[0m",end="")
def draw_pine_triangle():
for i in range(6):
for j in range(6-i):
print(" ",end="",sep="")
for k in range(2*i+1):
print("*",end="",sep="")
print()
def draw_pine_body():
for i in range(5):
for j in range(5):
print(" ",end="",sep="")
for k in range(3):
print("*",end="",sep="")
print()
for i in range(6):
for j in range(6-i):
print(" ",end="",sep=",")
if __name__ == '__main__':
d_colors = {"green":"32","yellow":"33","white":"0"}
draw_pine(6,"yellow")
- 这个树冠大小n是否可以也有个默认值?
- 确实可以
- 现在什么参数都不用给
- 就可以调用了
- 包饺子也是
- 比如我们包饺子默认参数就是
- 韭菜鸡蛋馅
- 麦芯粉
- 自来水
- 你要特殊颜色的饺子
- 就得在面粉这个实参传递之前加上特定工序
- 不过白面和韭菜鸡蛋是两个参数
- 得分别说说
drawpine()
- 这个是全默认
- n = 5
- color = "green"
drawpine(6)
- 这个color是默认
- n = 6
- 如果我想反过来呢?
- n是默认
- color不默认
drawpine(color="yellow")
- 因为第一个参数是n
- 我们想要设置第2个参数color不能直接设置
- 需要用参数的关键字color
- 这样就可以只设置color了
- 我们去总结吧
- 我们这次完成了彩色松树的显示
- 使用表驱动设置颜色与色彩代码的字典
- 使用默认参数确保原来只有一个参数的调用仍然好使
- 但是始终要修改源代码才能打印出松树
- 可以利用命令行的参数(arguement)么?🤔
- 我们下次再说👋