我正在阅读yieldpython中的关键字,并试图了解运行此示例:
def countfrom(n):
while True:
print "before yield"
yield n
n += 1
print "after yield"
for i in countfrom(10):
print "enter for loop"
if i <= 20:
print i
else:
break
Run Code Online (Sandbox Code Playgroud)
输出是:
before yield
enter for loop
10
after yield
before yield
enter for loop
11
after yield
before yield
enter for loop
12
after yield
before yield
enter for loop
13
after yield
before yield
enter for loop
14
after yield
before yield
enter for loop …Run Code Online (Sandbox Code Playgroud) 我正试图从雅虎获取股票数据!财务使用Python 2.7.9,但我只需要本月第3个星期五的数据.我有一个获取数据的功能,但需要一种方法来获取日期.我想要这样的东西:
def get_third_fris(how_many):
# code and stuff
return list_of_fris
Run Code Online (Sandbox Code Playgroud)
因此,该呼叫get_third_fris(6)将在当前日期之后返回6个项目长的第3个星期五列表.日期需要是Unix时间戳.
(我有几乎没有经验time或者datetime,请解释一下你的代码做什么.)
谢谢!
我想计算直到n的平方和.假设n是4.然后此代码生成一个列表,其中包含0到4范围内的地图对象:
m = map(lambda x: x**2, range(0,4))
Run Code Online (Sandbox Code Playgroud)
足够轻松.现在调用m上的列表,然后求和:
>>> sum(list(m))
14
Run Code Online (Sandbox Code Playgroud)
意外的行为是,如果我再次运行最后一行,则总和为0:
>>> sum(list(m))
0
Run Code Online (Sandbox Code Playgroud)
我怀疑这是因为调用list(m)返回一个空列表,但我找不到这种行为的解释.有人可以帮我解决这个问题吗?
我是一个编程新手,并且在理解我的python教科书(Magnus Lie Hetland的"Beginning Python")中的一个例子时遇到了一些麻烦.该示例用于递归生成器,旨在展平嵌套列表的元素(具有任意深度):
def flatten(nested):
try:
for sublist in nested:
for element in flatten(sublist):
yield element
except TypeError:
yield nested
Run Code Online (Sandbox Code Playgroud)
然后,您将按如下方式提供嵌套列表:
>>> list(flatten([[[1],2],3,4,[5,[6,7]],8]))
[1,2,3,4,5,6,7,8]
Run Code Online (Sandbox Code Playgroud)
我理解flatten()中的递归如何帮助减少到这个列表的最内层元素'1',但是我不明白当'1'实际上作为'嵌套传递回flatten()时会发生什么".我认为这会导致TypeError(不能迭代一个数字),并且异常处理实际上是用于生成输出的繁重工作......但是使用flatten()的修改版本进行测试已经说服了我事实并非如此.相反,似乎'yield element'行是负责任的.
那就是说,我的问题是......如何"屈服元素"实际上被执行?似乎'嵌套'将是一个列表 - 在这种情况下添加另一层递归 - 或者它是一个数字,你得到一个TypeError.
任何对此的帮助都将非常感激...特别是,我喜欢在事件链中走动,因为flatten()处理一个简单的例子:
list(flatten([[1,2],3]))
Run Code Online (Sandbox Code Playgroud) 警告:极端的新手问题
我似乎一直在考虑将功能作为一种配方.在我的世界中,程序是一个食谱盒,一些食谱(功能)需要其他食谱(其他功能).处理器通过将指令写入RAM并通过它们来开始执行主配方.喜欢,早餐薄饼.你叫Julia Childs的早餐薄饼食谱.你必须做一次绉面糊.然后,当你还有绉面糊时,你会反复制作绉纱.同时,您可以制作各种水果制品.
好吧,我显然不明白.我只是通过pythontutor.com 运行python wiki解决方案到Project Euler Problem 2(甚至斐波那契数字总和不到400万).我觉得有些事发生在我身上.看起来每次你召唤一个食谱,你不只是使用相同的处理器,你会得到一个带有一些罐子的侏儒来处理这个功能.底池是变量,gnome计算出他的配方,如果调用函数期望返回值,gnome会向调用者显示这些底池的内容.然后呼叫者可以返回,找出更多的东西,并向他的呼叫者显示返回值.
所以让我们说Al打电话给Bob制作薄饼.鲍勃做了击球手并打电话给查理做饭.查理做了一个绉纱,为鲍勃提供绉纱,鲍勃把它送给艾尔,然后回到查理.谁还存在!Al不知道鲍勃有查理藏在厨房里,但即使在查理制作了第一个绉纱之后,他仍然在厨房里,知道如何制作绉纱,并知道他留下了多少绉纱面糊.即使他已经退回了第一个绉纱.
有人可以帮我解决这个问题吗?
这是Python wiki的代码
def fib():
x,y = 0,1
while True:
yield x
x,y = y, x+y
def even(seq):
for number in seq:
if not number % 2:
yield number
def under_a_million(seq):
for number in seq:
if number > 1000000:
break
yield number
print sum(even(under_a_million(fib())))
Run Code Online (Sandbox Code Playgroud)
根据Python文档,yield关键字可以采用" expression_list ",但它是可选的:
yield_expression ::= "yield" [expression_list]
Run Code Online (Sandbox Code Playgroud)
我不能在Python文档中找到这样的用法的例子,在关于yield关键字在Python中做什么的任何答案,也不是在网上阅读.
如果yield没有使用,expression_list那么我猜测结果方法不能用作生成器,那么平原yield可能有用吗?
在Ruby中,yield关键字用于产生执行块的闭包.
这个关键字在Python语言中有何不同?
在问题中"yield"关键字有什么作用?,我发现使用了一种我不希望有效的Python语法.这个问题很老,投票数很多,所以我很惊讶没有人至少留下关于这个函数定义的评论:
def node._get_child_candidates(self, distance, min_dist, max_dist):
if self._leftchild and distance - max_dist < self._median:
yield self._leftchild
if self._rightchild and distance + max_dist >= self._median:
yield self._rightchild
Run Code Online (Sandbox Code Playgroud)
我试图评估这种语法:
到目前为止失败了
SyntaxError:语法无效
我查询了问题中给出的链接(可能已过时),并在网上搜索了该用途def,但我没有发现任何解释这个"点名"模式的内容.我正在使用Python 3,也许这是Python 2的一个功能?
是(或是)这种语法有效,如果是的话是什么意思?
在Python教程中,我已经了解到了
与功能类似,可以递归编程发生器.以下示例是一个生成器,用于创建给定项目列表的所有排列.
def permutations(items):
n = len(items)
if n==0: yield []
else:
for i in range(len(items)):
for cc in permutations(items[:i]+items[i+1:]):
yield [items[i]]+cc
for p in permutations(['r','e','d']): print(''.join(p))
for p in permutations(list("game")): print(''.join(p) + ", ", end="")
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚它是如何产生结果的.递归的东西和'收益'真的让我很困惑.有人能清楚地解释整个过程吗?
我在合并和拆分部分偶然发现了pymotw.com的这段代码。
from itertools import *
def make_iterables_to_chain():
yield [1, 2, 3]
yield ['a', 'b', 'c']
for i in chain.from_iterable(make_iterables_to_chain()):
print(i, end=' ')
print()
Run Code Online (Sandbox Code Playgroud)
我不明白make_iterables_to_chain()的工作方式。它包含两个yield语句,它如何工作?我知道生成器是如何工作的,但是那里只有一个yield语句。
请帮忙!
python ×10
yield ×4
generator ×2
python-3.x ×2
recursion ×2
date ×1
function ×1
lambda ×1
permutation ×1
python-2.7 ×1
ruby ×1
syntax-error ×1