Python论坛  - 讨论区

标题:[python-chinese] python如何传引用参数

2006年09月30日 星期六 12:43

cat street gamcat在gmail.com
星期六 九月 30 12:43:00 HKT 2006

Èç¹ûÎÒÓÐÒ»¸ö´ó½á¹¹st = [...]Ïë´«¸øfun (),ÓÐûÓÐÒýÓõķ½Ê½,²»ÒªÖµ´«µÄ.
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20060930/9f436289/attachment.html 

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

2006年09月30日 星期六 12:45

Eric CHAO lionchao在gmail.com
星期六 九月 30 12:45:33 HKT 2006

默认就是传引用的

如果传值需要clone一下 比如my_list[:]

On 9/30/06, cat street <gamcat at gmail.com> wrote:
>
> 如果我有一个大结构st = [...]想传给fun (),有没有引用的方式,不要值传的.
> _______________________________________________
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20060930/a1088f2e/attachment.html 

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

2006年09月30日 星期六 12:52

cat street gamcat在gmail.com
星期六 九月 30 12:52:45 HKT 2006

£+§Ó¯wÐJâp!À:X¨ÈZ¢	šŠW(™Éhé²–+-:ßOôéÆ­²ÚÞzؙƭ‚f¢•Ê&º-zË

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

2006年09月30日 星期六 13:04

cat street gamcat在gmail.com
星期六 九月 30 13:04:52 HKT 2006

²»Ðа¡,Èç¹ûÕâÑù...
def fun (c):
    c = c + 1

a = 1
fun (a)

½á¹ûa»¹ÊÇ1?
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20060930/02f3cf5c/attachment.html 

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

2006年09月30日 星期六 13:40

fdcn fdcn64在gmail.com
星期六 九月 30 13:40:52 HKT 2006

你这是传的基本数值,不是结构(对象)。

On 9/30/06, cat street <gamcat在gmail.com> wrote:
> 不行啊,如果这样...
> def fun (c):
>     c = c + 1
>
> a = 1
> fun (a)
>
> 结果a还是1?
>
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to
> python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to
> python-chinese-request在lists.python.cn
> Detail Info:
> http://python.cn/mailman/listinfo/python-chinese
>

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

2006年09月30日 星期六 14:05

cat street gamcat在gmail.com
星期六 九月 30 14:05:02 HKT 2006

Äǵ¥±äÁ¿Äܲ»ÄÜ´«ÒýÓÃ?

2006/9/30, fdcn <fdcn64在gmail.com>:
>
> ÄãÕâÊÇ´«µÄ»ù±¾ÊýÖµ£¬²»Êǽṹ£¨¶ÔÏ󣩡£
>
> On 9/30/06, cat street <gamcat在gmail.com> wrote:
> > ²»Ðа¡,Èç¹ûÕâÑù...
> > def fun (c):
> >     c = c + 1
> >
> > a = 1
> > fun (a)
> >
> > ½á¹ûa»¹ÊÇ1?
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese在lists.python.cn
> > Subscribe: send subscribe to
> > python-chinese-request在lists.python.cn
> > Unsubscribe: send unsubscribe to
> > python-chinese-request在lists.python.cn
> > Detail Info:
> > http://python.cn/mailman/listinfo/python-chinese
> >
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20060930/35aaf43b/attachment.html 

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

2006年09月30日 星期六 16:32

Eric CHAO lionchao在gmail.com
星期六 九月 30 16:32:11 HKT 2006

§+a¢}´§+a¢rZ½¨§µº(•æ§v‹›•ë-®)à›+-®Øb²+²Úâž	²²ÚæÊËkù©Ý²‰ž¶§‚Øb²+²Úâž-®)à›+-­×Ÿ~éÜqϵkW

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

2006年09月30日 星期六 16:35

鳄鱼 crocodile.liu在163.com
星期六 九月 30 16:35:28 HKT 2006

tuple应该也是不可修改的

