Python论坛  - 讨论区

标题:[python-chinese] 请教:在python中要实现类似define的功能怎么办?

2006年12月27日 星期三 11:24

郑彬 bnuzhengbin在163.com
星期三 十二月 27 11:24:43 HKT 2006

python-chinese,您好!
	大家好,刚接触python几天
	请教各位高手一个小小问题:
	在python中如何实现类似c中的const或java中的final,即变量赋值之后不允许改变。
	在python中要实现类似define的功能怎么办?

	谢谢
         phenix 
        bnuzhengbin在163.com
          2006-12-27


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

2006年12月27日 星期三 11:33

shhgs shhgs.efhilt在gmail.com
星期三 十二月 27 11:33:49 HKT 2006

没有办法。

On 12/26/06, 郑彬 <bnuzhengbin在163.com> wrote:
> python-chinese,您好!
>         大家好,刚接触python几天
>         请教各位高手一个小小问题:
>         在python中如何实现类似c中的const或java中的final,即变量赋值之后不允许改变。
>         在python中要实现类似define的功能怎么办?
>
>         谢谢
>   phenix
> bnuzhengbin在163.com
> 2006-12-27
>
> _______________________________________________
> 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年12月27日 星期三 11:41

大熊 bearsprite在gmail.com
星期三 十二月 27 11:41:20 HKT 2006

python世界里万物皆变

2006/12/27, 郑彬 <bnuzhengbin在163.com>:
>
> python-chinese,您好!
>         大家好,刚接触python几天
>         请教各位高手一个小小问题:
>         在python中如何实现类似c中的const或java中的final,即变量赋值之后不允许改变。
>         在python中要实现类似define的功能怎么办?
>
>         谢谢
>   phenix
> bnuzhengbin在163.com
> 2006-12-27
>
> _______________________________________________
> 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/20061227/47472a16/attachment.html 

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

2006年12月27日 星期三 11:43

limodou limodou在gmail.com
星期三 十二月 27 11:43:48 HKT 2006

On 12/27/06, 郑彬 <bnuzhengbin在163.com> wrote:
> python-chinese,您好!
>         大家好,刚接触python几天
>         请教各位高手一个小小问题:
>         在python中如何实现类似c中的const或java中的final,即变量赋值之后不允许改变。
>         在python中要实现类似define的功能怎么办?

在python的new style class中,可以使用property:

class A(object):   #很重要
    def get_a(self):
        return 'a'
    a = property(get_a)

a = A()
print a.a
a.a = 'b'

结果是:

a
Traceback (most recent call last):
  File "D:\project\test\a.py", line 8, in ?
    a.a = 'b'
AttributeError: can't set attribute

-- 
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年12月27日 星期三 11:44

limodou limodou在gmail.com
星期三 十二月 27 11:44:14 HKT 2006

On 12/27/06, limodou <limodou在gmail.com> wrote:
> On 12/27/06, 郑彬 <bnuzhengbin在163.com> wrote:
> > python-chinese,您好!
> >         大家好,刚接触python几天
> >         请教各位高手一个小小问题:
> >         在python中如何实现类似c中的const或java中的final,即变量赋值之后不允许改变。
> >         在python中要实现类似define的功能怎么办?
>
> 在python的new style class中,可以使用property:
>
> class A(object):   #很重要
>     def get_a(self):
>         return 'a'
>     a = property(get_a)
>
> a = A()
> print a.a
> a.a = 'b'
>
> 结果是:
>
> a
> Traceback (most recent call last):
>   File "D:\project\test\a.py", line 8, in ?
>     a.a = 'b'
> AttributeError: can't set attribute
>

这种方法只对类有效。

-- 
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年12月27日 星期三 11:51

shhgs shhgs.efhilt在gmail.com
星期三 十二月 27 11:51:02 HKT 2006

limodou的说法开拓思路。

你可以把它的__setattr__方法给改写了,这样就能做到类似C# readonly 和 const 的效果了。

如果再用把力,加上meta programming,就可以复用了。

