Discuss / Python / 有个地方怎么都想不明白

有个地方怎么都想不明白

Topic source

藤井p

#1 Created at ... [Delete] [Delete and Lock User]
def f1(a, b, c = 0, *d, **kw):
    print('a =', a, 'b =', b, 'c =', c ,'d =', d, 'kw =', kw)
args = (1, 2, 3)
kw = {'x': '##'}
f1(*args, *(1, 2, 3), **kw)

如上 args分别把a、b、c参数填满,那d为什么就是传不进去呢 辗转反侧,希望有人能解惑一下,谢谢

IE之梦

#2 Created at ... [Delete] [Delete and Lock User]

把你的*d改成args就好了

IE之梦

#3 Created at ... [Delete] [Delete and Lock User]

上面说错了,我查了一下好像只能接收一个非关键字参数和一个关键字参数

藤井p

#4 Created at ... [Delete] [Delete and Lock User]

哦哦,那就是, 入口参数只能出现一次*,里面要包括定义好了的可变参数 这样?

付伟根

#5 Created at ... [Delete] [Delete and Lock User]

意思是说一次调用中只能传入一个可变函数或者一个关键字函数吗?

与非----

#6 Created at ... [Delete] [Delete and Lock User]
def f1(a, b, c = 0,*d,**kw):
    print('a =', a, 'b =', b, 'c =', c ,'d =', d, 'kw =', kw)
args = (1,2,3,4,5,6,7)
kw = {'x': '##'}
f1(*args,**kw)

改成这样就可以了,可以看到args的值先是传给了前面的必选参数,然后再传给了可变参数。猜测应该是一次只能传一个可变参数。 但是教程里没说这种用法。教程里说的是*args可以传给可变参数,没说还可以传给必选参数。

与非----

#7 Created at ... [Delete] [Delete and Lock User]

运行结果为:

a = 1 b = 2 c = 3 d = (4, 5, 6, 7) kw = {'x': '##'}

与非----

#8 Created at ... [Delete] [Delete and Lock User]

说错了,教程里有提到这种用法。

应该是函数的参数里面只能出现一个可变参数,因为多余一个可变参的话,解释器就不知道如何去解析了,不知道如何区分两个可变参数

SamuelxMiao

#10 Created at ... [Delete] [Delete and Lock User]

def f1(a, b, c = 0, d, **kw): print('a =', a, 'b =', b, 'c =', c ,'d =', d, 'kw =', kw) args = (1, 2, 3) kw = {'x': '##'} f1(2args, *kw) 改成这样就可以达到你的要求了。


  • 1
  • 2

Reply