Python论坛  - 讨论区

标题:[python-chinese] print 函数中 %s %d 不能取消吗?

2006年06月15日 星期四 12:43

yi feng yi2369 at gmail.com
Thu Jun 15 12:43:14 HKT 2006

从开始接触 python 我就认为这是一门崇尚简洁的语言。
在学习到print 函数的时候有一些疑惑,比如:
name="tom"
age=20
print "%s is %d old years" % (name, age)

如果改写一下print ,如下就会出错:
print "%d is %s old years" % (name, age)

在我们程序员的角度考虑的话,name是字符串类型要按字符串类型打印,age是数值类型要按数值类型打印,如此考虑的话,哪里用%s,哪里用%d就是明确的了。

但是对于解释器来说,谁是字符串,谁是数值,它是最清楚的了,如何还要程序员来指定哪?

这个问题难道仅仅是因为python 沿用了 c 的print吗?

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

2006年06月15日 星期四 13:06

xxmplus xxmplus at gmail.com
Thu Jun 15 13:06:50 HKT 2006

print name + " is " + str(age)
也行

On 6/15/06, yi feng <yi2369 at gmail.com> wrote:
> 从开始接触 python 我就认为这是一门崇尚简洁的语言。
> 在学习到print 函数的时候有一些疑惑,比如:
> name="tom"
> age=20
> print "%s is %d old years" % (name, age)
>
> 如果改写一下print ,如下就会出错:
> print "%d is %s old years" % (name, age)
>
> 在我们程序员的角度考虑的话,name是字符串类型要按字符串类型打印,age是数值类型要按数值类型打印,如此考虑的话,哪里用%s,哪里用%d就是明确的了。
>
> 但是对于解释器来说,谁是字符串,谁是数值,它是最清楚的了,如何还要程序员来指定哪?
>
> 这个问题难道仅仅是因为python 沿用了 c 的print吗?
>
> _______________________________________________
> 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年06月15日 星期四 13:31

limodou limodou at gmail.com
Thu Jun 15 13:31:20 HKT 2006

On 6/15/06, yi feng <yi2369 at gmail.com> wrote:
> 从开始接触 python 我就认为这是一门崇尚简洁的语言。
> 在学习到print 函数的时候有一些疑惑,比如:
> name="tom"
> age=20
> print "%s is %d old years" % (name, age)
>
> 如果改写一下print ,如下就会出错:
> print "%d is %s old years" % (name, age)
>
> 在我们程序员的角度考虑的话,name是字符串类型要按字符串类型打印,age是数值类型要按数值类型打印,如此考虑的话,哪里用%s,哪里用%d就是明确的了。
>
> 但是对于解释器来说,谁是字符串,谁是数值,它是最清楚的了,如何还要程序员来指定哪?
>
> 这个问题难道仅仅是因为python 沿用了 c 的print吗?
>
因为字符串与数值的表示是不同的。字符串是一个个的ascii码,而数值则是16进制表示。而且数值可以表示为10进制和8进制,16进制等,是不一样的,还有象科学计数等,因此如果没有格式,如何进行控制。

-- 
I like python!
My Blog: http://www.donews.net/limodou
My Django Site: http://www.djangocn.org
NewEdit Maillist: http://groups.google.com/group/NewEdit

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

2006年06月15日 星期四 13:37

helium helium.sun at gmail.com
Thu Jun 15 13:37:31 HKT 2006

确切的说,python中并不怎么看重类型,重要的是接口
>>> class foo:
...     def __int__(self):
...         return 99
...     def __str__(self):
...         return 'abc'
...
>>> f=foo()
>>> '%s, %d' % (f, f)
'abc, 99'
>>> '%s' % 45
'45'
>>>


>>> class ix(int):
...     def __str__(self):
...         return hex(self)
...
>>> i=ix(100)
>>> i
100
>>> class sl(str):
...     def __int__(self):
...         return len(self)
...
>>> s=sl('asdfasdf')
>>> s
'asdfasdf'
>>> '%s, %d' % (i, s)
'0x64, 8'

2006/6/15, yi feng <yi2369 at gmail.com>:
>
> 从开始接触 python 我就认为这是一门崇尚简洁的语言。
> 在学习到print 函数的时候有一些疑惑,比如:
> name="tom"
> age=20
> print "%s is %d old years" % (name, age)
>
> 如果改写一下print ,如下就会出错:
> print "%d is %s old years" % (name, age)
>
>
> 在我们程序员的角度考虑的话,name是字符串类型要按字符串类型打印,age是数值类型要按数值类型打印,如此考虑的话,哪里用%s,哪里用%d就是明确的了。
>
> 但是对于解释器来说,谁是字符串,谁是数值,它是最清楚的了,如何还要程序员来指定哪?
>
> 这个问题难道仅仅是因为python 沿用了 c 的print吗?
>
> _______________________________________________
> 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://lists.exoweb.net/pipermail/python-chinese/attachments/20060615/f663587f/attachment.htm

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

