“Life is short, You need Python” – Bruce Eckel
Environment
- OS: macOS Mojave
- Python version: 3.7
- IDE: Jupyter Notebook
文章目录
0. 写在前面
函数体现的是面向过程的编程,如可以将训练模型的过程写成一个函数;类体现的是面向对象的编程,创造具有属性和方法的对象,如可以将一个模型定义为一个类实例化而来的对象。这里做一点儿学习笔记,内容包括函数相关的操作,需要关注变量的作用域问题,并且理解函数闭包。
使用函数的意义
- 对一块代码进行封装,模块化地解决问题
- 使需要重复使用的代码能够方便地被调用,且利于管理和维护
1. 函数的定义
def 语句
实现函数的定义
def 函数名(参数):
""" 函数文档 """
函数体
return 返回值
返回值 = 函数名(参数) # 调用
对于在函数中调用另个函数的情况, Python 允许被调用的函数在之后定义
def bar():
print('bar')
def foo():
bar() # 之前定义
baz() # 之后定义
def baz():
print('baz')
foo()
- 使用
“"" xxx """
, 在函数的开头编写函数文档,便于代码的维护。调用函数名.__doc__
得到函数文档的内容
例 计算 sigmoid 函数自变量分别为 0 , 1 0, 1 0,1 和 − 10 -10 −10 的结果
σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1
import math
def sigmoid(x):
"""sigmoid 函数"""
return 1 / (1 + math.e**(-x))
print(sigmoid(0)) # 0.5
print(sigmoid.__doc__) # sigmoid 函数
执行一个定义好的函数可分为三步:
- 接收输入 —— 参数
- 运行处理 —— 函数体
- 输出结果 —— 返回值
1.1 设置参数
参数可分为形式参数(形参)和实际参数(实参)
- 形参是指定义函数时使用的参数
- 实参是指调用函数时传入的参数
例 在之前的 sigmoid 函数中
import math
def sigmoid(x): # 此处的 x 为形参
"""sigmoid 函数"""
return 1 / (1 + math.e**(-x)) # 此处的 x 为形参
res = sigmoid(0) # 传入的 0 为实参
根据函数定义时的形式,参数可以分为位置参数、默认参数和可变长参数;根据函数调用时的形式,参数可以为关键字参数。
1.1.1 位置参数和默认参数
定义函数时,
- 不设置参数的默认值,则为位置参数
- 设置参数的默认值,则为默认参数,在调用时可不对该参数传值
- 使用
*args
或**kwargs
,则为可变长参数 - 有严格的顺序要求:位置参数在最前,之后为