Eric CHAO 写道:
> python从2.0开始已经把所有的东西视为对象,python不像Java区分基本类型
> (int,boolean, double)和对象
>
> 所以在函数调用的时候全部是传引用的,
>
> 但是像string和数值对象是不可修改的,
>
> 比如my_str='this is a string'
>
> 当修改my_str的时候,
>
> my_str+='and something'
>
> 并不会修改原来的字符串'this is a string'
>
> 而是新建了一个string实例,然后让my_str指向它。
>
> def fun (c):
> c = c + 1
> a = 1
> fun (a)
>
> 当c=c+1的时候,c已经新建了一个实例,而对a没有影响
>
>
>
>
>
> On 9/30/06, *cat street* <gamcat在gmail.com gamcat在gmail.com> >
> wrote:
>
>     那单变量能不能传引用?
>
>     2006/9/30, fdcn <fdcn64在gmail.com fdcn64在gmail.com>>:
>
>         你这是传的基本数值,不是结构(对象)。
>
>         On 9/30/06, cat street < gamcat在gmail.com
>         gamcat在gmail.com> > wrote:
>         > 不行啊,如果这样...
>         > def fun (c):
>         > c = c + 1
>         >
>         > a = 1
>         > fun (a)
>         >
>         > 结果a还是1?
>         >
>         > _______________________________________________
>         > python-chinese
>         > Post: send python-chinese在lists.python.cn
>         python-chinese在lists.python.cn>
>         > Subscribe: send subscribe to
>         > python-chinese-request在lists.python.cn
>         python-chinese-request在lists.python.cn>
>         > Unsubscribe: send unsubscribe to
>         > python-chinese-request在lists.python.cn
>         python-chinese-request在lists.python.cn>
>         > Detail Info:
>         > http://python.cn/mailman/listinfo/python-chinese
>         >
>         _______________________________________________
>         python-chinese
>         Post: send python-chinese在lists.python.cn
>         python-chinese在lists.python.cn>
>         Subscribe: send subscribe to
>         python-chinese-request在lists.python.cn
>         python-chinese-request在lists.python.cn>
>         Unsubscribe: send unsubscribe to
>         python-chinese-request在lists.python.cn
>         python-chinese-request在lists.python.cn>
>         Detail Info: http://python.cn/mailman/listinfo/python-chinese
>         <http://python.cn/mailman/listinfo/python-chinese>
>
>
>
>     _______________________________________________
>     python-chinese
>     Post: send python-chinese在lists.python.cn
>     python-chinese在lists.python.cn>
>     Subscribe: send subscribe to
>     python-chinese-request在lists.python.cn
>     python-chinese-request在lists.python.cn>
>     Unsubscribe: send unsubscribe to
>     python-chinese-request在lists.python.cn
>     python-chinese-request在lists.python.cn>
>     Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese



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

2006年09月30日 星期六 18:00

Hong Yuan hongyuan在homemaster.cn
星期六 九月 30 18:00:28 HKT 2006

没有必要一定要在Python中找到C的对应功能,各种语言的编程风格和习惯不同。

Python中实现例子中想要实现的功能可以使用:

def fun (c):
c = c + 1
a = 1
a = fun (a)

明确地标明赋值有助于对程序的理解,不会因为调用某些函数产生副作用更改了变
量自己还不知道。个人认为这是Python的优点之一。

