相关疑难解决方法(0)

空发电机

玩弄树木,我偶然发现了这种行为:

def descendants (self):
    return #or "pass" or "42"
Run Code Online (Sandbox Code Playgroud)

明显回归None.

另一方面:

def descendants (self):
    return
    yield 42
Run Code Online (Sandbox Code Playgroud)

返回一个不产生任何东西的生成器(实际上是叶节点所需的行为).

有人可以向我解释一下这里发生了什么吗?

不应该yield 42是无法访问的代码吗?(我猜测函数是生成器还是"普通"函数的决定是在编译时根据它是否包含一个或多个yield语句来做出的,无论它们是否可达.但这只是一个黑暗的镜头.)


上下文如下:我有树,每个节点都是树或叶子.现在我想生成一个节点的所有后代:

class Leaf (Node):
    @property
    def descendants (self):
        return
        yield 42

class Tree (Node):
    @property
    def descendants (self):
        for child in self.children:
            yield child
            yield from child.descendants
Run Code Online (Sandbox Code Playgroud)

python generator

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

Scrapy:在解析其他URL之前,等待特定URL的解析

简要说明:

我有一个Scrapy项目,该项目从Yahoo!获取库存数据。金融。为了使我的项目正常工作,我需要确保库存已到期望的时间。为此,我首先取消CAT(Caterpillar Inc.(CAT)-NYSE),获取该时间段的收盘价,然后确保所有在此之后报废的股票具有与CAT相同的收盘价。 ,从而确保已将股票公开交易了所需的时间长度。

问题:

这一切都很好,但我的问题是,在scrapy完成CAT解析之前,它开始刮除其他股票并进行解析。这导致出现错误,因为在我可以从CAT获得所需的收盘价之前,scrapy试图确定是否有其他股票具有与CAT相同的收盘价,而这还不存在。

实际问题

我该如何强制scrapy在开始其他网址之前先完成对其中一个网址的解析

我也尝试过:

def start_requests(self):
    global start_time
    yield Request('http://finance.yahoo.com/q?s=CAT', self.parse)
    # Waits 4 seconds to allow CAT to finish crawling
    if time.time() - start_time > 0.2:
        for i in self.other_urls:
            yield Request(i, self.parse)
Run Code Online (Sandbox Code Playgroud)

other_urls进货从未开始,因为刮y永远不会回到def start_requests检查时间是否已到0.2

整个代码:

  from scrapy.selector import Selector
from scrapy import Request
from scrapy.exceptions import CloseSpider
from sharpeparser.gen_settings import *
from decimal import Decimal
from scrapy.spider import Spider
from sharpeparser.items import SharpeparserItem
import numpy
import time

if …
Run Code Online (Sandbox Code Playgroud)

python scrapy

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

为什么会出现内存错误?蟒蛇

我有一个5GB的文本文件,我正在尝试逐行阅读。我的文件格式为:: Reviewerid <\ t> pid <\ t> date <\ t> title <\ t> body <\ n>这是我的代码

o = open('mproducts.txt','w')
with open('reviewsNew.txt','rb') as f1:
    for line in f1:
        line = line.strip()
        line2 = line.split('\t')
        o.write(str(line))
        o.write("\n")
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行它时出现内存错误。我有一个8GB的RAM和1Tb的空间,那为什么我会收到此错误?我试图以块的形式读取它,但随后我也收到了该错误。

MemoryError 
Run Code Online (Sandbox Code Playgroud)

python

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

朱利安方式来做python的产量(和产量)

什么是像 python 那样做 yield(和 yield from)的 julian 方法?

编辑:我会尝试在 python 中添加小例子。

想想 4x4 国际象棋棋盘。找到棋王可以做的每N步长路径。不要浪费内存-> 生成每条路径。

如果我们用数字签署每个职位:

0  1  2  3
4  5  6  7
8  9  10 11
12 13 14 16
Run Code Online (Sandbox Code Playgroud)

点 0 有 3 个邻居(1、4、5)。我们可以为每个点找到每个邻居的表格:

0  1  2  3
4  5  6  7
8  9  10 11
12 13 14 16
Run Code Online (Sandbox Code Playgroud)

递归函数(生成器)从点列表或(...的生成器)点的生成器放大给定路径:

