Python论坛  - 讨论区

标题:Re: [python-chinese] 问一下函数参数类型的区别(arg,*args,**argss)

2005年06月10日 星期五 15:29

Qutr qutianrang at gmail.com
Fri Jun 10 15:29:44 HKT 2005

*的传过来的是个元组;  **的传过来是个字典。
呵呵!试验一下就知道了。

Qutr , qutianrang at gmail.com 
2005-6-10 
----- 收到以下来信内容 ----- 
发件人: 马剑 
收件人: python-chinese 
时  间: 2005-06-10, 15:24:13
主  题: [python-chinese] 问一下函数参数类型的区别(arg,*args,**argss)


我发现python函数的参数有3种写法:直接一个变量名、*变量名、**变量名。

上面三种有什么区别呢?都应该怎么用呢?
_______________________________________________
python-chinese list
python-chinese at lists.python.cn
http://python.cn/mailman/listinfo/python-chinese
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050610/fce0197a/attachment.html

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

2005年06月10日 星期五 15:37

马剑 honeyday at staffonly.org
Fri Jun 10 15:37:49 HKT 2005

我写了一段试验代码:

def test(arg,*args,**argss):
    print arg
    print args
    print argss
    
if __name__ == '__main__':
    test('z',('a','b'),{'a':'x','b':'y'})

但是输出的结果如下:

z
(('a', 'b'), {'a': 'x', 'b': 'y'})
{}

为什么第三个参数跑到第二个参数里面去了,组合成一个元组了?

On Fri, 10 Jun 2005 15:29:44 +0800
"Qutr"<qutianrang at gmail.com> wrote:
=================================================================
> *的传过来的是个元组;  **的传过来是个字典。
> 呵呵!试验一下就知道了。
> 
> Qutr , qutianrang at gmail.com 
> 2005-6-10 
> ----- 收到以下来信内容 ----- 
> 发件人: 马剑 
> 收件人: python-chinese 
> 时  间: 2005-06-10, 15:24:13
> 主  题: [python-chinese] 问一下函数参数类型的区别(arg,*args,**argss)
> 
> 
> 我发现python函数的参数有3种写法:直接一个变量名、*变量名、**变量名。
> 
> 上面三种有什么区别呢?都应该怎么用呢?
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese



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

2005年06月10日 星期五 15:49

limodou limodou at gmail.com
Fri Jun 10 15:49:22 HKT 2005

你弄错了。*arg表示未在函数中列出参数的变量,但它又不是使用=来定义的。**args是表示使用key=value来定义的参数。因此*arg和**args在调用时并不是tuple和dict,而是类似于:

def test(arg, *args, **argss):

test(1, 'a', [], t=2, d='3')

*args为'a', []
**argss为t=2, d='3'

但在函数内部你看到的args就是('a', [])和{'t':2, 'd':'3'}了
这里面有一个转换过程。

因此dict(a=2, b=3)就是使用这种方法来将一个函数式的调用转为了一个dict {'a':2, 'b':3}

在 05-6-10,马剑<honeyday at staffonly.org> 写道:
> 我写了一段试验代码:
> 
> def test(arg,*args,**argss):
>     print arg
>     print args
>     print argss
> 
> if __name__ == '__main__':
>     test('z',('a','b'),{'a':'x','b':'y'})
> 
> 但是输出的结果如下:
> 
> z
> (('a', 'b'), {'a': 'x', 'b': 'y'})
> {}
> 
> 为什么第三个参数跑到第二个参数里面去了,组合成一个元组了?
> 
> On Fri, 10 Jun 2005 15:29:44 +0800
> "Qutr"<qutianrang at gmail.com> wrote:
> =================================================================
> > *的传过来的是个元组;  **的传过来是个字典。
> > 呵呵!试验一下就知道了。
> >
> > Qutr , qutianrang at gmail.com
> > 2005-6-10
> > ----- 收到以下来信内容 -----
> > 发件人: 马剑
> > 收件人: python-chinese
> > 时  间: 2005-06-10, 15:24:13
> > 主  题: [python-chinese] 问一下函数参数类型的区别(arg,*args,**argss)
> >
> >
> > 我发现python函数的参数有3种写法:直接一个变量名、*变量名、**变量名。
> >
> > 上面三种有什么区别呢?都应该怎么用呢?
> > _______________________________________________
> > python-chinese list
> > python-chinese at lists.python.cn
> > http://python.cn/mailman/listinfo/python-chinese
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 


-- 
I like python! 
My Donews Blog: http://www.donews.net/limodou
New Google Maillist: http://groups-beta.google.com/group/python-cn

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

2005年06月10日 星期五 15:59

马剑 honeyday at staffonly.org
Fri Jun 10 15:59:27 HKT 2005

简单明了,谢谢!
还有一个问题是python模块文件夹下面的__init__.py是干什么用的?什么时候需
要调用这个文件呢?

