波大大12138 发表于 2020-6-22 15:04:33

*args不太了解

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了呢

qiuyouzhi 发表于 2020-6-22 15:09:04

1,可变参数啊,你如果传入1,2,3,4,5,那么args就是(1,2,3,4,5)
2,*只是一个运算符,不是参数名称。
3,params只是个变量名

Twilight6 发表于 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 是解包的意思,将容器内的元素全部取出

波大大12138 发表于 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语句的作用的必要性和作用是什么啊?返回一个函数还是方法?有啥用?

波大大12138 发表于 2020-6-22 15:33:25

@Twilight6

Twilight6 发表于 2020-6-22 15:41:29

波大大12138 发表于 2020-6-22 15:24
class Word(str):
'''存储单词的类,定义比较单词的几种方法'''



__new__ 将返回实例化对象给 __init__

波大大12138 发表于 2020-6-22 16:08:28

Twilight6 发表于 2020-6-22 15:41
__new__ 将返回实例化对象给 __init__

实例化对象?在这里具体指的是哪一个啊?

Twilight6 发表于 2020-6-22 16:09:13

波大大12138 发表于 2020-6-22 16:08
实例化对象?在这里具体指的是哪一个啊?

实例化对象 就是指a= C() 这个过程时候

波大大12138 发表于 2020-6-22 16:13:57

Twilight6 发表于 2020-6-22 16:09
实例化对象 就是指a= C() 这个过程时候

那这个new方法最后返回的是 return str.__new__(cls,word)没有你说的那个实例化对象啊?这个咋看

Twilight6 发表于 2020-6-22 16:14:46

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

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

就算你类中全是错误 语句 (不是错误语法),没实例化类之前,也不会报错
页: [1]
查看完整版本: *args不太了解