我想问一下这个with_metaclass()调用在一个类的定义中意味着什么.
例如:
class Foo(with_metaclass(Cls1, Cls2)):
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用编写2/3兼容代码six,但我不知道如何super()以交叉兼容的方式调用.还有更好的方法,例如:
class MyClass(MyBase):
def __init__():
if six.PY3:
super().__init__()
else:
super(MyClass, self).__init__()
...
Run Code Online (Sandbox Code Playgroud) 我在type()调用时支持python2和python3时遇到问题.这证明了这个问题:
from __future__ import unicode_literals
name='FooClass'
type(name, (dict,), {})
Run Code Online (Sandbox Code Playgroud)
python3没问题,但在python2上:
Traceback (most recent call last):
File "test.py", line 6, in <module>
type(name, (dict,), {})
TypeError: type() argument 1 must be string, not unicode
Run Code Online (Sandbox Code Playgroud)
这与在Python 2.6中使用unicode_literals的Any gotchas有关吗?.在那个问题中,有人建议对一个字节串进行类型转换,所以天真地考虑使用six.b():
一个"假的"字节文字.数据应始终是正常的字符串文字.在Python 2中,b()返回一个8位字符串.在Python 3中,数据使用latin-1编码编码为字节.
所以它看起来像这样:
from __future__ import unicode_literals
import six
name='FooClass'
type(six.b(name), (dict,), {})
Run Code Online (Sandbox Code Playgroud)
但它在python2和python3上都失败了:
$ python2 test.py
Traceback (most recent call last):
File "test.py", line 6, in <module>
type(six.b(name), (dict,), {})
TypeError: type() argument 1 …Run Code Online (Sandbox Code Playgroud) 安装transifex和./manage.py后出现以下错误:
Error: No modules named six.
Run Code Online (Sandbox Code Playgroud)
Python六安装在virtualenv中(来自https://pypi.python.org/pypi/six)Django Version是1.4
任何帮助都会很棒!thx和最好的问候迈克尔
我在Windows 7操作系统上运行Python 2.7
这是我运行的:
>>> import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)
然后我明白了:
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
import matplotlib.pyplot as plt
File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 29, in <module>
from matplotlib.figure import Figure, figaspect
File "C:\Python27\lib\site-packages\matplotlib\figure.py", line 36, in <module>
from matplotlib.axes import Axes, SubplotBase, subplot_class_factory
File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 20, in <module>
import matplotlib.dates as _ # <-registers a date unit converter
File "C:\Python27\lib\site-packages\matplotlib\dates.py", line 119, in <module>
from dateutil.rrule import (rrule, MO, TU, WE, TH, FR, SA, …Run Code Online (Sandbox Code Playgroud) 我已six安装(甚至重新安装).
$ pip show six
---
Name: six
Version: 1.7.3
Location: /usr/lib/python2.6/site-packages
Requires:
Run Code Online (Sandbox Code Playgroud)
但是当我试图跑步时csvcut,它找不到它.
$ csvcut -n monster.csv
Traceback (most recent call last):
File "/usr/bin/csvcut", line 5, in <module>
from pkg_resources import load_entry_point
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 2655, in <module>
working_set.require(__requires__)
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: six>=1.6.1
Run Code Online (Sandbox Code Playgroud)
这是相关的但是csvcut:
#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'csvkit==0.8.0','console_scripts','csvcut'
__requires__ = 'csvkit==0.8.0'
import sys
from pkg_resources import load_entry_point
if …Run Code Online (Sandbox Code Playgroud) 我正在使用python-future一段时间,直到分析显示我的程序的5000万次实例化使我的程序的newint运行时间增加了10倍.我在Python 3中运行正常,但是试图使它与2和3兼容是非常需要的,因为我在我的组织中独自作为唯一的Py3推动器.
future有一些很好的文档说要扔
from __future__ import (absolute_import, division,
print_function, unicode_literals)
from future.builtins import *
Run Code Online (Sandbox Code Playgroud)
在我的所有源文件中作为样板文件然后在标准3中编写代码.但是,因为它似乎有点重,所以当解析大量文本文件时,这是一个拖累.
six似乎更轻量级,但使用它的常用方法是什么?文档有点扁平,易于掩盖...我目前有类似的东西:
from __future__ import (
absolute_import, division, print_function, unicode_literals)
import six
from six.moves import (zip, filter, map, range, reduce, input)
Run Code Online (Sandbox Code Playgroud)
然而,有一些关于在属性访问上延迟加载模块的事情; 我可以说from six.moves import *,或者它实际上会加载所有的HTTP,Tkinter等爵士乐吗?用于开发Py2 + 3代码的"最佳实践"是six什么?
我有一些目前看起来的Cython代码
exc = sys.exc_info()
raise exc[0], exc[1], exc[2]
Run Code Online (Sandbox Code Playgroud)
这在Python3上不起作用,因为不再允许"从元组中提升"形式.如果是这个普通的Python代码,我会使用six.reraise,但这在我这里不可用.什么是Cython友好的方式来做同样的事情,它适用于Python2和Python3?
six-python ×8
python ×6
python-3.x ×3
python-2.x ×2
centos ×1
cython ×1
django ×1
exception ×1
matplotlib ×1
metaclass ×1