Python 3中return语句无法返回值,改用yield也无效该如何解决
问题原因
- 你编写的
card()函数逻辑本身无错误,return random.choice(cards)语句确实会返回符合预期的随机卡牌数值,不存在返回值异常问题。 - 你观测到“没有返回任何结果”是Python脚本的运行机制导致:在非交互模式下执行脚本时,单独的函数调用语句得到的返回值如果没有被打印输出、或者赋值给变量使用,不会自动展示在控制台中,和你使用的PyCharm、repl.it运行平台无关。
- 更换为
yield后出现相同问题也是同理:生成器对象需要被迭代取值后才能得到对应内容,直接调用生成器函数不会自动输出结果。
解决方法
方案1:直接查看返回结果
如果仅需要验证函数返回值是否正确,用print()函数包裹函数调用语句即可,修改后代码如下:
import random def card(): cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10] return random.choice(cards) print(card())
运行后控制台就会输出随机抽取的卡牌值。
方案2:后续使用返回结果
如果需要将抽卡结果用于后续逻辑,将函数返回值赋值给变量即可,示例如下:
import random def card(): cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10] return random.choice(cards) # 将返回值赋值给变量后续使用 user_card = card() print(f"本次抽取的卡牌为:{user_card}")
yield版本实现参考
如果你需要用yield实现可重复抽卡的生成器,参考写法如下:
import random def card_generator(): cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10] while True: yield random.choice(cards) # 实例化生成器 gen = card_generator() # 每次调用next即可抽取一张新卡牌 print(next(gen)) print(next(gen))
内容的提问来源于stack exchange,提问作者Shubhangi
相关产品推荐
相关产品推荐

