csmhwu
  • 深度学习应用开发 - TensorFlow实践
  • 前言
  • 目录
  • 第一章 人工智能导论
    • 第一章 人工智能导论
      • 1.1 感受人工智能时代的到来
      • 1.2 人工智能发展概述,跌宕起伏的60年
      • 1.3 本讲小结与作业
  • 第二章 深度学习简介
    • 第二章 深度学习简介
      • 2.1 机器学习简介
      • 2.2 深度学习简介
      • 2.3 深度学习框架简介
      • 2.4 本讲小结与作业
  • 第三章 磨刀不误砍柴工:TensorFlow基础
    • 第三章 磨刀不误砍柴工:TensorFlow基础
      • 3.1 TensorFlow 基础
      • 3.2 TensorFlow名字的意义
      • 3.3 Tensor 张量
      • 3.4 TensorFlow计算模型 – 数据流图
      • 3.5 Operation 操作
      • 3.6 Session 会话
      • 3.7 常量与变量
      • 3.8 变量的赋值
      • 3.9 Placeholder 占位符
      • 3.10 Feed提交数据和Fetch提取数据
      • 3.11 TensorBoard可视化初步
      • 3.12 本讲小结与作业
  • 第四章 单变量线性回归:TesnsorFlow实战
    • 第四章 单变量线性回归:TesnsorFlow实战
      • 4.1一切从一个神经元说起
      • 4.2 基本术语
      • 4.3 定义损失函数
      • 4.4 模型训练与降低损失
      • 4.5 梯度下降法
      • 4.6 学习率
      • 4.7 超参数
      • 4.8 线性回归问题TensorFlow实战
      • 4.9 在训练中显示损失值
      • 4.10 TensorBoard可视化
      • 4.12 本章小结和作业
  • 第五章 多元线性回归:波士顿房价预测问题TesnsorFlow实战
    • 第五章 多元线性回归:波士顿房价预测问题TesnsorFlow实战
      • 5.1 波士顿房价预测问题简介
      • 5.2 机器学习中的基本线性代数
      • 5.3 准备建模
      • 5.4 数据读取
      • 5.5 构建模型
      • 5.6 训练模型
      • 5.7 进行预测
      • 5.8 后续版本改进
      • 5.9 本章小结和作业
  • 第六章 MNIST手写数字识别:分类应用入门
    • 第六章 MNIST手写数字识别:分类应用入门
      • 6.1 MNIST手写数字识别数据解读
      • 6.2 分类模型构建与训练
      • 6.3 本讲小结与作业
  • 第七章 MNIST手写数字识别进阶:多层神经网络与应用
    • 第七章 MNIST手写数字识别进阶:多层神经网络与应用
      • 7.1 单隐藏层神经网络构建与应用
      • 7.2 多层神经网络建模与模型的还原保存
      • 7.3 TensorBoard进阶与TensorFlow游乐场
      • 7.4 本讲小结与作业
  • 第八章 图像识别问题:卷积神经网络与应用
    • 第八章 图像识别问题:卷积神经网络与应用
      • 8.1从神经网络到卷积神经网络:解决参数太多的问题
      • 8.2 卷积神经网络的基本结构
      • 8.3 TensorFlow对卷积神经网络的支持
      • 8.4 CIFAR-10图像识别案例的TensorFlow实现
      • 8.5 本讲小结与作业
  • 第九章 Deep Dream:理解深度神经网络结构及应用
    • 第九章 Deep Dream:理解深度神经网络结构及应用
      • 9.1 Deep Dream:计算机生成梦幻图像
      • 9.2 经典深度神经网络与数据增强
      • 9.3 Inception模型文件导入与卷积层分析
      • 9.4 Deep Dream图像生成
      • 9.5 本讲小结与作业
  • 第十章 猫狗大战:迁移学习及应用
    • 第十章 猫狗大战:迁移学习及应用
      • 10.1 猫狗大战简介
      • 10.2 迁移学习简介
      • 10.3 数据准备
      • 10.4 VGG16的Tensorflow实现
      • 10.5 VGG16模型复用
      • 10.6 数据输入
      • 10.7 模型重新训练与保存
      • 10.8 预测
  • 第十一章 生成式对抗网络原理及Tensorflow实现
    • 第十一章 生成式对抗网络原理及Tensorflow实现
  • 第十二章 泰坦尼克号旅客生存预测:Keras应用实践
    • 第十二章 泰坦尼克号旅客生存预测:Keras应用实践
  • 第十三章 电影评论情感分析:自然语言处理与循环神经网络
    • 第十三章 电影评论情感分析:自然语言处理与循环神经网络
  • 第十四章 鸢尾花品种识别:TensorFlow.js应用开发
    • 第十四章 鸢尾花品种识别:TensorFlow.js应用开发
      • 14.1 TensorFlow.js 简介
      • 14.2 网页开发环境介绍
      • 14.3 TensorFlow.js 核心概念
      • 14.4 TF.js应用:鸢尾花品种识别
  • 第十五章 花卉识别App:TensorFlow Lite与移动应用开发
    • 第十五章 花卉识别App:TensorFlow Lite与移动应用开发
      • 15.1 TensorFlow Lite 基本介绍
      • 15.2 TensorFlow 基本架构
      • 15.3 TFLite应用:手机识别花型
  • 附录 1 工欲善其事必先利其器:TensorFlow开发环境搭建
    • 附录 1 工欲善其事必先利其器:TensorFlow开发环境搭建
      • 1.1 Windows平台下的TensorFlow开发环境搭建
      • 1.2 Linux环境下TensorFlow的安装
  • 附录 2 工欲善其事必先利其器:简明Python基础
    • 附录2 工欲善其事必先利其器:简明Python基础
      • 2.1 简单print用法
      • 2.2 变量
      • 2.3 标识符
      • 2.4 保留字
      • 2.5 数字数据类型
      • 2.6 布尔类型
      • 2.7 注释
      • 2.8 基本运算
      • 2.9 字符串
      • 2.10 列表
      • 2.11 元组
      • 2.12 集合
      • 2.13 字典
      • 2.14 print的格式化输出
      • 2.15 类型转化
      • 2.16 Python的行
      • 2.17 流程控制
      • 2.18 列表推导式
      • 2.19 循环嵌套(多重循环)
      • 2.20 break语句
      • 2.21 continue语句
      • 2.22 pass语句
      • 2.23 函数
      • 2.24 全局变量与局部变量
      • 2.25 类
      • 2.26 文件
      • 2.27 异常
      • 2.28 导入外部库
      • 2.29 获取帮助信息
    • 附录3 协同编书指南
