小编for*_*tyj的帖子

如果Python生成器不再使用但尚未达到StopIteration,那么它是否会被垃圾收集?

当不再使用发电机时,应该进行垃圾收集,对吧?我尝试了以下代码,但我不确定哪个部分我错了.

import weakref
import gc

def countdown(n):
    while n:
        yield n
        n-=1

cd = countdown(10)
cdw = weakref.ref(cd)()
print cd.next()
gc.collect()
print cd.next()
gc.collect()
print cdw.next()
Run Code Online (Sandbox Code Playgroud)

在最后一行,我打电话给垃圾收集器,因为没有再打电话cd了.gc应该是自由的cd.但是当我打电话时cdw.next(),它仍然打印8.我再试了几次cdw.next(),它可以成功打印所有其余的,直到StopIteration.

我试过这个是因为我想了解生成器和协同程序是如何工作的.在David Beazley的PyCon演讲"关于协同程序和并发的好奇课程"的幻灯片28中,他说一个协程可以无限期地运行,我们应该用.close()它来关闭它.然后他说垃圾收集器会打电话.close().根据我的理解,一旦我们打电话给.close()自己,gc就会.close()再次打电话.会gc收到警告说它无法调用.close()已经关闭的协程吗?

谢谢你的任何投入.

python garbage-collection generator coroutine

19
推荐指数
2
解决办法
2120
查看次数

Python快速创建和删除目录将间歇性地导致WindowsError [错误5]

我在使用Scrapy时遇到了这个问题FifoDiskQueue.在Windows中,FifoDiskQueue将导致目录和文件由一个文件描述符创建并被另一个文件描述符使用(如果队列中没有更多消息,则被删除).

我将随机收到如下错误消息:

2015-08-25 18:51:30 [scrapy] INFO: Error while handling downloader output
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 588, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "C:\Python27\lib\site-packages\scrapy\core\engine.py", line 154, in _handle_downloader_output
    self.crawl(response, spider)
  File "C:\Python27\lib\site-packages\scrapy\core\engine.py", line 182, in crawl
    self.schedule(request, spider)
  File "C:\Python27\lib\site-packages\scrapy\core\engine.py", line 188, in schedule
    if not self.slot.scheduler.enqueue_request(request):
  File "C:\Python27\lib\site-packages\scrapy\core\scheduler.py", line 54, in enqueue_request
    dqok = self._dqpush(request)
  File "C:\Python27\lib\site-packages\scrapy\core\scheduler.py", line 83, in _dqpush
    self.dqs.push(reqd, -request.priority)
  File "C:\Python27\lib\site-packages\queuelib\pqueue.py", line 33, in push
    self.queues[priority] …
Run Code Online (Sandbox Code Playgroud)

python windows scrapy

9
推荐指数
1
解决办法
812
查看次数

如何理解Peter Norvig的Python函数式代码?

在阅读Peter Norvig的Python IAQ时,我遇到了这段代码:

def _if(test):
    return lambda alternative: \
               lambda result: \
                   [delay(result), delay(alternative)][not not test]()
def delay(f):
    if callable(f): return f
    else: return lambda: f
fact = lambda n: _if (n <= 1) (1) (lambda: n * fact(n-1))
fact(100)
Run Code Online (Sandbox Code Playgroud)

我在互联网上搜索了这个代码,这个代码出现在几个论坛中,但似乎那些评论它的人都明白它是如何工作的.

我对函数式编程概念很陌生.我知道如果评估测试True,delay(alternative)将被选中.但实际上,如果test为true,则返回结果.这对我来说似乎是违反直觉的.

python lambda

8
推荐指数
1
解决办法
424
查看次数

将所选日期时间转换为sqlalchemy中的日期

我有一个测试记录数据库,其中一列'test_time'定义为datetime.我想查询有多少个不同的日期,因为我想根据日期将测试结果转储到csv.我现在有以下内容:

distinct_dates = list(session.query(Test_Table.test_time).distinct())
Run Code Online (Sandbox Code Playgroud)

但这给了我一个日期时间列表而不是日期.当然我可以用Python转换它,但是当我使用sqlite时.我这样做SELECT DISTINCT DATE(test_time) FROM Test_Table.我无法想出sqlalchemy中的等价物.

python sqlalchemy

8
推荐指数
1
解决办法
1万
查看次数

NSURLCache 和 NSURLSession 一起不尊重:Cache-Control: max-age:86000, private, must-revalidate

在 AppDelegate.m 中,我配置了:

NSURLCache *sharedURLCache = [[NSURLCache alloc] initWithMemoryCapacity:20 * 1024 * 1024 diskCapacity:100 * 1024 * 1024 diskPath:@"FhtHttpCacheDir"];
Run Code Online (Sandbox Code Playgroud)

然后是http请求:

