Mat*_*kin 48 python python-3.x
由于Django还不支持Python 3.x,我使用的是Python 2.7.但是,我想继续并尽可能熟悉新的Python 3.x语法.这引出了我的问题:
我知道跑步python -3
会
警告2to3无法轻易解决的Python 3.x不兼容问题.
但是,我仍然对使用Python 2.7时习惯Python 3.x语法感兴趣.
例如,似乎我应该使用以下导入到我的代码:
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import division
from __future__ import absolute_import
Run Code Online (Sandbox Code Playgroud)
从__future__ import
Python 3.0开始,上述四个语句是必需的,但在Python 2.7.3的文档27.11中描述的2.7中不需要.未来声明定义
还有什么?
Jos*_*hua 10
将下面的代码放到一个py3k.py
模块并导入这样的:
from py3k import *
.你需要把它放在每个文件中,但如果没有人再使用Python 2.x你甚至可以把它放在那里,或者你可以用空格搜索并替换导入行然后删除文件.
try:
from future_builtins import *
except ImportError:
pass
try:
input = raw_input
range = xrange
except NameError:
pass
Run Code Online (Sandbox Code Playgroud)
这就是我的模板文件的外观:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""
from __future__ import division, absolute_import, \
print_function, unicode_literals
from utils.py3k import * # @UnusedWildImport
#
Run Code Online (Sandbox Code Playgroud)
您还需要使用新的异常语法,即不再需要
try:
raise Exception, "Message"
except Exception, e:
pass
Run Code Online (Sandbox Code Playgroud)
相反,你应该这样做:
try:
raise Exception("Message")
except Exception as e:
pass
Run Code Online (Sandbox Code Playgroud)
还要确保在所有二进制字符串前加上ab,即:
这是一个二进制字符串'
有关此主题的更完整的介绍,请参阅http://python3porting.com/noconv.html
try:
input = raw_input
range = xrange
except NameError:
pass
Run Code Online (Sandbox Code Playgroud)
有两个让人想起......
避免使用range()
and zip()
,而使用xrange()
anditertools.izip()
代替。
归档时间: |
|
查看次数: |
12093 次 |
最近记录: |