On 12/26/06, limodou <limodou在gmail.com> wrote:
> On 12/27/06, limodou <limodou在gmail.com> wrote:
> > On 12/27/06, 郑彬 <bnuzhengbin在163.com> wrote:
> > > python-chinese,您好!
> > >         大家好,刚接触python几天
> > >         请教各位高手一个小小问题:
> > >         在python中如何实现类似c中的const或java中的final,即变量赋值之后不允许改变。
> > >         在python中要实现类似define的功能怎么办?
> >
> > 在python的new style class中,可以使用property:
> >
> > class A(object):   #很重要
> >     def get_a(self):
> >         return 'a'
> >     a = property(get_a)
> >
> > a = A()
> > print a.a
> > a.a = 'b'
> >
> > 结果是:
> >
> > a
> > Traceback (most recent call last):
> >   File "D:\project\test\a.py", line 8, in ?
> >     a.a = 'b'
> > AttributeError: can't set attribute
> >
>
> 这种方法只对类有效。
>
> --
> I like python!
> UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
> My Blog: http://www.donews.net/limodou
> _______________________________________________
> 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年12月27日 星期三 11:51

Hope lanyig在gmail.com
星期三 十二月 27 11:51:44 HKT 2006

数据也能当成类

2006/12/27, limodou <limodou在gmail.com>:
>
> On 12/27/06, limodou <limodou在gmail.com> wrote:
> > On 12/27/06, 郑彬 <bnuzhengbin在163.com> wrote:
> > > python-chinese,您好!
> > >         大家好,刚接触python几天
> > >         请教各位高手一个小小问题:
> > >         在python中如何实现类似c中的const或java中的final,即变量赋值之后不允许改变。
> > >         在python中要实现类似define的功能怎么办?
> >
> > 在python的new style class中,可以使用property:
> >
> > class A(object):   #很重要
> >     def get_a(self):
> >         return 'a'
> >     a = property(get_a)
> >
> > a = A()
> > print a.a
> > a.a = 'b'
> >
> > 结果是:
> >
> > a
> > Traceback (most recent call last):
> >   File "D:\project\test\a.py", line 8, in ?
> >     a.a = 'b'
> > AttributeError: can't set attribute
> >
>
> 这种方法只对类有效。
>
> --
> I like python!
> UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
> My Blog: http://www.donews.net/limodou
> _______________________________________________
> 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/20061227/295e8e39/attachment-0001.htm 

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

2006年12月27日 星期三 11:57

shhgs shhgs.efhilt在gmail.com
星期三 十二月 27 11:57:08 HKT 2006

limodou的这个办法好,连__setattr__都不用改了。

On 12/26/06, shhgs <shhgs.efhilt在gmail.com> wrote:
> limodou的说法开拓思路。
>
> 你可以把它的__setattr__方法给改写了,这样就能做到类似C# readonly 和 const 的效果了。
>
> 如果再用把力,加上meta programming,就可以复用了。
>
> On 12/26/06, limodou <limodou在gmail.com> wrote:
> > On 12/27/06, limodou <limodou在gmail.com> wrote:
> > > On 12/27/06, 郑彬 <bnuzhengbin在163.com> wrote:
> > > > python-chinese,您好!
> > > >         大家好,刚接触python几天
> > > >         请教各位高手一个小小问题:
> > > >         在python中如何实现类似c中的const或java中的final,即变量赋值之后不允许改变。
> > > >         在python中要实现类似define的功能怎么办?
> > >
> > > 在python的new style class中,可以使用property:
> > >
> > > class A(object):   #很重要
> > >     def get_a(self):
> > >         return 'a'
> > >     a = property(get_a)
> > >
> > > a = A()
> > > print a.a
> > > a.a = 'b'
> > >
> > > 结果是:
> > >
> > > a
> > > Traceback (most recent call last):
> > >   File "D:\project\test\a.py", line 8, in ?
> > >     a.a = 'b'
> > > AttributeError: can't set attribute
> > >
> >
> > 这种方法只对类有效。
> >
> > --
> > I like python!
> > UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
> > My Blog: http://www.donews.net/limodou
> > _______________________________________________
> > 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年12月27日 星期三 12:08

limodou limodou在gmail.com
星期三 十二月 27 12:08:56 HKT 2006

On 12/27/06, Hope <lanyig在gmail.com> wrote:
> 数据也能当成类
>
在python中一切皆对象,可不是一切皆是类。类可以说是模板,而数据是某个模板的实例。
而所谓常量在python中与C中是不同的。在C中一个值为常量,那么在编译时它将把所有使用这个常量的地方进行替换,而且这个常量一定是在编译时有确切的值的,不能是一个变量,所以你根本不可能给一个常量赋值,因为它根本不是一个变量名,而是一个确切的值。

