Python技能树学习-函数

题目一:递归调用

函数的参数:
def dump(index, default=0, *args, **kw):
    print('打印函数参数')
    print('---')
    print('index:', index)
    print('default:', default)
    for i, arg in enumerate(args):
        print(f'arg[{i}]:', arg)
    for key,value in kw:
        print(f'keyword_argument {key}:{value}')
    print('')

if __name__=='__main__':
    dump(0)
    dump(0,2)
    dump(0,2,"Hello","World")
    dump(0,2,"Hello","World", install='Python', run='Python Program')

Python函数的参数十分灵活,例如上面的例子:

index: 按顺序位置指定的参数
default=0: 带有默认值的参数
*args: 0个或多个可选的参数
**kw: 0个或多个关键字参数

查看打印结果可以增加对此的理解,语句 `` 的输出是:

打印函数参数
---
index: 0
default: 2
arg[0]: Hello
arg[1]: World
keyword_argument install:Python
keyword_argument run:Python Program

Python 的函数可以调用别的函数,当调用的是自己本身时,就形成了递归调用。以下是一个待完成的递归调用程序,功能需求是:

  • 循环打印"Hello,World!"的每个字符
  • 循环5次。

# -*- coding: UTF-8 -*-
def circulate_print(str, count=0):
    if count == 5:
        return
    for char in str:
        print(char)
    
    # TODO(You): 请在此完成函数递归调用

if __name__ == '__main__':
    str = "Hello,World!"
    circulate_print(str)

实现

# 第一种
count = count+1
circulate_print(str, count)

# 第二种
circulate_print(str, count=count+1)

# 第三种
circulate_print(str, count+1)

主要在参数的传递和函数调用的形式上有区别。

  • 第一种实际上改变了count值
  • 第二种用关键字参数形式来传参(将当前count值+1后作为参数传给函数),不会改变count值,要求函数定义中的参数名必须匹配
  • 第三种用位置参数传参,不改变count值

错误答案分析 

circulate_print(str, count) 

# 循环时count不改变,陷入死循环

改进 

竖版字母输出更改为横板展示更舒适。

将 print(char) 更改为 print(char,end=' ')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值