Python论坛  - 讨论区

标题:[python-chinese] 怎么使用可变参数。

2006年10月26日 星期四 09:12

feihu feihu.list在gmail.com
星期四 十月 26 09:12:55 HKT 2006

ÕýÔÚÊÔÓÃPil¿â£¬ÔÚÁí´æΪͼÏñÎļþµÄʱºò£¬¿´Ô´ÂëÊÇ¿ÉÒÔ½ÓÊÕÒ»¸ö±àÂë²ÎÊý¡£
º¯ÊýµÄ¶¨ÒåÊÇ£º
    def save(self, fp, format=None, **params):
µ«ÎÒÔÚÊÔÓõÄÊÔÓõÄʱºò¡£
×ÜÊÇÖ»ÄÜ im.save('e:/2.jpg', 'JPEG')
ºóÃæÎÞÂÛÔÚ¼Óʲô£¬¶¼Ìáʾ
TypeError: save() takes at most 3 arguments (4 given)

ÔÙÔÚIDLEµÄº¯ÊýÌáʾÖУ¬ÔòÊÇ(fp, format=None, ***)
Õâ¸ö***¸ÃÔõôÀ´Ê¹Óá£

½Øͼ¡£
-- 
feihu <feihu.list在gmail.com>
-------------- 下一部分 --------------
Ò»¸ö·ÇÎı¾¸½¼þ±»Çå³ý...
·¢ÐÅÈË: %(who)s
Ö÷Ìâ: %(subject)s
ÈÕÆÚ: %(date)s
´óС: 4089
Url: http://python.cn/pipermail/python-chinese/attachments/20061026/0e3a1880/attachment-0001.png 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年10月26日 星期四 09:18

yi huang yi.codeplayer在gmail.com
星期四 十月 26 09:18:23 HKT 2006

>
> 函数的定义是:
>    def save(self, fp, format=None, **params):
>

两个*,说明后面可以接任意的关键字参数。

-- 
http://codeplayer.blogspot.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20061026/ece612dd/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年10月26日 星期四 09:34

amingsc amingsc在gmail.com
星期四 十月 26 09:34:45 HKT 2006

你看看下面的例子就明白啦
>>>def fun(a,b,**params):
print 'a:',a
print 'b:',b
for k in params.keys():print k,':',params[k]
>>>fun(1,2)
a: 1
b: 2

>>>fun(1,2,c=3,d=4)
a: 1
b: 2
c : 3
d : 4

**params表示是关键字参数的嘛,所以后面你得像这样的“c=3,d=4”
feihu 写道:
> 正在试用Pil库,在另存为图像文件的时候,看源码是可以接收一个编码参数。
> 函数的定义是:
>     def save(self, fp, format=None, **params):
> 但我在试用的试用的时候。
> 总是只能 im.save('e:/2.jpg', 'JPEG')
> 后面无论在加什么,都提示
> TypeError: save() takes at most 3 arguments (4 given)
>
> 再在IDLE的函数提示中,则是(fp, format=None, ***)
> 这个***该怎么来使用。
>
> 截图。
>   
>
> ------------------------------------------------------------------------
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年10月26日 星期四 09:43

limodou limodou在gmail.com
星期四 十月 26 09:43:30 HKT 2006

On 10/26/06, feihu <feihu.list在gmail.com> wrote:
> 正在试用Pil库,在另存为图像文件的时候,看源码是可以接收一个编码参数。
> 函数的定义是:
>     def save(self, fp, format=None, **params):
> 但我在试用的试用的时候。
> 总是只能 im.save('e:/2.jpg', 'JPEG')
> 后面无论在加什么,都提示
> TypeError: save() takes at most 3 arguments (4 given)
>
> 再在IDLE的函数提示中,则是(fp, format=None, ***)
> 这个***该怎么来使用。
>
> 截图。
我想这里的save()函数可能只是一个入口,它会调用下层实际的save方法,因此这里这为了通用使用了可变关键字参数,但是当使用具体的save()方法时,可能它并不需要多余的参数,因此当你传入过多参数时就会出错。

而你的调用形式为:

im.save('e:/2.jpg', 'JPEG')

转化一下就变成:

Image.save(im, 'e:/2.jpg', 'JPEG')

因为python自动将im与save绑定了,所以im就是第一个参数,这样:im, 'e:/2.jpg', 'JPEG'已经是三个参数了。

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年10月26日 星期四 09:44

feihu feihu.list在gmail.com
星期四 十月 26 09:44:32 HKT 2006

解决了。声明时的一个* 和两个* 在使用是是有区别的。

如果是
def a(*args)的形式,接收的是可变参数。
直接a(1, 2, 3)就Ok了。

def a(**args)的形式,接收的字典形式的参数
直接a(x=1, y=2, z=3)就Ok了。


> >
> > 函数的定义是:
> >    def save(self, fp, format=None, **params):
> >
> 
> 两个*,说明后面可以接任意的关键字参数。
> 
> -- 
> http://codeplayer.blogspot.com/

-- 
feihu <feihu.list在gmail.com>


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号