本节课的一些疑问

本节课的一些疑问

http://img1.sycdn.imooc.com//climg/5eb3be060946017003920477.jpg

一、*args,**kwargs是不是固定名词?不管几个参数什么类型只要在括号里加这个*args,**kwargs就行了?

二、图上画圈的return是不是没有必要?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学,你好。

1、视频中add()方法中,使用的是return将结果返回,因此在调用时需要定义变量rest接收结果。同学给出的截图中,在hello()函数中直接使用print()将结果输出了,因此不需要定义变量接收结果

http://img1.sycdn.imooc.com//climg/5eb3e6ff099bbcb706710509.jpg

2、*args代表不定长参数,"不定长"意味着你在定义函数的时候不知道调用者会传递几个参数进来,加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。**kwargs允许传递不定长的关键字参数。

def wrapper(func):
    def inner(age, *args, **kwargs):
        if age < 0:
            age = 0
        func(age)
        print(args)  # (50, 60)
        print(kwargs)  # {'a': 2, 'b': 3}
    return inner

@wrapper
def getAge(age, *args, **kwargs):
    print("今年%s岁" % age)

getAge(20, 50, 60, a=2, b=3)  # 今年20岁

3、不能直接把age换成*args的,否则程序中age无法使用,*args是元组类型的数据,在取值时需要使用下标取值

def wrapper(func):
    def inner(*args):
        age = args[0]
        if age < 0:
            age = 0
        func(age)
        print(args)   # (20,)
    return inner

@wrapper
def getAge(*args):
    print("今年%s岁" % args)

getAge(20)   # 今年20岁

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

提问者 江民川 2020-05-07 16:11:55

关于第一个问题,追问一下,到底什么时候用实际的参数名,什么时候用泛指的*args,**kwargs呢?

用*args,**kwargs如何在装饰器里对参数进行操作?比如下面这个图,我试了一下,如果把age换成*args,**kwargs就会报错,一般是什么情况才使用    *args,**kwargs呢?

http://img1.sycdn.imooc.com//climg/5c53e96a0001d9aa00000000.jpg

提问者 江民川 2020-05-07 16:01:12

第二个问题是return太多我看走眼了,没有问题,换成问以下这个问题:

http://img1.sycdn.imooc.com//climg/5eb3bf9c09ded15304120208.jpg这是视频截图,老师说要再用一个参数保存func(a,b)的计算结果。

http://img1.sycdn.imooc.com//climg/5e8046ba09ac279a04430512.jpg这是其他答疑里我看老师发的图,这里没用一个多余的参数保存func('python')的值。

那到底要不要多加个参数用于临时保存啊?


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师