- (void) testRestfulAPI{
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:config];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://192.168.0.223:8000/v1/topictypes"]];

    [request setHTTPMethod:@"GET"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];

    NSError *error = nil;
    if (!error) {
        NSURLSessionDataTask *downloadTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            if (!error) {
                NSHTTPURLResponse *httpResp = (NSHTTPURLResponse*) response;
                if (httpResp.statusCode == 200) {
                    NSDictionary* json = …
Run Code Online (Sandbox Code Playgroud)

http-caching nsurlcache ios nsurlsession

6
推荐指数
1
解决办法
1610
查看次数

Beautifulsoup无法从img标签中提取src属性

这是我的代码:

html = '''<img onload='javascript:if(this.width>950) this.width=950'
src="http://ww4.sinaimg.cn/mw600/c3107d40jw1e3rt4509j.jpg">'''
soup = BeautifulSoup(html)
imgs = soup.findAll('img')

print imgs[0].attrs
Run Code Online (Sandbox Code Playgroud)

它会打印出来 [(u'onload', u'javascript:if(this.width>950) this.width=950')]

那么src属性在哪里?

如果我用类似的东西替换html html = '''<img src="/image/fluffybunny.jpg" title="Harvey the bunny" alt="a cute little fluffy bunny" />'''

我得到了正确的结果 [(u'src', u'/image/fluffybunny.jpg'), (u'title', u'Harvey the bunny'), (u'alt', u'a cute little fluffy bunny')]

我是HTML和beautifulsoup的新手.我错过了一些知识吗?谢谢你的任何想法.

html beautifulsoup

4
推荐指数
1
解决办法
1万
查看次数

Clojure`case`不区分不同的符号

此代码有效:

(case '-
    + :plus
    - :minus
    :unknown)
==> :minus
Run Code Online (Sandbox Code Playgroud)

这个也是:

(case '-
    + :plus
    '- :minus
    * :times
    :unknown)
==> :minus
Run Code Online (Sandbox Code Playgroud)

这不是:

(case '-
    '+ :plus
    '- :minus
    * :times
    :unknown)
==> java.lang.IllegalArgumentException: Duplicate case test constant: quote
Run Code Online (Sandbox Code Playgroud)

谷歌搜索此错误导致日志文件在这里.然而,这个家伙只是说它删除了引号.

看起来case语句将不同的符号视为相同的值.为什么会这样?

TIA.

case clojure

3
推荐指数
1
解决办法
899
查看次数

在Nest中,如何在编制索引时指定子文档的父文档?

Product并且Company是多对一的亲子关系:

[ElasticType(Name = "product", IdProperty = "ProductId")]
internal class Product
{
    public int ProductId { get; set; }
    public string Title { get; set; }
}

[ElasticType(Name = "company", IdProperty = "CompanyId")]
public class Company
{
   public int CompanyId { get; set; }
   public string CompanyName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在映射中Product,我做了:

Func<PutMappingDescriptor<Product>, PutMappingDescriptor<Product>> descriptor = m => m
               .MapFromAttributes()
               .AllField(a => a.Enabled(false))
               .SetParent<Company>();
Run Code Online (Sandbox Code Playgroud)

我创建了一个父母和孩子:

var company = new Company {
    CompanyId = 1,
    CompanyName …
Run Code Online (Sandbox Code Playgroud)

elasticsearch nest

3
推荐指数
1
解决办法
2462
查看次数

在Nest(Elasticsearch)中,如何获取索引的原始json映射?

我想检查当前映射(如在我的C#代码中)与elasticsearch索引中的映射之间的差异.

只有:

var res = esClient.GetMapping<EsCompany>();
Run Code Online (Sandbox Code Playgroud)

GetMappingResponse在c#中得到了对象,我将不得不逐字段地比较.更糟糕的是,每个字段都有自己的属性,我必须进入这些属性进行进一步比较.

在我的应用程序中,我更喜欢获取映射的原始json,并且我可以轻松区分两个json对象以获得相等性.

然后我尝试了这个:

var res = esClient.Raw.IndicesGetMapping(myIndexName);
Run Code Online (Sandbox Code Playgroud)

但是当我读到时res.Response,我得到一个AmbiguousMatchException例外.

elasticsearch nest elasticsearch-net

2
推荐指数
1
解决办法
1545
查看次数

提早实现groupby结果时Python中itertools.groupby的怪异

首先,为我对问题的描述不佳而道歉。我找不到更好的了。

我发现将列表应用于 itertools.groupby 结果会破坏结果。见代码:

import itertools
import operator

log = '''\
hello world
hello there
hi guys
hi girls'''.split('\n')

data = [line.split() for line in log]

grouped = list(itertools.groupby(data, operator.itemgetter(0)))

for key, group in grouped:
    print key, group, list(group)

print '-'*80

grouped = itertools.groupby(data, operator.itemgetter(0))

for key, group in grouped:
    print key, group, list(group)
Run Code Online (Sandbox Code Playgroud)

结果是:

hello <itertools._grouper object at 0x01A86050> []
hi <itertools._grouper object at 0x01A86070> [['hi', 'girls']]
--------------------------------------------------------------------------------
<itertools.groupby object at 0x01A824E0>
hello <itertools._grouper object at 0x01A860B0> [['hello', 'world'], …
Run Code Online (Sandbox Code Playgroud)

python python-itertools

1
推荐指数
1
解决办法
1358
查看次数

在打字稿中获取`keyof`非可选属性名称

这是我的界面

interface X {
    key: string
    value: number | undefined
    default?: number
}
Run Code Online (Sandbox Code Playgroud)

但是我只想要非可选键。"key" | "value",或者"key"(对我都很好)

type KeyOfX = keyof X给我"key" | "value" | "default"

type NonOptionalX = {
    [P in keyof X]-?: X[P]
}
Run Code Online (Sandbox Code Playgroud)

type NonOptionalKeyOfX = keyof NonOptionalX给出"key" | "value" | "default"-?仅删除任意的改性剂,让所有的人都非可选。

ps。我使用Typescript 2.9。

typescript

1
推荐指数
2
解决办法
761
查看次数