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年前 评论