人工智能之Python09 函数
2018-02-12 16:13
246 查看
python中的函数就像乐高中的小积木一样,通过组合可以形成各种功能的产品,千里之行,起于函数。
函数就是把代码打包成不同形状的乐高积木,以便可以发挥想象力进行随意拼装和反复使用。
简单来说,一个程序可以按照不同功能的实现,分割成许许多多的代码块,每一个代码块就可以封装成一个函数。
eg:
形参:函数创建和定义过程中小括号里的参数
实参:函数在被调用的过程中传递进来的参数
eg:
给函数写文档是为了让别人可以更好的理解自己的函数,所以这是一个好习惯。充足的文档注释即方便了自己复查代码,也方便别人理解自己的代码。因为中大型项目往往需要多人团队配合才能够完成,只有充足的文档注释才能够更利于大家代码的衔接。
eg:
如果没有指定返回的数据类型,默认是元组
但是需要注意:在函数内部仅仅去访问全局变量就好,不要试图去修改它。因为Python会使用屏蔽的方式”保护“全局变量:一旦函数内部视图修改全局变量,Python就会在函数内部自动创建一个跟全局变量一模一样名字的局部变量,这样修改的结果只会修改到局部变量,而不会影响到全局变量。
但如果确实想在函数内部修改全局变量,可以使用global实现;
Python中的闭包从表现形式上定义为:如果在一个函数内部,对再外部作用域但不是再全局作用域的变量进行引用,那么内部函数就被认为是闭包。
eg:
在闭包中,外部函数的局部变量对应内部函数的局部变量,相当于全局变量和局部变量的关系,在内部函数中,你只能对外部函数的局部变量进行访问,但不能进行修改;
在Python3以前并没有直接的解决方案,只能间接的通过容器类来存放,因为容器类不是放在栈里,所以不会被”屏蔽“调。
容器类-字符串,列表,元组
在python3中,如果希望在内部函数里可以修改外部函数里的局部变量值,那么也有一个关键字可以使用,就是nonlocal,方式跟global一样
什么是lambda?
lambda表达式的语法非常精简(:左边放原函数的参数,可以有多个参数,用逗号,隔开即可;冒号右边是返回值)
lambda好处:
1. Python写一些执行脚本时,使用lambda可以省下定义函数的过程
2. 对于一些比较抽象并且整个程序执行下来只需要调用一两次的函数,不用考虑取名字的问题
3. 简化代码的可读性
函数就是把代码打包成不同形状的乐高积木,以便可以发挥想象力进行随意拼装和反复使用。
定义函数
在python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,返回值用return表示。简单来说,一个程序可以按照不同功能的实现,分割成许许多多的代码块,每一个代码块就可以封装成一个函数。
eg:
def sum(a,b): return a + b print(sum(1,2)) # 输出是 3
空函数
如果想定义一个什么事也不做的空函数,可以用pass语句:def empty(): pass print(empty())
参数
函数被设计之初是没有参数的,很快就带来很多麻烦,为了每次调用函数可以有不同的实现,加入了参数的概念。多个参数使用逗号隔开形参和实参
参数从调用的角度来说,可以分为形式参数和实际参数。形参:函数创建和定义过程中小括号里的参数
实参:函数在被调用的过程中传递进来的参数
可变参数
有时候并不清楚这个函数需要多少个参数,这时候可以定义成可变参数,在参数前面加上星号(* paramdef test(* params): print("可变参数的长度:",len(params)) print("可变参数:",params)
注释
单行注释
python的单行注释使用#eg:
# 这里是python的单行注释
文档注释
使用”“”注释内容”“”表示多行注释;给函数写文档是为了让别人可以更好的理解自己的函数,所以这是一个好习惯。充足的文档注释即方便了自己复查代码,也方便别人理解自己的代码。因为中大型项目往往需要多人团队配合才能够完成,只有充足的文档注释才能够更利于大家代码的衔接。
返回值
有些场景需要知道我们调用函数之后的结果如何,因此函数有了返回值,可以使用return 返回我们需要的数据;多返回值
python支持返回多个值eg:
def test(): return 5,'test'
def test(): return [5,'test']
如果没有指定返回的数据类型,默认是元组
global关键字
全局变量的作用域是整个模块,也就是代码段内所有的函数内部都可以访问到全局变量。但是需要注意:在函数内部仅仅去访问全局变量就好,不要试图去修改它。因为Python会使用屏蔽的方式”保护“全局变量:一旦函数内部视图修改全局变量,Python就会在函数内部自动创建一个跟全局变量一模一样名字的局部变量,这样修改的结果只会修改到局部变量,而不会影响到全局变量。
count = 10 def test(): count = 20 print(count) test() print(count)
但如果确实想在函数内部修改全局变量,可以使用global实现;
count = 10 def test(): global count = 20 print(count) test() print(count)
内嵌函数
Python的函数定义是可以嵌套的,也就是允许在函数内部创建另一个函数,这种函数叫做内嵌函数或者内部函数。def func01() : print('正在调用func01方法') def func02() : print('正在调用func02方法')
闭包(closure)
闭包是函数式编程的一个重要的语法结构,函数式编程是一种编程范式,著名的函数式编程语言就是LISP语言(主要应用于绘图和人工智能,一直被认为是天才程序员使用的语言)Python中的闭包从表现形式上定义为:如果在一个函数内部,对再外部作用域但不是再全局作用域的变量进行引用,那么内部函数就被认为是闭包。
eg:
def funX(x): def funY(y): return x * y return funY funX(10)(20)
在闭包中,外部函数的局部变量对应内部函数的局部变量,相当于全局变量和局部变量的关系,在内部函数中,你只能对外部函数的局部变量进行访问,但不能进行修改;
在Python3以前并没有直接的解决方案,只能间接的通过容器类来存放,因为容器类不是放在栈里,所以不会被”屏蔽“调。
容器类-字符串,列表,元组
在python3中,如果希望在内部函数里可以修改外部函数里的局部变量值,那么也有一个关键字可以使用,就是nonlocal,方式跟global一样
def funX(): x = 10 def funY(): nonlocal x x *= x return x return funY funX()()
匿名函数
Python允许使用lambda关键字来创建匿名函数。我们提到一个新的关键字什么是lambda?
def func(x): return 2 * x + 1 func(5) # 等价于 func = lambda x : 2 * x + 1 func(5)
lambda表达式的语法非常精简(:左边放原函数的参数,可以有多个参数,用逗号,隔开即可;冒号右边是返回值)
lambda好处:
1. Python写一些执行脚本时,使用lambda可以省下定义函数的过程
2. 对于一些比较抽象并且整个程序执行下来只需要调用一两次的函数,不用考虑取名字的问题
3. 简化代码的可读性
相关文章推荐
- Python-入门-09-字符串常见函数(上篇)
- 【Python自学】09.函数基础(中)
- 【Python3 爬虫】09_正则表达式(re.math()、re.search()、re.sub()、全局匹配函数)
- 机器学习09--神经网络的激活函数(Activation Function)及python代码实现
- Python快速学习09: 函数的参数
- Python快速学习09: 函数的参数
- Python strip() 和split() 函数
- python小练习,打出1-100之间的所有偶数,设计一个函数,在桌面上创建10个文件,并以数字命名,复利计算函数
- python内strip()函数
- Python新手学习基础之函数-可变参数*
- Python学习_我该怎么使用函数及函数中传递列表
- python urldecode 函数
- Python3 map函数与reduce函数
- python进阶三_函数
- python几个有用的小函数
- python调用自己文件函数/执行函数找不到包
- python 字典入库(mysql)函数
- Python构造函数及解构函数介绍
- python 一些有用的功能函数(持续更新)