学习python FAQ

1)print SyntaxError: invalid syntax错误的问题

>>> print " Hello World! "
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()

3) python3.0中的一些新特性
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
  • 有很多以前返回列表的函数,在新的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。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值