Python3——函数与函数式编程
一、简介
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。
但你也可以自己创建函数,这被叫做用户自定义函数。
编程语言中函数定义:函数是逻辑结构化和过程化的一种编程方法。
函数式编程就是:定义一个数学函数,然后按照这个数学模型用编程语言去实现它。
过程定义:过程就是简单特殊没有返回值的函数
为何使用函数?——没有函数的编程只是在写逻辑(功能),如果脱离了函数,要写相同的逻辑(功能),唯一的方法就是拷贝
使用函数优点:(1)代码重用(2)保持一致性(3)可扩展性
二、python函数的定义方法
(1)函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
(2)任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
(3)函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
(4)函数内容以冒号起始,并且缩进。
(5)return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
语法:
def 函数名(参数列表):
函数体
>>> def test(x):
>>> "xxxxxx"
>>> x+=1
>>> retrun x
'''
def:定义函数的关键字
test:函数名
():内可定义形参
"":文档描述
x+=:代码块或程序处理逻辑
return:定义返回值
'''
三、函数返回值
注:当一个函数/过程没有使用return显示的定义返回值时,python解释器会隐式的返回None,所以在python中即便是过程也可以算做函数。
返回值数=0:返回None
返回值数=1:返回object
返回值数>1:返回tuple
四、函数调用
定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。
语法:方法名+()即可如; test()
五、参数
形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参
实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式或函数
区别:形参是虚拟的,不占用内存空间,形参变量只用在被调用时才分配内存单元,实参是一个变量,占用内存空间,数据单向传送,实参传给形参。
必需参数:必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
默认参数:调用函数的时候,默认参数非必须传递 用途:赋予默认值
关键字参数:关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
>>> def test(x,y):
>>> print(x)
>>> print(y)
>>> test(y=2,x=1)#关键字调用
>>> text(1,2)#位置调用(需要一一对应)
>>> #test(x=1,2)#关键参数不能写在位置参数前面
>>> def test(x,y=2):# y=2代表默认参数 可传可不传
>>> print(x)
>>> def test(*args): # *代表可以接收N个参数
>>> print(args)
>>> def test(**kwargs):# **代表可以接收N个关键字参数,转换成字典的方式。
>>> print(kwargs)
六、匿名函数
python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
(1)lambda 只是一个表达式,函数体比 def 简单很多。
(2)lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
(3)lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
(4)虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法:
lambda [arg1 [,arg2,.....argn]]:expression
>>> # 可写函数说明
>>> sum = lambda arg1, arg2: arg1 + arg2
>>> # 调用sum函数
>>> print ("相加后的值为 : ", sum( 10, 20 ))
>>> print ("相加后的值为 : ", sum( 20, 20 ))
相加后的值为 : 30
相加后的值为 : 40
七、全局变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
>>> total = 0 # 这是一个全局变量
>>> # 可写函数说明
>>> def sum( arg1, arg2 ):
>>> #返回2个参数的和."
>>> total = arg1 + arg2 # total在这里是局部变量.
>>> print ("函数内是局部变量 : ", total)
>>> return total
>>> #调用sum函数
>>> sum( 10, 20 )
>>> print ("函数外是全局变量 : ", total)
结果:
函数内是局部变量 : 30
函数外是全局变量 : 0
八、global 和 nonlocal关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
>>> num = 1
>>> def fun1():
>>> global num # 需要使用 global 关键字声明
>>> print(num)
>>> num = 123
>>> print(num)
>>> fun1()
>>> print(num)
输出结果:
1
123
123
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:
>>> def outer():
>>> num = 10
>>> def inner():
>>> nonlocal num # nonlocal关键字声明
>>> num = 100
>>> print(num)
>>> inner()
>>> print(num)
>>> outer()
输出结果:
100
100
九、内置函数
http://www.runoob.com/python3/python3-built-in-functions.html
参考文献:
函数:http://www.runoob.com/python3/python3-function.html
内置函数:http://www.runoob.com/python3/python3-built-in-functions.html
文档:https://wiki.python.org/moin/BeginnersGuide
以上内容经供参考,详情请仔细阅读文档。哈哈