两个python解释器会话。第一个是来自CentOS上的python。第二个版本来自MacOSX10.7上内置的python。为什么第二个会话从\U转义序列中创建长度为2的字符串,并随后出错?
$ python
Python 2.6.6 (r266:84292, Dec 7 2011, 20:48:22)
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2
Type "help", "copyright", "credits" or "license" for more infor
我有下一个正则表达式来查找文本上的表情符号:
re.compile(u'([\U00002600-\U000027BF])|([\U0001F300-\U0001F64F])|([\U0001F680-\U0001F6FF])')
它在Python3中工作得很好,但在Python2.7中我得到了这样的结果:
sre_constants.error: bad character range
我如何修复它以同时支持Python2.7和Python3?
我正在尝试R中python中的简单白化函数
Python
def svd_whiten(X):
U, s, Vt = np.linalg.svd(X, full_matrices=False)
#print(U)
#print(Vt)
# U and Vt are the singular matrices, and s contains the singular values.
# Since the rows of both U and Vt are orthonormal vectors, then U * Vt
# will be wh
我想在Python2.7中打印字符串的unicode版本。它在Python 3中运行得很好。但是使用python2.7,我得到了以下错误:
x="strings are now utf-8 \u03BCnico\u0394é!"
Python 3:
print('Python', python_version())
print(x)
Python 3.4.1
strings are now utf-8 μnicoΔé!
Python2.7
>>> x='strings are now utf-8 \u03BCnico\u0394é!&
我在Python中遇到了一个奇怪的地方,我不明白:
>>> x = 1
>>> L = [1, 2]
>>> u = True
>>> x in L == u
False
>>> (x in L) == u
True
>>> x in (L == u)
TypeError: argument of type 'bool' is not iterable.
有人能解释一下Python是如何处理x in L == u和(x in l) == u的吗?
谢谢。
Python版本
下面是一个简单的测试。repr似乎工作得很好。然而,在Python2.6和2.7中,len和x for x in似乎没有正确地划分unicode文本:
In [1]: u""
Out[1]: u'\U0002f920\U0002f921'
In [2]: [x for x in u""]
Out[2]: [u'\ud87e', u'\udd20', u'\ud87e', u'\udd21']
好消息是Python3.3做了正确的事情,™。
Python2.x系列还有希望吗?
我只是在anaconda 2中为python 3.6创建了一个环境,然后安装了spyder:
conda install spyder
在新创建的环境(称为python3)中。
The following NEW packages will be INSTALLED:
spyder: 3.2.8-py36_0
Proceed ([y]/n)? y
Preparing transaction: done
Verifying transaction: done
Executing transaction: \ DEBUG menuinst_win32:__init__(185): M
使用正式安装程序,macOS 11.6/Xcode 13上的新诗安装失败:
u@s-MacBook-Pro ~ % curl -sSL https://install.python-poetry.org | python3 -
Retrieving Poetry metadata
# Welcome to Poetry!
This will download and install the latest version of Poetry,
a dependency and package manager for Python.
It will add the `poetry` comm
在Python2.7中,我习惯于从数组中收集键/值对,并将其作为散列返回:
return { u.id : u.name for u in users }
但事实证明,它在Python 2.6中不起作用:
return { u.id : u.name for u in users }
^
SyntaxError: invalid syntax
我怎么才能避免做这样的事情呢?
values = {}
for u in users:
values[u.id] = u.name
return values
有没有更好的办法?
我从virtualenv的pip安装中得到了这个错误:
➜ myproject git:(master) ✗ pyenv/bin/pip --help
Failed checking if argv[0] is an import path entry
ValueError: character U+6e657970 is not in range [U+0000; U+10ffff]
Fatal Python error: no mem for sys.argv
ValueError: character U+6e657970 is not in range [U+0000; U+10ff
在一个相当保守的系统(RHEL)上,我决定冒险一试,学习一下virtualenv,并将我的wsgi应用程序从系统的默认2.7迁移到3.6。有很多Python3版本可供选择: $ yum search python3 | egrep '^python3[^-]+\.'
python34.x86_64 : Version 3 of the Python programming language aka Python 3000
python34u.x86_64 : Version 3 of the Python programming language aka Python 300
为什么我老是犯错误
import matplotlib.pyplot as plt
import numpy as np
u = input('Equation:')
u = u.replace('y', '')
u = u.replace('=', '')
u = u.replace('^', ' ** ')
u = u.replace('+', ' + ')
u = u.replace('-', ' - ')
u
我需要一个直接可执行的python脚本,所以我用#!/usr/bin/env python启动了这个文件。但是,我还需要无缓冲的输出,所以我尝试了#!/usr/bin/env python -u,但使用python -u: no such file or directory失败了。
我发现#/usr/bin/python -u可以工作,但我需要它来让PATH中的python支持虚拟env环境。
我有什么选择?