但在python中,不存在这种编译效果。一个变量只是与一个值或变量绑定。而我所摸拟出来的结果其实只是不让一个类的属性被再次绑定而已,看上去是无法修改,但机制不同。只是象而已。

-- 
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年12月27日 星期三 16:40

rosetta rosettas在gmail.com
星期三 十二月 27 16:40:59 HKT 2006

On 12/27/06, limodou <limodou在gmail.com> wrote:

> 而所谓常量在python中与C中是不同的。在C中一个值为常量,那么在编译时它将把所有使用这个常量的地方进行替换,而且这个常量一定是在编译时有确切的值的,不能是一个变量,所以你根本不可能给一个常量赋值,因为它根本不是一个变量名,而是一个确切的值。
>

这个说法不对,你说的应该是宏,也就是#define出来的.编译的时候进行宏替换.
const定义的常量还是需要赋值的,也是有变量名的.当然说变量名不准确,应该是常量名.

-- 
with kind regards

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

2006年12月27日 星期三 16:50

Maconel maconel在21cn.com
星期三 十二月 27 16:50:18 HKT 2006

同意rosetta的说法,const会分配一个变量,只是从编译器的层次上加了限制,不允许改变它。
其实到网上搜下,就可以找到很多种更改const变量内容的方法(我没试过)。
做个简单实验:
	const int a = 10;
	const int b = 10;
	if (&a; == &b;)
		cout << "a = b" << endl;
	else
		cout << "a != b" << endl;
会得到结果"a != b"。
如果a和b是普通的数值的话,是不允许&a;这种用法的。就算可以得到它的地址,他们的地址也应该是相同的。

	

======= 2006-12-27 16:44:34 您在来信中写道:=======

>On 12/27/06, limodou <limodou在gmail.com> wrote:
>
>> 而所谓常量在python中与C中是不同的。在C中一个值为常量,那么在编译时它将把所有使用这个常量的地方进行替换,而且这个常量一定是在编译时有确切的值的,不能是一个变量,所以你根本不可能给一个常量赋值,因为它根本不是一个变量名,而是一个确切的值。
>>
>
>这个说法不对,你说的应该是宏,也就是#define出来的.编译的时候进行宏替换.
>const定义的常量还是需要赋值的,也是有变量名的.当然说变量名不准确,应该是常量名.
>
>-- 
>with kind regards
>_______________________________________________
>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

= = = = = = = = = = = = = = = = = = = =
			

        致
礼!
 
				 
        Maconel
        maconel在21cn.com
          2006-12-27


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

2006年12月27日 星期三 17:01

limodou limodou在gmail.com
星期三 十二月 27 17:01:44 HKT 2006

On 12/27/06, Maconel <maconel在21cn.com> wrote:
> 同意rosetta的说法,const会分配一个变量,只是从编译器的层次上加了限制,不允许改变它。
> 其实到网上搜下,就可以找到很多种更改const变量内容的方法(我没试过)。
> 做个简单实验:
>         const int a = 10;
>         const int b = 10;
>         if (&a; == &b;)
>                 cout << "a = b" << endl;
>         else
>                 cout << "a != b" << endl;
> 会得到结果"a != b"。
> 如果a和b是普通的数值的话,是不允许&a;这种用法的。就算可以得到它的地址,他们的地址也应该是相同的。
>
具体编译器如何做我也只是猜的,可能是有问题。不过这里主要不是说C是如何做的,而是python的机制不同,只能摸拟这种效果。

-- 
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年12月27日 星期三 17:10

Leo Jay python.leojay在gmail.com
星期三 十二月 27 17:10:41 HKT 2006

