鱼C论坛

 找回密码
 立即注册
查看: 1124|回复: 9

[已解决]*args不太了解

[复制链接]
发表于 2020-6-22 15:04:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class C:
        def __init__(self, *args):
                if not args:
                        print("并没有传入参数")
                else:
                        print("传入了 %d 个参数,分别是:" % len(args), end='')
                        for each in args:
                                print(each, end=' ')

如以上代码所示,题目要求定义一个类,当实例化该类的时候,自动判断传入了多少个参数,并显示出来。
1.我想问一下括号里面的*args用在这里是什么意思他是如何起作用的?我翻了一下前面课的笔记有一个*params这两个参数有什么区别或者作用吗
2.为什么括号里面是*args到了下面判断的时候就用的是args了呢
最佳答案
2020-6-22 15:09:12


1.我想问一下括号里面的*args用在这里是什么意思他是如何起作用的?我翻了一下前面课的笔记有一个*params这两个参数有什么区别或者作用吗

没区别和作用,定义参数时候 带上 * 号 那么就是不确定传参数量的传入,最后以元组形式储存在参数中

比如你这里的 *args   我们假设 x = C(1,2,3,4,5,6) 我们实例化对象给 x 然后任意传入了参数,那么这些参数就会被储存在 args 元组中

所以 此时 args 参数 = (1,2,3,4,5,6) , 主要作用是有无 * 号 而不是参数名哈~


2.为什么括号里面是*args到了下面判断的时候就用的是args了呢?

*号就是代表 args 这个参数可以填入任意的意思,当然你后来的 *args 是解包的意思,将容器内的元素全部取出

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-22 15:09:04 | 显示全部楼层
1,可变参数啊,你如果传入1,2,3,4,5,那么args就是(1,2,3,4,5)
2,*只是一个运算符,不是参数名称。
3,params只是个变量名
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-22 15:09:12 | 显示全部楼层    本楼为最佳答案   


1.我想问一下括号里面的*args用在这里是什么意思他是如何起作用的?我翻了一下前面课的笔记有一个*params这两个参数有什么区别或者作用吗

没区别和作用,定义参数时候 带上 * 号 那么就是不确定传参数量的传入,最后以元组形式储存在参数中

比如你这里的 *args   我们假设 x = C(1,2,3,4,5,6) 我们实例化对象给 x 然后任意传入了参数,那么这些参数就会被储存在 args 元组中

所以 此时 args 参数 = (1,2,3,4,5,6) , 主要作用是有无 * 号 而不是参数名哈~


2.为什么括号里面是*args到了下面判断的时候就用的是args了呢?

*号就是代表 args 这个参数可以填入任意的意思,当然你后来的 *args 是解包的意思,将容器内的元素全部取出

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-22 15:24:56 | 显示全部楼层
Twilight6 发表于 2020-6-22 15:09
没区别和作用,定义参数时候 带上 * 号 那么就是不确定传参数量的传入,最后以元组形式储存在参数中
...

class Word(str):
'''存储单词的类,定义比较单词的几种方法'''

    def __new__(cls, word):
        # 注意我们必须要用到 __new__ 方法,因为 str 是不可变类型
        # 所以我们必须在创建的时候将它初始化
        if ' ' in word:
            print "Value contains spaces. Truncating to first space."
            word = word[:word.index(' ')] #单词是第一个空格之前的所有字符
        return str.__new__(cls, word)
你好顺便问一下这个代码中的最后一行return语句的作用的必要性和作用是什么啊?返回一个函数还是方法?有啥用?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-22 15:33:25 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-22 15:41:29 | 显示全部楼层
波大大12138 发表于 2020-6-22 15:24
class Word(str):
'''存储单词的类,定义比较单词的几种方法'''

__new__ 将返回实例化对象给 __init__  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-22 16:08:28 | 显示全部楼层
Twilight6 发表于 2020-6-22 15:41
__new__ 将返回实例化对象给 __init__

实例化对象?在这里具体指的是哪一个啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-22 16:09:13 | 显示全部楼层
波大大12138 发表于 2020-6-22 16:08
实例化对象?在这里具体指的是哪一个啊?

实例化对象 就是指  a  = C() 这个过程时候
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-22 16:13:57 | 显示全部楼层
Twilight6 发表于 2020-6-22 16:09
实例化对象 就是指  a  = C() 这个过程时候

那这个new方法最后返回的是 return str.__new__(cls,word)没有你说的那个实例化对象啊?这个咋看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-22 16:14:46 | 显示全部楼层
波大大12138 发表于 2020-6-22 16:13
那这个new方法最后返回的是 return str.__new__(cls,word)没有你说的那个实例化对象啊?这个咋看


这个类写好了 功能全部都是在你实例化对象后才体现的

就算你类中全是错误 语句 (不是错误语法),没实例化类之前,也不会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 12:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表