python Ai 应用开发基础训练,字符串,字典,文件,函数,装饰品,生成器(下)

news/发布时间2024/5/19 23:08:53

生成器的另一个示例,这个生成器功能是从大小生,生成斐波那契数列

def fib(max): # 定义一个函数fib,参数为maxa, b = 0, 1 # 初始化两个变量a和b,分别赋值为0和1n = 0 # 初始化计数变量n为0while b < max: # 当b小于max时继续循环print(b) # 打印当前的斐波那契数列值ba, b = b, a + b # 更新a和b的值,使其依次向前推算斐波那契数列n += 1 # 计数变量n加1print('done') # 循环结束后打印'done'fib(100) # 调用fib函数,设定max为100

  现在只需要在上面代码第五行,,print(b)   这一句改为 yield b  可以变为生成器生成 ,改变性存 # 使用yield关键字返回当前的斐波那契数列值,改成生成器后 在打印这个fib(100)时,只会返回结果,如果需要调用每一句值,就需要用到__next__()

def fib(max): # 定义一个生成器函数fib,参数为maxa, b = 0, 1 # 初始化两个变量a和b,分别赋值为0和1while b < max: # 当b小于max时继续循环yield b # 使用yield关键字返回当前的斐波那契数列值ba, b = b, a + b # 更新a和b的值,使其依次向前推算斐波那契数列return 'done' # 循环结束后返回'done'# 调用生成器函数并遍历输出结果
for num in fib(100): # 调用fib函数并传入max为100print(num) # 打印每个斐波那契数列值
生成器完整示例
##调用生成器的元素
f = fib(100) print(f._next__())
##利用循环一次调取生成器的结果可以用for
for i in f:
  print(i)

但是利用for 打印不会打印循环后的语句,print(done)估记不在线程内,如果循环10次,调第十一次的时候内部有抛异常,只有抓住异常才会显示如果要在生成器中打印出 "done" 语句,可以在生成器结束后迭代生成器对象。在迭代过程中,当生成器抛出 StopIteration 异常时,我们可以捕获该异常并在异常处理中添加打印 "done" 的操作。
def fib(max): # 定义一个生成器函数fib,参数为maxa, b = 0, 1 # 初始化两个变量a和b,分别赋值为0和1while b < max: # 当b小于max时继续循环yield b # 使用yield关键字返回当前的斐波那契数列值ba, b = b, a + b # 更新a和b的值,使其依次向前推算斐波那契数列raise StopIteration('done') # 抛出StopIteration异常,并附带提示信息 'done'# 调用生成器函数并遍历输出结果
gen = fib(100) # 调用fib函数并传入max为100
try:while True:num = next(gen) # 获取生成器的下一个值print(num) # 打印每个斐波那契数列值
except StopIteration as e:print(e) # 打印异常中的提示信息 'done'

  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/00150584.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

隐私计算在现代数字广告中的崛起之路

每一次点击、每一次搜索和每一次点赞——我们的数字互动都在广阔的在线领域留下了痕迹。但是,当我们留下的足迹成为广告商的商品时会发生什么呢?PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和…

Odoo模块从16.0升级至17.0记录

Odoo第三方模块V16.0>V17.0记录 升级后端*.py代码借助OCA的odoo-module-migrator工具# 进入容器 exec --user root -it odoo17 /bin/bash apt update apt install -y git # 在容器内执行 cd /tmp git clone https://github.com/OCA/odoo-module-migrator.git cd odoo-module…

微信小程序开发:上传网络图片到阿里云oss

上文遇到的问题,用户上传的人像图片在经过人像增强后返回的结果需要再次上传到阿里云的oss。 因为是需要下下载,再上传,这个域名我们没有在MP后台配置download域名,所以报错了: 但是MP后台只能配置https的域名,而人像增强的却返回的时http的,所以先下载人像增强返回的图…

使用libtorch训练一个异或逻辑门

本文以一个例子介绍如何使用libtorch创建一个包含多层神经元的感知机,训练识别异或逻辑。即${ z = x \text{^} y }$。本例的测试环境是VS2017和libtorch1.13.1。从本例可以学到如何复用网络结构,如下方的LinearSigImpl类的写法。该测试网络结构如下图。一个线性层2输入3输出,…

Python爬取免费IP代理时,无法解析到数据

大家好,我是Python进阶者。 一、前言 前几天在Python最强王者交流群【ZXS】问了一个Python网络爬虫实战问题。问题如下: 我这里遇到一个问题:【爬取免费IP代理时,无法解析到数据】, 我通过 xpath,css定位到了元素,但是在运行时返回空列表,请问我该怎么解决呀 以下是解析数…

04_C++字符串

标准库类型string 1.定义和初始化 初始化:拷贝初始化和直接初始化 2.string对象上的操作 3.读写string 使用getline#include<iostream> #include<string> using namespace std;int main() {string s1;//读取一整行while (getline(cin,s1)){if (!s1.empty()) {c…