On Fri, 10 Jun 2005 15:49:22 +0800
limodou <limodou at gmail.com> wrote:
=================================================================
> 你弄错了。*arg表示未在函数中列出参数的变量,但它又不是使用=来定义的。**args是表示使用key=value来定义的参数。因此*arg和**args在调用时并不是tuple和dict,而是类似于:
> 
> def test(arg, *args, **argss):
> 
> test(1, 'a', [], t=2, d='3')
> 
> *args为'a', []
> **argss为t=2, d='3'
> 
> 但在函数内部你看到的args就是('a', [])和{'t':2, 'd':'3'}了
> 这里面有一个转换过程。
> 
> 因此dict(a=2, b=3)就是使用这种方法来将一个函数式的调用转为了一个dict {'a':2, 'b':3}
> 
> 在 05-6-10,马剑<honeyday at staffonly.org> 写道:
> > 我写了一段试验代码:
> > 
> > def test(arg,*args,**argss):
> >     print arg
> >     print args
> >     print argss
> > 
> > if __name__ == '__main__':
> >     test('z',('a','b'),{'a':'x','b':'y'})
> > 
> > 但是输出的结果如下:
> > 
> > z
> > (('a', 'b'), {'a': 'x', 'b': 'y'})
> > {}
> > 
> > 为什么第三个参数跑到第二个参数里面去了,组合成一个元组了?
> > 
> > On Fri, 10 Jun 2005 15:29:44 +0800
> > "Qutr"<qutianrang at gmail.com> wrote:
> > =================================================================
> > > *的传过来的是个元组;  **的传过来是个字典。
> > > 呵呵!试验一下就知道了。
> > >
> > > Qutr , qutianrang at gmail.com
> > > 2005-6-10
> > > ----- 收到以下来信内容 -----
> > > 发件人: 马剑
> > > 收件人: python-chinese
> > > 时  间: 2005-06-10, 15:24:13
> > > 主  题: [python-chinese] 问一下函数参数类型的区别(arg,*args,**argss)
> > >
> > >
> > > 我发现python函数的参数有3种写法:直接一个变量名、*变量名、**变量名。
> > >
> > > 上面三种有什么区别呢?都应该怎么用呢?
> > > _______________________________________________
> > > python-chinese list
> > > python-chinese at lists.python.cn
> > > http://python.cn/mailman/listinfo/python-chinese
> > 
> > _______________________________________________
> > python-chinese list
> > python-chinese at lists.python.cn
> > http://python.cn/mailman/listinfo/python-chinese
> > 
> 
> 
> -- 
> I like python! 
> My Donews Blog: http://www.donews.net/limodou
> New Google Maillist: http://groups-beta.google.com/group/python-cn



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

2005年06月10日 星期五 16:39

limodou limodou at gmail.com
Fri Jun 10 16:39:59 HKT 2005

它相当于class的构造函数。在导入包中会自动执行。在这里可以做一些初始化的工作,比如导入子模块什么的。

在 05-6-10,马剑<honeyday at staffonly.org> 写道:
> 简单明了,谢谢!
> 还有一个问题是python模块文件夹下面的__init__.py是干什么用的?什么时候需
> 要调用这个文件呢?
> 
> On Fri, 10 Jun 2005 15:49:22 +0800
> limodou <limodou at gmail.com> wrote:
> =================================================================
> > 你弄错了。*arg表示未在函数中列出参数的变量,但它又不是使用=来定义的。**args是表示使用key=value来定义的参数。因此*arg和**args在调用时并不是tuple和dict,而是类似于:
> >
> > def test(arg, *args, **argss):
> >
> > test(1, 'a', [], t=2, d='3')
> >
> > *args为'a', []
> > **argss为t=2, d='3'
> >
> > 但在函数内部你看到的args就是('a', [])和{'t':2, 'd':'3'}了
> > 这里面有一个转换过程。
> >
> > 因此dict(a=2, b=3)就是使用这种方法来将一个函数式的调用转为了一个dict {'a':2, 'b':3}
> >
> > 在 05-6-10,马剑<honeyday at staffonly.org> 写道:
> > > 我写了一段试验代码:
> > >
> > > def test(arg,*args,**argss):
> > >     print arg
> > >     print args
> > >     print argss
> > >
> > > if __name__ == '__main__':
> > >     test('z',('a','b'),{'a':'x','b':'y'})
> > >
> > > 但是输出的结果如下:
> > >
> > > z
> > > (('a', 'b'), {'a': 'x', 'b': 'y'})
> > > {}
> > >
> > > 为什么第三个参数跑到第二个参数里面去了,组合成一个元组了?
> > >
> > > On Fri, 10 Jun 2005 15:29:44 +0800
> > > "Qutr"<qutianrang at gmail.com> wrote:
> > > =================================================================
> > > > *的传过来的是个元组;  **的传过来是个字典。
> > > > 呵呵!试验一下就知道了。
> > > >
> > > > Qutr , qutianrang at gmail.com
> > > > 2005-6-10
> > > > ----- 收到以下来信内容 -----
> > > > 发件人: 马剑
> > > > 收件人: python-chinese
> > > > 时  间: 2005-06-10, 15:24:13
> > > > 主  题: [python-chinese] 问一下函数参数类型的区别(arg,*args,**argss)
> > > >
> > > >
> > > > 我发现python函数的参数有3种写法:直接一个变量名、*变量名、**变量名。
> > > >
> > > > 上面三种有什么区别呢?都应该怎么用呢?
> > > > _______________________________________________
> > > > python-chinese list
> > > > python-chinese at lists.python.cn
> > > > http://python.cn/mailman/listinfo/python-chinese
> > >
> > > _______________________________________________
> > > python-chinese list
> > > python-chinese at lists.python.cn
> > > http://python.cn/mailman/listinfo/python-chinese
> > >
> >
> >
> > --
> > I like python!
> > My Donews Blog: http://www.donews.net/limodou
> > New Google Maillist: http://groups-beta.google.com/group/python-cn
> 
> 


-- 
I like python! 
My Donews Blog: http://www.donews.net/limodou
New Google Maillist: http://groups-beta.google.com/group/python-cn

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

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

    你的回复:

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

    Zeuux © 2025

    京ICP备05028076号