它们产生相同的结果。
>>> for i in range(10, -1, -1):
... print(i)
...
10
9
8
7
6
5
4
3
2
1
0
Run Code Online (Sandbox Code Playgroud)
对比:
>>> for i in reversed(range(0, 10 + 1):
... print(i)
...
10
9
8
7
6
5
4
3
2
1
0
Run Code Online (Sandbox Code Playgroud)
据我了解,Python3range创建一个生成器,而不是将整个范围存储在内存中。reversed我认为,同样一次会产生一个值。有什么理由使用其中一种而不是另一种吗?
我正在寻找一些非常喜欢的东西namedtuples:
>>> from collections import namedtuple
>>> Party = namedtuple('Party', ['guests', 'location'])
>>> p = Party(['Jed', 'Fred', 'Kathy'], "Steve's House")
Run Code Online (Sandbox Code Playgroud)
我使用包装类来添加可扩展性:
>>> class Party(namedtuple('Party', ['guests', 'location'])):
...
Run Code Online (Sandbox Code Playgroud)
但有两点不同.我希望这些字段是可变的,我希望继承可以工作.(现在我不认为有一种方法可以让一个名字元素从另一个继承).
我听说过types.SimpleNamespace,但我认为它不允许在创作中进行位置论证(如果我错了,有人会纠正我).我喜欢namedtuples,因为他们让我不必编写__init__,__repr__和__eq__,所有这一切,我需要为我的使用情况.
什么是对我很重要:内置的实现__init__,__repr__并__eq__因此我没有写他们自己.我将需要许多(30+)这些类定义,其中一些将有许多(15+)个字段.
什么对我来说并不重要(现在):记忆效率.我不打算在任何时候都有超过五百个这样的实例.
我正在考虑自己动手,但我想确保我不会重新发明轮子.
这个关于某些数据结构的算法复杂性的wiki.python.org页面说明了collections.deque对象的以下内容:
deque(双端队列)在内部表示为双向链表.(好吧,一个数组列表而不是对象,以提高效率.)两端都可以访问,但即使看中间也很慢,中间增加或删除速度较慢.
两个问题:
1)是否可能添加到中间deque?我没有在API中看到任何方法.
2)为什么删除(或添加)比在中间查找要慢deque?它是一个双向链表,因此一旦找到要添加的对象,添加/删除应该是一个恒定时间操作.
所以我知道Amazon S3并没有真正的目录.我的问题是:这是否使得无法可靠地获取S3中"目录"的最后修改时间戳?
我知道你可以获得文件的最后修改日期,就像这个问题一样.
我说"可靠",因为可以将目录中文件的最新修改时间戳定义为目录的最后修改时间戳.但这并不准确,因为如果目录中的文件被删除,它就不会注册为对该目录的更改(实际上删除可能导致最后修改日期及时倒退).
我们boto用来刮S3.
似乎当一个键data的值为None,键不包含在请求中.
>>> req = requests.Request('POST', 'http://google.com', data=dict(a=None, b=1))
>>> req.prepare().body
'b=1'
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我期待一个空字符串,或类似于渲染的json.dumps(d)地方.我确信这是一个很好的理由 - 只是好奇它是什么.(我能想到的一件事是,可能没有POST请求的编码或可用 - 这是真的吗?)NonenullnullNone
另外好奇 - 为什么requests默默地忽略这些数据而不是抛出错误?
当调用unittest.TestCase.assertEqual()两个复杂的字典时,我得到了一个很好的差异。
有什么办法可以从 Python 2.7 中获得差异mock.Mock.assert_called_with吗?我正在测试使用一些具有复杂值的 dict 参数的调用,当其中一个只是缺少一个布尔值时,很难看出问题是什么。
例如
AssertionError: Expected call: post('http://cloud-atlas.cogolo.net/api/executions', auth=('cloudatlas', 'cloudatlas'), data={'environment': 'hadoop', 'source': 'repo', 'output_path': 'hdfs://namenode-01/user/erose/testing', 'production': True, 'input_path': 'hdfs://namenode-01/foo/bar', 'name': 'linecount', 'mrcloud_options': '{"mrcloud_option_A": "foobar", "hadoop_user_name": "erose"}', 'details': '{"path_to_file": "linecount.py", "parameters": {}, "branch": "master", "repo_name": "example_repo"}'}, headers={'X-COGO-CLOUDATLAS-USER': 'erose'})
Actual call: post('http://cloud-atlas.cogolo.net/api/executions', auth=('cloudatlas', 'cloudatlas'), data={'input_path': 'hdfs://namenode-01/foo/bar', 'name': 'linecount', 'environment': 'hadoop', 'source': 'repo', 'output_path': 'hdfs://namenode-01/user/erose/testing', 'details': '{"path_to_file": "linecount.py", "parameters": {}, "branch": "master", "repo_name": "example_repo"}', 'mrcloud_options': '{"mrcloud_option_A": "foobar", "hadoop_user_name": "erose"}'}, headers={'X-COGO-CLOUDATLAS-USER': 'erose'})
Run Code Online (Sandbox Code Playgroud) 在Haskell中有没有因为我们无法实现而不能成为单子的函子的示例return?
我已经看到了这个答案,并从中得到启发。
直观地看来,我们总是可以return使用类型构造函数来实现。但是我一定想念一些东西。
我的印象str(5)是str在整数上调用函数5.但是当你输入str翻译时:
>>> str
<class 'str'>
Run Code Online (Sandbox Code Playgroud)
所以str实际上是一个类,它使代码if type(a) is str变得更有意义.但是为什么str列在文档中的"内置函数"下呢?这只是一个简化吗?
Haskell新手在这里.我试图从Haskell的库中理解这个例子diagrams.具体来说,有这样一条线:
Just t = <thing>哪里<thing>是类型Maybe (Tree a)
我不明白这是做什么的.我知道我们需要从中获取价值Maybe.我替换了那行代码
t = fromJust <thing>
它的工作方式相同.两条线之间有什么区别,有人可以解释第一条线在做什么吗?
我在Amazon S3上有一个巨大的(~6 GB)文件,想要获得它的前100行,而不必下载整个东西.这可能吗?
这就是我现在正在做的事情:
aws cp s3://foo/bar - | head -n 100
Run Code Online (Sandbox Code Playgroud)
但这需要一段时间才能执行.我很困惑 - head一旦它读取了足够的行,就不应该关闭管道,导致aws cp在有时间下载整个文件之前使用BrokenPipeError崩溃?
python ×6
amazon-s3 ×2
haskell ×2
boto ×1
class ×1
deque ×1
http-post ×1
maybe ×1
namedtuple ×1
python-2.7 ×1
python-3.x ×1
python-mock ×1