2006年06月15日 星期四 14:43

yi huang yi.codeplayer at gmail.com
Thu Jun 15 14:43:16 HKT 2006

这么写多好看 :
print name,'is',age,'old years'

On 6/15/06, yi feng <yi2369 at gmail.com> wrote:
>
> 从开始接触 python 我就认为这是一门崇尚简洁的语言。
> 在学习到print 函数的时候有一些疑惑,比如:
> name="tom"
> age=20
> print "%s is %d old years" % (name, age)
>
> 如果改写一下print ,如下就会出错:
> print "%d is %s old years" % (name, age)
>
>
> 在我们程序员的角度考虑的话,name是字符串类型要按字符串类型打印,age是数值类型要按数值类型打印,如此考虑的话,哪里用%s,哪里用%d就是明确的了。
>
> 但是对于解释器来说,谁是字符串,谁是数值,它是最清楚的了,如何还要程序员来指定哪?
>
> 这个问题难道仅仅是因为python 沿用了 c 的print吗?
>
> _______________________________________________
> 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
>
>


-- 
考研还是工作  哎... !
http://codeplayer.blogbus.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060615/3f3ef215/attachment.htm

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

2006年06月15日 星期四 15:12

swordsp sparas2006 at gmail.com
Thu Jun 15 15:12:41 HKT 2006

用格式化字符串或者模板的方法感觉更灵活一些,方便把一些字符串常量和格式信息集中配置。

On 6/15/06, yi huang <yi.codeplayer at gmail.com> wrote:
>
> 这么写多好看 :
> print name,'is',age,'old years'
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060615/9c25f512/attachment.htm

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

2006年06月15日 星期四 15:48

jacob jacob at exoweb.net
Thu Jun 15 15:48:36 HKT 2006

yi feng wrote:

> 从开始接触 python 我就认为这是一门崇尚简洁的语言。
> 在学习到print 函数的时候有一些疑惑,比如:
> name="tom"
> age=20
> print "%s is %d old years" % (name, age)
>
> 如果改写一下print ,如下就会出错:
> print "%d is %s old years" % (name, age)
>
> 在我们程序员的角度考虑的话,name是字符串类型要按字符串类型打印,age是
> 数值类型要按数值类型打印,如此考虑的话,哪里用%s,哪里用%d就是明确的了。
>
> 但是对于解释器来说,谁是字符串,谁是数值,它是最清楚的了,如何还要程序
> 员来指定哪?
>
> 这个问题难道仅仅是因为python 沿用了 c 的print吗?

看看这些例子, 自己揣摩一下 :)
>>> "%1.3d" % 5
'005'
>>> "%3d" % 5
'  5'
>>> "%s" % 5
'5'

class A:
    def __str__(self):
        return "str(me)"
    def __repr__(self):
        return "repr(me)"
a = A()
>>> "I am : %s" % a
"I am : str(me)"


另外,
1. print是语句, 不是函数
2. print后面那部分不是print语句的一部分, 而是一个表达式, 可以脱离print使
用.例如,
    a_str = "hello %s" % "world"

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

2006年06月15日 星期四 16:30

swordsp sparas2006 at gmail.com
Thu Jun 15 16:30:28 HKT 2006

On 6/15/06, jacob <jacob at exoweb.net> wrote:
>
> yi feng wrote:
>
> 另外,
> 1. print是语句, 不是函数
> 2. print后面那部分不是print语句的一部分, 而是一个表达式, 可以脱离print使
> 用.例如,
>     a_str = "hello %s" % "world"


更确切的说,print后面用逗号分隔的每个部分都是一个表达式,print相当于调用每个表达式结果的__repr__方法然后再用空格连接起来。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060615/78829146/attachment.html

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

2006年06月15日 星期四 17:40

魏忠 weizhong2004 at gmail.com
Thu Jun 15 17:40:43 HKT 2006

>
>
> 更确切的说,print后面用逗号分隔的每个部分都是一个表达式,print相当于调用每个表达式结果的__repr__方法然后再用空格连接起来。
>

print 使用的 各个对象的 __str__ 方法



