我写了两个具有相同功能的函数f和g
def f(l, count):
if count > 1:
for i in f(l, count-1):
yield i + 1
else:
yield from l
for i in f(range(100000),900):
pass
print('f')
Run Code Online (Sandbox Code Playgroud)
和
def g(l, count):
if count > 1:
tmp = []
for i in g(l, count-1):
tmp.append(i+1)
return tmp
else:
return l
for i in g(range(100000),900):
pass
print('f')
Run Code Online (Sandbox Code Playgroud)
而我认为f shuold会更快但是在运行时g会更快
时间为g
real 0m5.977s
user 0m5.956s
sys 0m0.020s
Run Code Online (Sandbox Code Playgroud)
f的时间
real 0m7.389s
user 0m7.376s
sys 0m0.012s
Run Code Online (Sandbox Code Playgroud) 语法错误:外部函数“ yield”
>>> for x in range(10):
... yield x*x
...
File "<stdin>", line 2
SyntaxError: 'yield' outside function
Run Code Online (Sandbox Code Playgroud)
我该怎么办?当我尝试在for循环中使用简单yield时。
下面是一个发电机功能.
def f():
x=1
while 1:
y = yield x
x += y
Run Code Online (Sandbox Code Playgroud)
这个生成器function(f)是否在内部实现,如下所示?
class f(collections.Iterable):
def __init__(self):
self.x = 1
def __iter__(self):
return iter(self)
def __next__(self):
return self.x
def send(self, y):
self.x += y
return self.next()
Run Code Online (Sandbox Code Playgroud)
编辑:
这是我的问题的答案.
我有一个功能来检查列表中的"负","正"和"零"值.以下是我的功能:
def posnegzero(nulist):
for x in nulist:
if x > 0:
return "positive"
elif x < 0:
return "negative"
else:
return "zero"
Run Code Online (Sandbox Code Playgroud)
但是当我运行此函数时,它会在检查列表中第一个数字的值后停止.例如:
>>> posnegzero([-20, 1, 2, -3, -5, 0, 100, -123])
"negative"
Run Code Online (Sandbox Code Playgroud)
我希望它继续整个列表.在上面的函数中,如果我改变了returnto的每个实例print,那么它会做它应该做的事情,但是现在我不希望它None在函数完成时说出来.我错在哪里的想法?
我正在学习python,我无法围绕书中的一段代码:
def find_value(List, value):
for i in range(len(List)):
if List[i] == value:
return i
return -1
Run Code Online (Sandbox Code Playgroud)
我已经尝试运行代码,如果值在其中则返回索引,如果不是则返回-1,但我不明白是因为'return -1'在for循环之外和if语句,每次执行代码时都不应该运行吗?或者只返回一次,第一次被调用?
我想在继续之前确保理解这个概念.提前致谢
我已经尝试过以下代码:
result = (x for x in range(3))
for y in result:
print(y)
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
0
1
2
Run Code Online (Sandbox Code Playgroud)
但是当我使用此代码时:
result = (print(x) for x in range(3))
for y in result:
print(y)
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
0
None
1
None
2
None
Can anyone explain, Why this **None** is coming in output in second code?
Run Code Online (Sandbox Code Playgroud) 可能重复:
反转字符串中单词的顺序
我知道python已经为此提供了一些方法,但我正在尝试理解当你只使用列表数据结构时这些方法如何工作的基础知识.如果我有一个字符串hello world并且我想创建一个新字符串world hello,我该怎么想?
然后,如果我可以使用新列表,我将如何避免制作新列表并在适当的位置执行此操作?
有人可以解释为什么它只打印3行而不是24行的机制.我知道它是由于生成器功能耗尽,但如何?
def counter_gen(size):
cur=1
while cur <= size:
yield cur
cur +=1
c1=counter_gen(8)
c2=counter_gen(3)
for x in c1:
for y in c2:
print x,y
Run Code Online (Sandbox Code Playgroud) 我编写了一个计算冥王星轨道并设置动画的程序,并开始使用类重写它,因为这似乎是将更多行星引入模拟的明智方法。即有一个定义物理的类,然后输入特定的行星数据以获得轨道数据。
class Planet(object):
m_sun = 1.989*(10**30)
G = 6.67*(10**-11)
dt = 1
coords = []
def __init__(self, x, y, vx, vy, m):
self.x = x
self.y = y
self.vx = vx
self.vy = vy
self.m = m
def genData(self):
while self.dt < 100000000:
r = ((self.x)**2 + (self.y)**2)**0.5
a = ((self.G*self.m_sun)/r**2)
ax = -a*((self.x)/r)
ay = -a*((self.y)/r)
self.vx = self.vx + ax*self.dt
self.vy = self.vy + ay*self.dt
self.x = self.x + self.vx*self.dt
self.y = self.y + self.vy*self.dt
coord = (self.x, …Run Code Online (Sandbox Code Playgroud) 我仍然是python中的新生成器.我自己尝试了一个并尝试了一些非常简单的事情:
def fib(a):
... if a==0 or a==1:return 1
... yield fib(a-1)+fib(a-2)
print(list(fib(5))
Run Code Online (Sandbox Code Playgroud)
这段代码给了我这个错误:
TypeError: unsupported operand type(s) for +: 'generator' and 'generator'
Run Code Online (Sandbox Code Playgroud)
不能以这种方式使用发电机吗?
python ×10
generator ×4
python-2.7 ×2
python-3.x ×2
class ×1
expression ×1
fibonacci ×1
list ×1
return ×1
yield ×1