Eric CHAO 写道:
> python从2.0开始已经把所有的东西视为对象,python不像Java区分基本类型
> (int,boolean, double)和对象
>
> 所以在函数调用的时候全部是传引用的,
>
> 但是像string和数值对象是不可修改的,
>
> 比如my_str='this is a string'
>
> 当修改my_str的时候,
>
> my_str+='and something'
>
> 并不会修改原来的字符串'this is a string'
>
> 而是新建了一个string实例,然后让my_str指向它。
>
> def fun (c):
> c = c + 1
> a = 1
> fun (a)
>
> 当c=c+1的时候,c已经新建了一个实例,而对a没有影响
>
>
>
>
>
> On 9/30/06, *cat street* <gamcat在gmail.com gamcat在gmail.com> >
> wrote:
>
>     那单变量能不能传引用?
>
>     2006/9/30, fdcn <fdcn64在gmail.com fdcn64在gmail.com>>:
>
>         你这是传的基本数值,不是结构(对象)。
>
>         On 9/30/06, cat street < gamcat在gmail.com
>         gamcat在gmail.com> > wrote:
>         > 不行啊,如果这样...
>         > def fun (c):
>         > c = c + 1
>         >
>         > a = 1
>         > fun (a)
>         >
>         > 结果a还是1?
>         >
>         > _______________________________________________
>         > python-chinese
>         > Post: send python-chinese在lists.python.cn
>         python-chinese在lists.python.cn>
>         > Subscribe: send subscribe to
>         > python-chinese-request在lists.python.cn
>         python-chinese-request在lists.python.cn>
>         > Unsubscribe: send unsubscribe to
>         > python-chinese-request在lists.python.cn
>         python-chinese-request在lists.python.cn>
>         > Detail Info:
>         > http://python.cn/mailman/listinfo/python-chinese
>         >
>         _______________________________________________
>         python-chinese
>         Post: send python-chinese在lists.python.cn
>         python-chinese在lists.python.cn>
>         Subscribe: send subscribe to
>         python-chinese-request在lists.python.cn
>         python-chinese-request在lists.python.cn>
>         Unsubscribe: send unsubscribe to
>         python-chinese-request在lists.python.cn
>         python-chinese-request在lists.python.cn>
>         Detail Info: http://python.cn/mailman/listinfo/python-chinese
>         <http://python.cn/mailman/listinfo/python-chinese>
>
>
>
>     _______________________________________________
>     python-chinese
>     Post: send python-chinese在lists.python.cn
>     python-chinese在lists.python.cn>
>     Subscribe: send subscribe to
>     python-chinese-request在lists.python.cn
>     python-chinese-request在lists.python.cn>
>     Unsubscribe: send unsubscribe to
>     python-chinese-request在lists.python.cn
>     python-chinese-request在lists.python.cn>
>     Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese


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

2006年09月30日 星期六 20:26

cat street gamcat在gmail.com
星期六 九月 30 20:26:45 HKT 2006

ÄÇÓÐûÓÐÓú¯Êý¸Ä±äʵ²ÎµÄ°ì·¨ÄØ?
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20060930/2d56ae38/attachment.htm 

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

2006年09月30日 星期六 21:17

fdcn fdcn64在gmail.com
星期六 九月 30 21:17:06 HKT 2006

首先我觉得术语的定义不太精确,在我的理解中,python和java一样,都是值传递,对,是"值"而不是引用,只不过这个值是对象"引用"这个值,如果真的是引用传递,变量的函数体内变化后反而应当也体现在函数体外了。只不过由于python没有基本数值,造成了困惑。

具体地说
def f(a,b):
    a=a+1
    b=b+[3]
a=5
b=[2,3]
f(a,b)
如果执行后a和b的值都不变,这就叫值传递
执行后a=6 b=[2,3,3],这才叫引用传递

显然python是值传递的。当然对一个对象内容的更改是保持的,因为传递这个引用值当然指向该对象,这并不能改变参数是值传递这一事实。
def f(a):
	a.append(6)
a=[1,2]
f(a)
执行后,a=[1,2,6]

cat street 要求"那有没有用函数改变实参的办法呢?
",我认为不好做到,在python中,没有必要做到这一点吧?因为python不是C。想对几个变量更改,可以用赋值,很方便,也比引用参数宜于理解。
def f(a,b):
    a=a+1
    b=b+[3]
    return (a,b)
a=1
b=[1,2]
a,b=f(a,b) #返回2和[1,2,3]
你不觉得这样更清晰宜读吗?

On 9/30/06, cat street <gamcat在gmail.com> wrote:
> 那有没有用函数改变实参的办法呢?
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to
> python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to
> python-chinese-request在lists.python.cn
> Detail Info:
> http://python.cn/mailman/listinfo/python-chinese
>

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

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

    你的回复:

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

    Zeuux © 2025

    京ICP备05028076号