-- 
开飞机的舒克
http://www.lvye.org/shuke
msn:weizhong at netease.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060615/8028cbb7/attachment.htm

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

2006年06月15日 星期四 17:43

Steven Wang (:) zdwang at xinces.com
Thu Jun 15 17:43:06 HKT 2006

各位好!

有谁知道如何控制命令行控制台的输出,例如打印忙信息(就是一个不断转动的“|“);清屏,等等。

谢谢。

print "Hello World" # 直接输出,有回行符
print "Hello",   # 无回行符输出
print "World"

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060615/1e646195/attachment.html

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

2006年06月15日 星期四 17:50

员旭鹏 recordus at gmail.com
Thu Jun 15 17:50:15 HKT 2006

nod。

>>> class C:
...     def __str__(self):
...             return "This is __str__"
...     def __repr__(self):
...             return "This is __repr__"
...
>>> c = C()
>>> print c
This is __str__
>>>


在06-6-15,魏忠 <weizhong2004 at gmail.com> 写道:
>
>
> 更确切的说,print后面用逗号分隔的每个部分都是一个表达式,print相当于调用每个表达式结果的__repr__方法然后再用空格连接起来。
> >
> >
> print 使用的 各个对象的 __str__ 方法
>

-- 
I like Python & Linux.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060615/36afd27f/attachment.htm

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

2006年06月15日 星期四 18:15

swordsp sparas2006 at gmail.com
Thu Jun 15 18:15:19 HKT 2006

记错了...多谢纠正。

On 6/15/06, 员旭鹏 <recordus at gmail.com> wrote:
>
> nod。
>
> >>> class C:
> ...     def __str__(self):
> ...             return "This is __str__"
> ...     def __repr__(self):
> ...             return "This is __repr__"
> ...
> >>> c = C()
> >>> print c
> This is __str__
> >>>
>
>
> 在06-6-15,魏忠 <weizhong2004 at gmail.com> 写道:
>
> >
> > 更确切的说,print后面用逗号分隔的每个部分都是一个表达式,print相当于调用每个表达式结果的__repr__方法然后再用空格连接起来。
> > >
> > >
> > print 使用的 各个对象的 __str__ 方法
> >
>
> --
> I like Python & Linux.
>
> _______________________________________________
> 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://lists.exoweb.net/pipermail/python-chinese/attachments/20060615/00ebbc3b/attachment.htm

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

2006年06月15日 星期四 20:01

yi feng yi2369 at gmail.com
Thu Jun 15 20:01:02 HKT 2006

多谢各位的解答!

我厘清了这些概念,请大家指点:
1.print 是个命令语句,不是函数;
2."%s" % "name";"%d" % 10 都是表达式;
3.因为表达式与print 命令是相对独立的,并且有自己的含义,所以%s 、%d 为了print 而统一是不可能的。

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

2006年06月15日 星期四 21:53

S.Z. stone.zh at gmail.com
Thu Jun 15 21:53:52 HKT 2006

import time
import sys

for i in range(10):
    sys.stdout.write("|")
    time.sleep(0.3)
    sys.stdout.write(chr(13))
    sys.stdout.write("\\")
    time.sleep(0.3)
    sys.stdout.write(chr(13))
    sys.stdout.write("-")
    time.sleep(0.3)
    sys.stdout.write(chr(13))
    sys.stdout.write("/")
    time.sleep(0.3)
    sys.stdout.write(chr(13))

# end


Best regards,
Alec Jang


Steven Wang (:) wrote:
> 
> 各位好!
>  
> *有谁知道如何控制命令行控制台的输出,例如打印忙信息(就是一个不断转动的“| 
> “);清屏,等等。*
> * * 
> * 谢谢。 *
> * * 
> print "Hello World" # 直接输出,有回行符
> print "Hello",   # 无回行符输出
> print "World"
>  
>  
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> 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年06月16日 星期五 10:37

Aiyi recordus at gmail.com
Fri Jun 16 10:37:53 HKT 2006

在06-6-15,Steven Wang (:) <zdwang at xinces.com> 写道:
>
>  各位好!
>
> *有谁知道如何控制命令行控制台的输出,例如打印忙信息(就是一个不断转动的"|");清屏,等等。*
> **
>

*import* time
*import* sys

chars = "*|/-**\\*"

*for* i *in* xrange(40):
    sys.stdout.write(chars[i%4])
    sys.stdout.flush()
    time.sleep(0.1)
    sys.stdout.write("*\b*")

-- 
I like Python & Linux.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060616/ab30c5b1/attachment.html

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

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

    你的回复:

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

    Zeuux © 2025

    京ICP备05028076号