On 12/27/06, Maconel <maconel在21cn.com> wrote:
>
> ͬÒârosettaµÄ˵·¨£¬const»á·ÖÅäÒ»¸ö±äÁ¿£¬Ö»ÊÇ´Ó±àÒëÆ÷µÄ²ã´ÎÉϼÓÁËÏÞÖÆ£¬²»ÔÊÐí¸Ä±äËü¡£
> Æäʵµ½ÍøÉÏËÑÏ£¬¾Í¿ÉÒÔÕÒµ½ºÜ¶àÖÖ¸ü¸Äconst±äÁ¿ÄÚÈݵķ½·¨£¨ÎÒûÊÔ¹ý£©¡£
> ×ö¸ö¼òµ¥ÊµÑ飺
>         const int a = 10;
>         const int b = 10;
>         if (&a; == &b;)
>                 cout << "a = b" << endl;
>         else
>                 cout << "a != b" << endl;
> »áµÃµ½½á¹û"a != b"¡£
> Èç¹ûaºÍbÊÇÆÕͨµÄÊýÖµµÄ»°£¬ÊDz»ÔÊÐí&a;ÕâÖÖÓ÷¨µÄ¡£¾ÍËã¿ÉÒԵõ½ËüµÄµØÖ·£¬ËûÃǵĵØÖ·Ò²Ó¦¸ÃÊÇÏàͬµÄ¡£
>
>
²»Í¬ÒâÄãµÄ˵·¨£¬c++±ê×¼²¢Ã»Óй涨constµÄ¾ßÌåʵÏÖ·½·¨£¬constµÄ³£Á¿»á²»»á·ÖÅäÒ»¸öµØÖ·ÊDz»Ò»¶¨µÄ¡£
Ò»°ãÀ´Ëµ£¬µ±ÄãÓÐÈ¡µØÖ·Ö®ÀàµÄ²Ù×÷µÄʱºò£¬²Å»á¸øÕâ¸ö³£Á¿·ÖÅäÒ»¸öµØÖ·¡£µ«ÓõÄʱºò£¬»¹ÊǷŵÄÊÇÁ¢¼´ÊýµÄ¡£
±È·½Ëµ£¬
    const int a = 0;

    cout << &a; << endl;
    cout << a;
µÚÒ»¸ö&a;µÄµØ·½£¬¸øµÄÊÇaµÄµØÖ·£¬
µÚ¶þ¸öaµÄµØ·½£¬¸øµÄ¾ÍÊÇÁ¢¼´Êý0

¾ÍËãͨ¹ýijÖÖËùνµÄ·½·¨¸ÄÁËËùνµÄaµÄÖµ£¬µ«Ò²ÊDz»¶ÔµÄ¡£
ÒòΪaÖ±½Ó³öÏֵĵط½£¬¸øµÄ¶¼ÊÇÁ¢¼´Êý£¬ÊDz»¿ÉÄÜÄܸĵġ£


-- 
Best Regards,
Leo Jay
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20061227/6b2a1e4e/attachment.htm 

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

2006年12月27日 星期三 17:33

Maconel maconel在21cn.com
星期三 十二月 27 17:33:24 HKT 2006

实验了一下,结果如下:
struct S
{
	const int a;
	S(int v):a(v){}
};
union X
{
	const int* b;
	int* c;
};

int main(int argc, char* argv[])
{
	const int d = 10;
	S s(10);
	X x;
	x.b = &s.a;
	cout << s.a << endl;
	*x.c = 20;
	cout << s.a << endl;
	x.b = &d;
	cout << d << endl;
	*x.c = 20;
	cout << d << endl;
	return 0;
}
结果是:
10
20
10
10
也就是说,类内的const成员变量可以改,而const临时变量不能改。
而对于全局变量或者static变量,则运行时会非法访问。
可能跟const的分配位置有关系吧。

抱歉讨论了会c++,大家回到python的话题上来吧。

------------------				 
Maconel
2006-12-27

-------------------------------------------------------------
发件人:Leo Jay
发送日期:2006-12-27 17:14:30
收件人:python-chinese在lists.python.cn
抄送:
主题:Re: [python-chinese]请教:在python中要实现类似define的功能怎么办?

On 12/27/06, Maconel <maconel在21cn.com> wrote:
>
> 同意rosetta的说法,const会分配一个变量,只是从编译器的层次上加了限制,不允许改变它。
> 其实到网上搜下,就可以找到很多种更改const变量内容的方法(我没试过)。
> 做个简单实验:
>         const int a = 10;
>         const int b = 10;
>         if (&a; == &b;)
>                 cout << "a = b" << endl;
>         else
>                 cout << "a != b" << endl;
> 会得到结果"a != b"。
> 如果a和b是普通的数值的话,是不允许&a;这种用法的。就算可以得到它的地址,他们的地址也应该是相同的。
>
>
不同意你的说法,c++标准并没有规定const的具体实现方法,const的常量会不会分配一个地址是不一定的。
一般来说,当你有取地址之类的操作的时候,才会给这个常量分配一个地址。但用的时候,还是放的是立即数的。
比方说,
    const int a = 0;

    cout << &a; << endl;
    cout << a;
