【发布时间】:2021-02-28 08:57:12
【问题描述】:
我正在尝试理解生成器函数,根据我的阅读,如果您想将外部生成的值传递到函数的中间,而不是在开头作为一个论点。
我创建了一个生成器函数来返回最小的 1 位回文,最小的 2 位回文等等,直到位数等于 10。
def isPalindrome(num):
if num == int(str(num)[::-1]):
return True
return False
def palindrome_special():
num = 0
while True:
if isPalindrome(num):
num = (yield num) - 1
num = num + 1
for number in palindrome_special():
print(number)
num_digits = len(str(number))
if num_digits <= 10:
palindrome_special().send(10 ** num_digits)
虽然此代码返回 TypeError:
Traceback(最近一次调用最后一次):
文件“C:/Users/anura/PycharmProjects/Advanced Python/advanced_generators.py”,第 17 行,在
palindrome_special().send(10 ** num_digits)
TypeError: can't send non-None value to a just-started generator
【问题讨论】:
-
您的逻辑似乎有问题。
num = (yield num) - 1中的yield num将返回None。即使您解决了这个问题,num的值也将始终为 0 -
@npk 你能解释一下为什么会返回 None 吗?
-
因为
yeild num是一个声明 -
@npk 为什么语句 yield num 返回 None?它不应该返回 .send() 值 10 ** 1 吗?
-
我无法理解其中的逻辑。但是,您可以使用
yield num; num = num-1,而不是num = (yield num) - 1。请确保您的生成器按预期工作,没有最后的 for 循环部分
标签: python python-3.x iterator generator typeerror