NEIG = [[1, 4, 5], [0, 2, 4, 5, 6], [1, 3, 5, 6, 7], [2, 6, 7], [0, 1, 5, 8, 9], [0, …
Run Code Online (Sandbox Code Playgroud)

julia

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

Passing generator expressions to any() and all()

I was just messing around in the Python interpreter and I came across some unexpected behavior.

>>> bools = (True, True, True, False)
>>> all(bools)
False
>>> any(bools)
True
Run Code Online (Sandbox Code Playgroud)

Ok, so far nothing out of the ordinary...

>>> bools = (b for b in (True, True, True, False))
>>> all(bools)
False
>>> any(bools)
False
Run Code Online (Sandbox Code Playgroud)

Here's where things start getting spooky. I figure this happens because the all function iterates over the generator expression, calling its __next__ method and using up …

python generator-expression python-3.x

5
推荐指数
2
解决办法
64
查看次数

'return'关键字只返回循环中的一个元素?

我有一个简单的函数来读取csv文件并从中提取第一个coloum:

import csv 

def pass_username():
    with open('test.csv', 'r') as csvfile:
        spamreader = csv.reader(csvfile, delimiter=',')
        for row in spamreader:
            return row[0]
Run Code Online (Sandbox Code Playgroud)

当我将此函数称为:

a = pass_username()
print a 
Run Code Online (Sandbox Code Playgroud)

这只打印第一个元素.但是,当我returnprintas 替换word print row[0]并调用函数时,pass_username()它会打印所有元素.我想将该函数分配给变量,因此我想使用return.怎么解决?

test.csv的内容:

"test@gmail.com","rockon"
"hello@gmail.com","hey"
"hithere@gmail.com","ok"
"hellosir@gmail.com","password"
Run Code Online (Sandbox Code Playgroud)

python return

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

我的python prime finder中的无限范围?

我想在我的python素数查找器中获得无限范围!这是我的代码!

import math
print "Welcome to Prime Finder!"
option = raw_input("continue(y/n)")
 if option == "y":
    for num in range(1,(infinite number)):
        if all(num%i!=0 for i in range(2,int(math.sqrt(num))+1)):
           print num
Run Code Online (Sandbox Code Playgroud)

我试图得到它所说的(无限数)实际上是一个无限数.有什么价值或东西我可以用来找到它吗?任何帮助将不胜感激!

python primes

4
推荐指数
2
解决办法
3287
查看次数

Python - CSV阅读器列表理解

我正在尝试使用CSV阅读器有效地读取文件中的列.代码是:

import csv
csv.register_dialect('csvrd', delimiter='\t', quoting=csv.QUOTE_NONE)


with open('myfile.txt', 'rb') as f:
    reader = csv.reader(f,'csvrd')
    a0=[x[0] for x in reader]
    a1=[x[1] for x in reader]
Run Code Online (Sandbox Code Playgroud)

我获取第一列中的值,但a1为空.如果我先写a1,那么a0是空的.

我知道一个简单的解决方案,插入

reader=[x for x in reader]
Run Code Online (Sandbox Code Playgroud)

但只是好奇的原因.当您从阅读器读取条目时,它是否被删除?

示例myfile.txt

c11 c21 c31
c21 c22 c32
Run Code Online (Sandbox Code Playgroud)

python csv list-comprehension list

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

分配(收益)到一个变量

首先,我想提一下,我对Python并不是特别熟悉。最近,我不得不让自己熟悉一个让我大吃一惊的代码示例,而我却无法对其进行“翻译”。我看过的各种文档和文章也没有帮助:

这是相关功能的简化版本:

@coroutine
def processMessage(receiver):
    global userID
    #...
    while True:
        msg = (yield)
        try:
            #...
        except Exception as err:
            #...
Run Code Online (Sandbox Code Playgroud)

我无法理解它的作用,因此无法“遍历”代码。我的问题是“此功能有什么作用?” 和“此功能遵循什么顺序?”

使我失望的线是msg = (yield)。我不知道它要达到什么目的。直觉告诉我,它只是在收到新消息时抓住它们,但我不明白为什么。如果有人知道并且我提供了足够的信息,我将不胜感激。

Try条款:

if msg['event'] == 'message' and 'text' in msg and msg['peer'] is not None:
    if msg['sender']['username'] == username:
        userID = msg['receiver']['peer_id']
        config.read(fullpath + '/cfg/' + str(userID) + '.cfg')
        if config.has_section(str(userID)):
            log('Config found')
            readConfig()
            log('Config loaded')
        else:
            log('Config not found')
            writeConfig()
            log('New config created') …
Run Code Online (Sandbox Code Playgroud)

python yield

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

“yield”关键字在 Julia 中起什么作用?

Julia 中关键字的用途是什么yield?它有什么作用?我见过它在 Python 中使用过几次,然后在 Julia 中使用过,但在 Julia 中似乎在非常不同的上下文中使用。

julia

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