第一个&a;的地方,给的是a的地址,
第二个a的地方,给的就是立即数0

就算通过某种所谓的方法改了所谓的a的值,但也是不对的。
因为a直接出现的地方,给的都是立即数,是不可能能改的。


-- 
Best Regards,
Leo Jay
_______________________________________________
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年12月27日 星期三 17:40

yi huang yi.codeplayer在gmail.com
星期三 十二月 27 17:40:13 HKT 2006

On 12/27/06, Maconel <maconel at 21cn.com> wrote:
>
> 实验了一下,结果如下:
> struct S
> {
>         const int a;
>         S(int v):a(v){}
> };
> union X
> {
>         const int* b;
>         int* c;
> };
>
> int main(int argc, char* argv[])
> {
>         const int d = 10;
>         S s(10);
>         X x;
>         x.b = &s.a;
>         cout << s.a << endl;
>         *x.c = 20;
>         cout << s.a << endl;
>         x.b = &d;
>         cout << d << endl;
>         *x.c = 20;
>         cout << d << endl;
>         return 0;
> }
> 结果是:
> 10
> 20
> 10
> 10
> 也就是说,类内的const成员变量可以改,而const临时变量不能改。
> 而对于全局变量或者static变量,则运行时会非法访问。
> 可能跟const的分配位置有关系吧。
>
> 抱歉讨论了会c++,大家回到python的话题上来吧。
>
> ------------------
> Maconel
> 2006-12-27
>
> -------------------------------------------------------------
> 发件人:Leo Jay
> 发送日期:2006-12-27 17:14:30
> 收件人:python-chinese at lists.python.cn
> 抄送:
> 主题:Re: [python-chinese]请教:在python中要实现类似define的功能怎么办?
>
> On 12/27/06, Maconel <maconel at 21cn.com> wrote:
> >
> > 同意rosetta的说法,const会分配一个变量,只是从编译器的层次上加了限制,不允许改变它。
> > 其实到网上搜下,就可以找到很多种更改const变量内容的方法(我没试过)。
> > 做个简单实验:
> >         const int a = 10;
> >         const int b = 10;
> >         if (&a; == &b;)
> >                 cout << "a = b" << endl;
> >         else
> >                 cout << "a != b" << endl;
> > 会得到结果"a != b"。
> > 如果a和b是普通的数值的话,是不允许&a;这种用法的。就算可以得到它的地址,他们的地址也应该是相同的。
> >
> >
> 不同意你的说法,c++标准并没有规定const的具体实现方法,const的常量会不会分配一个地址是不一定的。
> 一般来说,当你有取地址之类的操作的时候,才会给这个常量分配一个地址。但用的时候,还是放的是立即数的。
> 比方说,
>     const int a = 0;
>
>     cout << &a; << endl;
>     cout << a;
> 第一个&a;的地方,给的是a的地址,
> 第二个a的地方,给的就是立即数0
>
> 就算通过某种所谓的方法改了所谓的a的值,但也是不对的。
> 因为a直接出现的地方,给的都是立即数,是不可能能改的。
>
>
> --
> Best Regards,
> Leo Jay
> _______________________________________________
> 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
> _______________________________________________
> 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


其实 c 里面用强制类型转换,又有什么东西不能改的呢。

-- 
http://codeplayer.blogspot.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20061227/1ef6ac41/attachment-0001.htm 

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

2006年12月27日 星期三 17:50

wkssy delux25在gmail.com
星期三 十二月 27 17:50:24 HKT 2006

µÚ¶þ¸öÕæÊÇÊÇÓÃÁ¢¼´Êýô£¿Ò»°ãÇé¿öÏ£¬Ïñprintf("%d", i)ÕâÑùµÄ»¹ÊÇÓõØÖ·¡£¡£ºê²Å»á±»±ä³ÉÁ¢¼´Êý¡£
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20061227/75ee213d/attachment.html 

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

2006年12月27日 星期三 20:19

3751 lwm3751在gmail.com
星期三 十二月 27 20:19:02 HKT 2006

这没什么好讨论的,像limodou说的,我们在python里面只能尽量模拟这种效果。python跟c/c++根本是完全不同的两种语言。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20061227/47d2c8cf/attachment.html 

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

2006年12月28日 星期四 09:46

IQDoctor huanghao.c在gmail.com
星期四 十二月 28 09:46:11 HKT 2006