Powered by GitBook
On this page

Was this helpful?

  1. 附录 2 工欲善其事必先利其器:简明Python基础
  2. 附录2 工欲善其事必先利其器:简明Python基础

2.23 函数

Previous2.22 pass语句Next2.24 全局变量与局部变量

Last updated 6 years ago

Was this helpful?

函数是组织好的、可重复使用的、用来实现单一或者相关联功能的代码段。

函数能提高应用的模块性和代码的重复利用率。

Python提供了许多内建函数,比如print()

开发者也可以自己创建函数,这被叫做用户自定义函数。

函数定义语法如下:

图2-123

函数通过“def”关键字进行声明,后接函数标识符名称和圆括号“()”。

任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

“函数_文档字符串”是一个可选项,起到一个帮助文档的作用。

return[表达式]结束函数,选择性地返回一个值给调用方。

不带表达式的return相当于返回None。

下面我们定义了一个求阶乘的函数:

在这里我们通过def这个关键词进行声明,后面是函数的名称fact,括号中的n是参数(不需要指定数据类型),然后是一个冒号“:”,下面是函数体,result是函数内部的局部变量,初始值为1,然后是一个for循环,由于range的上限是取不到的,所以1到n的阶乘要写成range(1,n+1),最后返回的result就是n阶乘的值。

定义好了之后,我们调用这个函数去求5的阶乘,就可以写成“fact(5)”,得到的结果是120。我们也可以把括号内的数字改成其他数字去计算其他数字的阶乘。

下面我们来看一个更加复杂的例子:

这里我们有一个item变量来保存阶乘的值,由于我们刚刚已经定义了一个求阶乘的函数,所以在这里就可以直接调用。

之后就是一个格式化输出。因为我们需要每两个换一行,所以在最后我们做了一个判断,如果这个i取余2等于1的话,我们就换行,从而实现了这个程序的要求。

虽然它实现的是一个相对复杂的功能,但是代码非常的清晰简短,这是因为我们在之前已经定义了fact函数。如果有错误需要修改,也会相对比较方便。

可选参数以集合的方式出现在函数声明中并紧跟着必选参数,可选参数可以在函数声明中被赋予一个默认值。已命名的参数需要赋值。

函数第一行语句可以选择性地使用文档字符串——用于存放函数说明。

函数可以返回一个元组(使用元组拆包可以有效返回多个值)。

下面来看一个例子:

我们定义了一个fun_example函数,它有三个参数:第一个参数是一个列表型参数,第二、三个参数都赋了初值,是可选参数。这个函数的作用是在listp函数中添加一项“A new item”,intp的值加一。最后返回这三个参数。

接下来我们调用了这个函数。我们先定义了第一个参数和第二个参数的值,然后它们作为参数代入到函数中,由于第三个参数没有写,所以在定义中的初始值就是它的值:

那么我们如何对这个返回的元组进行拆包呢?

通过下图的方式我们就可以做到拆包啦:

> 示例代码

1.py
# intp 和 stringp 是可选参数,它们有默认值
# 如果调用 fun_example 时只指定一个参数,那么 intp 缺省为 0 ,stringp 缺省为 A default string。
# 如果调用 fun_example 时指定了前面两个参数,stringp 仍缺省为 A default string。
# listp 是必备参数,因为它没有指定缺省值。
def fun_example(listp, intp=0, stringp="A default string"):
    listp.append("A new item")
    intp += 1
    return listp, intp, stringp
2.py
my_list = [1, 2, 3]
my_int = 10
print (fun_example(my_list, my_int))
print (my_list)
3.py
my_list = [1, 2, 3]
my_int = 10
v1,v2,v3=fun_example(my_list, my_int)
4.py
print(v1)
print(v2)
print(v3)
图2-124
图2-125
图2-126
图2-127
图2-128
图2-129