在下面的示例中,resp.results是一个迭代器.
版本1:
items = []
for result in resp.results:
item = process(result)
items.append(item)
return iter(items)
Run Code Online (Sandbox Code Playgroud)
版本2:
for result in resp.results:
yield process(result)
Run Code Online (Sandbox Code Playgroud)
返回版本1中的iter(项目)在性能/内存节省方面是否比简单返回项目更好/更差?
在"Python Cookbook"中,Alex表示明确的iter()"更灵活,但不经常使用",但是在版本2中返回iter(items)与yield的优缺点是什么?
另外,对迭代器和/或产量进行单元测试的最佳方法是什么? - 你不能做len(结果)检查列表的大小?
在我的django活塞API中,我想在调用另一个需要一段时间的函数之前向客户端发出/返回一个http响应.如何使yield产生包含所需JSON的HTTP响应,而不是与生成器对象的创建相关的字符串?
我的活塞处理程序方法如下所示:
def create(self, request):
data = request.data
*other operations......................*
incident.save()
response = rc.CREATED
response.content = {"id":str(incident.id)}
yield response
manage_incident(incident)
Run Code Online (Sandbox Code Playgroud)
而不是我想要的响应,如:
{"id":"13"}
Run Code Online (Sandbox Code Playgroud)
客户端获取如下字符串:
"<generator object create at 0x102c50050>"
Run Code Online (Sandbox Code Playgroud)
编辑:
我意识到使用yield是错误的方法,实质上我想要实现的是客户端在服务器进入manage_incident()的时间代价高昂的函数之前立即收到响应
我正在使用Python进行网络流量监控项目.不熟悉Python,所以我在这里寻求帮助.
简而言之,我正在检查流量和流量,我这样写:
for iter in ('in','out'):
netdata = myhttp()
print data
Run Code Online (Sandbox Code Playgroud)
netdata是一个由嵌套列表组成的列表,其格式如下:
[ [t1,f1], [t2,f2], ...]
Run Code Online (Sandbox Code Playgroud)
这里t代表的是时刻,f是流动.但是我只想在这个时刻保留这些f进行内外,我想知道如何获得有效的代码.
经过一些搜索,我认为我需要使用创建流量列表(2个元素),然后使用zip函数同时迭代这两个列表,但是我很难写出正确的列表.由于我的netdata是一个很长的列表,效率也非常重要.
如果有任何令人困惑的事情,请告诉我,我会尽力澄清.感谢帮助
我决定不浪费我的暑假开始学习 Python。我想我会开始学习循环技术,所以我想从一个基本的数字列表开始,也就是写一个 for 循环来生成数字 1 - 10。
这就是我所拥有的:
def generateNumber(num):
i=0
for i in range(num):
return i
return i
Run Code Online (Sandbox Code Playgroud)
并且代码不起作用。我想在这样的列表中得到一个输出:
>>> generateNumber(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud) 我希望使用Python all()函数来帮助我计算某些东西,但是如果all()它没有在它命中时就进行评估,那么这个东西可能会花费更长的时间False.我想它可能是短路评估,但我只是想确定.另外,有没有办法告诉Python如何评估函数?
我查看了问题/sf/ask/2090490251/但它被标记为重复。所以我在这里发布我的答案版本。
原来的问题是:
我正在寻找普通函数和生成器之间的确切区别。我已经用谷歌搜索过了。但所有的结果都令人困惑。我是初学者,所以我期待一些简短而精确的例子。
我试过这个普通函数和生成器函数有什么区别?但没有用。
我已经经历过这个“yield”关键字有什么作用?但这纯粹是在谈论生成器,函数和生成器之间没有任何区别。我需要帮助?
我知道我的问题看起来很广泛,但我希望这个问题的答案能给我正确的方向.我是Tornado框架的新手,基本上我是Python新手.我正在研究这个项目:请你解释几行代码:
@gen.coroutine
def get_me(self):
raise gen.Return((yield self._api.get_me()))
Run Code Online (Sandbox Code Playgroud)
@gen.coroutine注释的用途是什么?raise关键字用于例外,不是吗?为什么我们在这里使用它?generator.Tornado框架的概念是使用生成器吗?是什么原因? 首先,我想为糟糕的头衔道歉,但这是我能做的最好的.我试图拍摄很多截图,希望能让它更容易理解.
所以我正在研究一个不和谐的聊天机器人,现在正在开发一个可以作为待办事项清单的功能.我有一个命令将任务添加到列表中,它们存储在dict中.但是我的问题是以更易读的格式返回列表(见图片).
def show_todo():
for key, value in cal.items():
print(value[0], key)
Run Code Online (Sandbox Code Playgroud)
任务存储在dict被调用的中cal.但是为了让机器人实际发送消息,我需要使用return语句,否则它只是将它打印到控制台而不是实际的聊天(见图片).
def show_todo():
for key, value in cal.items():
return(value[0], key)
Run Code Online (Sandbox Code Playgroud)
以下是我尝试修复它的方法,但由于我使用了返回,for循环无法正常工作.
那么我该如何解决这个问题呢?如何使用return语句将其打印到聊天而不是控制台?
请参阅图片以便更好地理解
我正在尝试创建一个自定义数据生成器,但不知道如何将yield函数与__getitem__方法内部的无限循环结合起来。
编辑:回答后我意识到我使用的代码是Sequence不需要yield声明的。
目前我正在返回多个带有return声明的图像:
class DataGenerator(tensorflow.keras.utils.Sequence):
def __init__(self, files, labels, batch_size=32, shuffle=True, random_state=42):
'Initialization'
self.files = files
self.labels = labels
self.batch_size = batch_size
self.shuffle = shuffle
self.random_state = random_state
self.on_epoch_end()
def __len__(self):
return int(np.floor(len(self.files) / self.batch_size))
def __getitem__(self, index):
# Generate indexes of the batch
indexes = self.indexes[index * self.batch_size:(index + 1) * self.batch_size]
files_batch = [self.files[k] for k in indexes]
y = [self.labels[k] for k in indexes]
# Generate …Run Code Online (Sandbox Code Playgroud) 我想问一下如何检索出fibo列表列表,然后检查用户的输入值是否在fibo列表中.
a , b = 1, 1
while num <= sys.maxint:
fibo == a , b = b, a+b
if num == (b +a+b):
print "It is a Fibonacci number"
break
else:
print "It is not a Fibonacci number"
break
Run Code Online (Sandbox Code Playgroud)
谢谢!
python ×9
yield ×3
function ×2
count ×1
django ×1
evaluation ×1
generator ×1
iterator ×1
keras ×1
list ×1
nested-lists ×1
python-3.x ×1
return ×1
sequence ×1
tensorflow ×1
tornado ×1
unit-testing ×1