类内的 CONST 修饰的成员, CONST 只起访问控制的作用, const 成员
仍然是动态存储的, 可不是能改么, 呵呵.

yi huang 写道:
> On 12/27/06, *Maconel* <maconel at 21cn.com maconel at 21cn.com>> 
> wrote:
>
>     实验了一下,结果如下:
>     struct S
>     {
>             const int a;
>             S(int v):a(v){}
>     };
>     union X
>     {
>             const int* b;
>             int* c;
>     };
>
>     int main(int argc, char* argv[])
>     {
>             const int d = 10;
>             S s(10);
>             X x;
>             x.b = &s.a;
>             cout << s.a << endl;
>             *x.c = 20;
>             cout << s.a << endl;
>             x.b = &d;
>             cout << d << endl;
>             *x.c = 20;
>             cout << d << endl;
>             return 0;
>     }
>     结果是:
>     10
>     20
>     10
>     10
>     也就是说,类内的const成员变量可以改,而const临时变量不能改。
>     而对于全局变量或者static变量,则运行时会非法访问。
>     可能跟const的分配位置有关系吧。
>
>     抱歉讨论了会c++,大家回到python的话题上来吧。
>
>     ------------------
>     Maconel
>     2006-12-27
>
>     -------------------------------------------------------------
>     发件人:Leo Jay
>     发送日期:2006-12-27 17:14:30
>     收件人: python-chinese at lists.python.cn
>     python-chinese at lists.python.cn>
>     抄送:
>     主题:Re: [python-chinese]请教:在python中要实现类似define的功能怎
>     么办?
>
>     On 12/27/06, Maconel <maconel at 21cn.com maconel at 21cn.com>>
>     wrote:
>     >
>     > 同意rosetta的说法,const会分配一个变量,只是从编译器的层次上加了
>     限制,不允许改变它。
>     > 其实到网上搜下,就可以找到很多种更改const变量内容的方法(我没试
>     过)。
>     > 做个简单实验:
>     >         const int a = 10;
>     >         const int b = 10;
>     >         if (&a; == &b;)
>     >                 cout << "a = b" << endl;
>     >         else
>     >                 cout << "a != b" << endl;
>     > 会得到结果"a != b"。
>     > 如果a和b是普通的数值的话,是不允许&a;这种用法的。就算可以得到它的
>     地址,他们的地址也应该是相同的。
>     >
>     >
>     不同意你的说法,c++标准并没有规定const的具体实现方法,const的常量
>     会不会分配一个地址是不一定的。
>     一般来说,当你有取地址之类的操作的时候,才会给这个常量分配一个地
>     址。但用的时候,还是放的是立即数的。
>     比方说,
>         const int a = 0;
>
>         cout << &a; << endl;
>         cout << a;
>     第一个&a;的地方,给的是a的地址,
>     第二个a的地方,给的就是立即数0
>
>     就算通过某种所谓的方法改了所谓的a的值,但也是不对的。
>     因为a直接出现的地方,给的都是立即数,是不可能能改的。
>
>
>     --
>     Best Regards,
>     Leo Jay
>     _______________________________________________
>     python-chinese
>     Post: send python-chinese at lists.python.cn
>     python-chinese at lists.python.cn>
>     Subscribe: send subscribe to
>     python-chinese-request at lists.python.cn
>     python-chinese-request at lists.python.cn>
>     Unsubscribe: send unsubscribe to  
>     python-chinese-request at lists.python.cn
>     python-chinese-request at lists.python.cn>
>     Detail Info: http://python.cn/mailman/listinfo/python-chinese
>     _______________________________________________
>     python-chinese
>     Post: send python-chinese at lists.python.cn
>     python-chinese at lists.python.cn>
>     Subscribe: send subscribe to
>     python-chinese-request at lists.python.cn
>     python-chinese-request at lists.python.cn>
>     Unsubscribe: send unsubscribe
>     to  python-chinese-request at lists.python.cn
>     python-chinese-request at lists.python.cn>
>     Detail Info: http://python.cn/mailman/listinfo/python-chinese
>     <http://python.cn/mailman/listinfo/python-chinese>
>
>
> 其实 c 里面用强制类型转换,又有什么东西不能改的呢。
>
> -- 
> http://codeplayer.blogspot.com/
> ------------------------------------------------------------------------
>
> _______________________________________________
> 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]

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

    你的回复:

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

    Zeuux © 2025

    京ICP备05028076号