listdir & Print 含中文时的疑问

Python 2.7
假如指定目录/tmp 下有一个文件名为“中文”的文件。

import sys,os

for a in os.listdir('/tmp'):
    print(a)
    print(a,type(a))

结果print(a)显示的是“中文”,
但是print(a,type(a))
显示的是
(‘\xd6\xd0\xce\xc4’, <type ‘str’>)
为什么?

Jason990420
最佳答案

Python 2.7 的 print 是语句, 而 Python 3.x 的 print 是函数.

所以在 Python 2.7 中, print 语句的括号不是函数的括号, 是表达式的括号, 或者是 tuple 的括号.

  1. print (a) 输出的是 str(a), 也就是 '中文'

    # Same in Python 2.7
    print (a)        # get str(a)
    print a          # get str(a)
  2. print (a, type(a)) 输出的是一个 tuple (a, type(a)), 格式为 repr((a, type(a))

    # Different in PYthon 2.7
    print (a, type(a))    # only one argument in tuple,will get repr((a, type(a)))
    print a, type(a)      # two arguements, will get str(a)+' '+repr(type(a))

str 的输出是给用户界面的, 而 repr 的输出通常是为了调试的, 所以其结果不同

3周前 评论
讨论数量: 2
Jason990420

Python 2.7 的 print 是语句, 而 Python 3.x 的 print 是函数.

所以在 Python 2.7 中, print 语句的括号不是函数的括号, 是表达式的括号, 或者是 tuple 的括号.

  1. print (a) 输出的是 str(a), 也就是 '中文'

    # Same in Python 2.7
    print (a)        # get str(a)
    print a          # get str(a)
  2. print (a, type(a)) 输出的是一个 tuple (a, type(a)), 格式为 repr((a, type(a))

    # Different in PYthon 2.7
    print (a, type(a))    # only one argument in tuple,will get repr((a, type(a)))
    print a, type(a)      # two arguements, will get str(a)+' '+repr(type(a))

str 的输出是给用户界面的, 而 repr 的输出通常是为了调试的, 所以其结果不同

3周前 评论

感谢解答!

3周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!