使用"is"运算符或"=="运算符来比较Python中的两个数字是否更好?
例子:
>>> a = 1
>>> a is 1
True
>>> a == 1
True
>>> a is 0
False
>>> a == 0
False
Run Code Online (Sandbox Code Playgroud) 有很多方法可以编写计算直方图的Python程序.
通过直方图,我的意思是一个函数,它计算a中对象的出现次数iterable并输出字典中的计数.例如:
>>> L = 'abracadabra'
>>> histogram(L)
{'a': 5, 'b': 2, 'c': 1, 'd': 1, 'r': 2}
Run Code Online (Sandbox Code Playgroud)
编写此函数的一种方法是:
def histogram(L):
d = {}
for x in L:
if x in d:
d[x] += 1
else:
d[x] = 1
return d
Run Code Online (Sandbox Code Playgroud)
是否有更简洁的方法来编写此功能?
如果我们在Python中有字典理解,我们可以写:
>>> { x: L.count(x) for x in set(L) }
Run Code Online (Sandbox Code Playgroud)
但由于Python 2.6没有它们,我们必须写:
>>> dict([(x, L.count(x)) for x in set(L)])
Run Code Online (Sandbox Code Playgroud)
虽然这种方法可以读取,但效率不高:L经过多次.此外,这对单寿命发电机不起作用; 该函数应该对迭代器生成器同样有效,例如:
def gen(L):
for x in L:
yield x
Run Code Online (Sandbox Code Playgroud)
我们可能会尝试使用该reduce函数(RIP):
>>> reduce(lambda d,x: dict(d, …Run Code Online (Sandbox Code Playgroud) 甲数字对象标识符(DOI)是全局唯一的字符串,用于标识电子文档(例如,学术文章的PDF).它本质上提供了一种创建文档永久链接的方法(例如,http://dx.doi.org/10.1145/146585.146609).
是否有Web服务(或任何其他系统)来获取给定DOI的文档的元数据(最好是BibTeX形式)?
编辑添加一些说明信息.
我对setuptools很新.我已经看到了一些类似的问题,它有点疯狂,我似乎遵循我看到的建议,但setuptools仍然做了一些不同于我想要的东西.
这是我的项目的结构:
.
..
package1/
__init__.py
abc.py
...
tests/
__init__.py
test_package1.py
LICENSE
README.md
RELEASE
setup.py
Run Code Online (Sandbox Code Playgroud)
这是我的setup.py的内容:
#!/usr/bin/env python
import os
#from distutils.core import setup
from setuptools import setup, find_packages
setup(
name='package1',
version='1.1',
test_suite="tests",
packages=find_packages(exclude=['tests']),
include_package_data=True,
package_data = {
'': ['LICENSE', 'README.md5', 'RELEASE']
},
)
Run Code Online (Sandbox Code Playgroud)
另外,在我的清单文件中,我有:
include LICENSE
include RELEASE
include README.md
Run Code Online (Sandbox Code Playgroud)
我用以下内容构建tar:
python setup.py sdist
Run Code Online (Sandbox Code Playgroud)
我想要:
tests从源代码分发中排除目录;相反,这是发生的事情:
tests 目录仍然在创建的tar存档中,并安装到site-packages;我没有想法,有人可以向我解释我做错了什么以及如何解决它?
Clutter有Python 3绑定吗?如果是这样,我怎样才能获得并使用它们?
假设我定义了以下SQLAlchemy类:
Base = declarative_base()
class Person(Base):
__tablename__ = 'person'
id = Column(Integer, primary_key=True)
computers = relationship('Computer', backref=backref('owner', lazy='dynamic'))
class Computer(Base):
__tablename__ = 'computer'
id = Column(Integer, primary_key=True)
ownerid = Column(Integer, ForeignKey('person.id'))
Run Code Online (Sandbox Code Playgroud)
进一步假设我以这种方式访问了惰性查询对象:
relation = getattr(Computer, 'owner')
Run Code Online (Sandbox Code Playgroud)
我如何确定是否relation引用单个实例Person(即多对一关系,如本示例中),或者是否relation引用实例集合(如一对多关系)?换句话说,如何确定动态SQLAlchemy关系对象的关系类型?
考虑一个ReST API,它提供了一个数据库接口.
服务器是否应该使用HTTP 400 Bad Requeston PUT或PATCHrequest尝试为数据库中不存在的列指定新值?服务器应该默默忽略错误吗?服务器应该做一些我在这里没有提到的其他内容吗?
满足条件时,我想跳过一些测试功能,例如:
@skip_unless(condition)
def test_method(self):
...
Run Code Online (Sandbox Code Playgroud)
在这里,我希望测试方法如果condition评估为true,则报告为跳过。我用鼻子做了一些努力就可以做到这一点,但是我想看看是否可以在鼻子2中使用它。
我正在使用以下命令使用 Jupyter 笔记本服务器创建一个新的 Python 3 虚拟环境:
virtualenv env -p python3
. env/bin/activate
pip install jupyter
jupyter notebook
Run Code Online (Sandbox Code Playgroud)
这些都运行成功。但是,当我尝试创建新笔记本时,出现 WebSocket 身份验证错误,并且无法创建笔记本。客户说
无法建立与笔记本服务器的连接。笔记本电脑将继续尝试重新连接。检查您的网络连接或笔记本服务器配置。
以下是 Jupyter 笔记本服务器的日志:
[I 22:50:23.085 NotebookApp] The port 8888 is already in use, trying another port.
[I 22:50:23.110 NotebookApp] Serving notebooks from local directory: /tmp
[I 22:50:23.110 NotebookApp] 0 active kernels
[I 22:50:23.110 NotebookApp] The Jupyter Notebook is running at: http://localhost:8889/?token=b4d69926e308334a4ca121d3ceaa0dfa9f1ba93312770f88
[I 22:50:23.110 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). …Run Code Online (Sandbox Code Playgroud) 如何为socketserver请求处理程序编写单元测试?我试过使用以下代码,但遇到了一个问题:
import socketserver, unittest, threading
class TestServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
allow_reuse_address = True
class MyRequestHandlerTest(unittest.TestCase):
def setUp(self):
self.server = TestServer((HOST, PORT), MyRequestHandler)
self.server_thread = threading.Thread(target=self.server.serve_forever)
self.client = socket.create_connection((HOST, PORT))
#self.server_thread.setDaemon(True)
self.server_thread.start()
def tearDown(self):
self.client.close()
self.server.shutdown()
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用多个测试功能,就像这样
def test_foo(self):
self.client.send(b'foo\n')
result = self.client.recv(1024)
self.assertEqual(b'FOO', result)
def test_bar(self):
self.client.send(b'bar\n')
result = self.client.recv(1024)
self.assertEqual(b'BAR', result)
Run Code Online (Sandbox Code Playgroud)
我收到了错误
socket.error: [Errno 98] Address already in use
Run Code Online (Sandbox Code Playgroud)
在线self.server = ...,即使我指示测试服务器allow_reuse_address.
编辑:删除了我最初发布的两个错误之一,以简化问题.
根据setuptools文档,setuptools版本30.3.0(2016年12月8日)“允许使用配置文件(通常setup.cfg)来定义包的元数据和通常提供给其他的选择setup()功能”。与运行pip install -r requirements.txt从需求文件安装Python软件包类似,是否有办法要求pip安装配置文件install_requires选项中列出的软件包setup.cfg?
python ×8
setuptools ×2
unit-testing ×2
api-design ×1
bibtex ×1
clutter ×1
counting ×1
doi ×1
histogram ×1
http ×1
metadata ×1
nose ×1
nose2 ×1
pip ×1
pytest ×1
python-3.x ×1
reduce ×1
rest ×1
sockets ×1
socketserver ×1
sqlalchemy ×1
tcp ×1
websocket ×1