1)print SyntaxError: invalid syntax错误的问题
>>>
print
"
Hello World!
"
File " <stdin> " , line 1
print " Hello World! "
^
SyntaxError: invalid syntax
>>>
File " <stdin> " , line 1
print " Hello World! "
^
SyntaxError: invalid syntax
>>>
出错原因:python v3.0以后的版本中将v2.x版本的print 改为了print. 所以此处调用print("Hello World!")则可成功。
2)print重定向
python2.0开始使用>>来重定向输出,方法如下:
1
2
3
|
f
=
open
(
"D:/python/1.txt"
,
"w"
)
print
>> f,
"Hello World"
f.close()
|
python3.0以后的版本 通过以下方式实现重定向到文件:
1
2
3
|
f
=
open
(
"D:/python/1.txt"
,
"w"
)
print
(
"Hello World"
,
file
=
f)
f.close()
|
注:实现多行方式:
1
2
3
4
5
6
7
|
>>> f
=
open
(
"D:/python/1.txt"
,
"w"
)
>>>
print
(
"""hello World
... aaaaa
... bbbbb
... ccccc
... """
,
file
=
f)
>>> f.close()
|
print语句不一样,在3.0里print是个函数
比如
老版: print "The answer is", 2*2
3.0版: print("The answer is", 2*2)
老版: print x, # 不换行
3.0版: print(x, end=" ") # 行终结符是空格
老版: print # 输出一个空行
3.0版: print()
老版: print >>sys.stderr, "fatal error" # 输出重定向
3.0版: print("fatal error", file=sys.stderr)
老版: print (x, y) # 输出 repr((x, y))
3.0版: print((x, y))
还可以定制print时多项之间的分隔符
比如
>>> print("There are <", 2**32, "> possibilities!", sep="#")
There are <#4294967296#> possibilities!
Views 和 Iterators 替换Lists
整数:
Text vs. Data 替换 Unicode vs. 8bit
比如
老版: print "The answer is", 2*2
3.0版: print("The answer is", 2*2)
老版: print x, # 不换行
3.0版: print(x, end=" ") # 行终结符是空格
老版: print # 输出一个空行
3.0版: print()
老版: print >>sys.stderr, "fatal error" # 输出重定向
3.0版: print("fatal error", file=sys.stderr)
老版: print (x, y) # 输出 repr((x, y))
3.0版: print((x, y))
还可以定制print时多项之间的分隔符
比如
>>> print("There are <", 2**32, "> possibilities!", sep="#")
There are <#4294967296#> possibilities!
Views 和 Iterators 替换Lists
- 有很多以前返回列表的函数,在新的3.0里不再返回列表,而是一个views。比如字典的 dict.keys(), dict.items(), dict.values()。而dict.iterkeys(), dict.iteritems() 和 dict.itervalues() 不再被支持。
- map() 和 filter() 也是返回迭代器(iterators)。如果你实在是需要一个列表可以做类型转换:list(map(...))
- range()的行为和xrange()一样
- zip()也返回的是迭代器
- 运算符<, <=, >=, >可能抛出TypeError的异常。1 < '', 0 > None, len <= len都不再可用,会抛出异常。
- builtin.sorted() 和 list.sort() 不再接收传入一个比较函数,而是传入一个key。
- cmp()函数还有,但是内建的__cmp__()方法不再支持。应该使用__lt__()来排序,还有__eq__(),__hash__()等等比较函数可用。
整数:
- long类型被改名为int。只有一种整数类型,就像原来的long。
- 1/2这样的情况在3.0里会返回一个浮点数,而不会像2.x里面返回整数。
- sys.maxint被删除,因为已经没有意义了。
- repr()不会再输出数字后的L,建议使用str()
- 八进制数不能用0720表示,而用0o720
Text vs. Data 替换 Unicode vs. 8bit
- python3.0使用文本(Text)和二进制数据(Data)来替换以前的unicode和8位字符串(8bit)的概念。所有的text都是unicode,但encoded一个unicode会被表示为二进制数据。混合text和data在3.0里会抛出异常。
- 不需要用u'...'在指定unicode文本,但是需要用b'...'来指定二进制的数据。
- 不能混合str和bytes类型,如果想这么做,需要明确的用str.encode()把str转换为bytes,或者用bytes.decode()转换bytes到str
- str和bytes都是不可变的。想使用可变的bytes可以用bytearray。
- 反斜杠(\)在原始字符串中将会被逐字解释。也就是说r'\u20ac'在python3.0中会是6个字符,但在python2.6中是euro。在python3.0中'\u20ac'才会是euro。
- basestring抽象类型被删除。
- 文件作为文本文件打开时,需要指定一个编码来转换bytes(磁盘)到text(内存)。二进制打开的文件始终使用bytes。
- 传递和返回的文件名都是unicode字符串。这个在特定的平台上可能有一些问题,因为一些平台会使用byte strings。
- 一些系统的api,比如os.environ和sys.argv,在系统编码错误的情况下也会出现问题,所以应该设置LANG这个环境变量。
- repr() 不会转换非ascii字符为\x3830这种形式,当然控制字符和非显示字符还是会被转换。比如\n。
- 缺省源代码编码为utf-8
- 非ascii码也可以作为标示符。
- StringIO和cStringIO没有了。但可以import io,并且针对文本和二进制数据分别使用io.StringIO和io.BytesIO。