本文章为学生的一点见解,是知识的分享
上一篇 | |
下一篇 |
知识引入
在计算机语言中,函数是指实现某一特定功能的语句集合
目录
众所周知,Python强大的一点在于有着自己的类库,而且标准库还非常庞大,并且Python还有可定义的第三方库给用户使用。今天,我们先不讨论标准库中的内置函数,而是讨论如何定义第三方库,简单点说,即定义函数,同时调用它。函数的定义方法主要有两种,一种是可以重复多次调用,通过def关键字定义的可定义的函数;另一种是只能调用一次,通过lambda函数定义的匿名函数。
一、def关键字
Python中的利用 def关键字 定义函数的方法 ,格式如下:
def 函数名(形式参数):
函数体
return [返回值]
1.函数名(funcname)
函数名必须遵循标识符命名规则,只能由数字,英文字母,下划线和美元符号($)组成,并且不能以数字开头
2.参数(paras)
函数的参数分为传入函数的变量及常量的实际参数(实参)和接收数据的变量的形式参数(形参)
,那么参数传递的形式和方式是怎样的呢?
(1).参数的传递形式
针对函数参数的传递形式,取决于实参的数据类型,当实参是基本数据类型a.传值,当实参是组合数据类型b.传址
注意:由于组合数据类型是传址,故当函数内部数据改变时,相当于直接操作外部数据
(2).参数的传递方式
参数的数量可以为零,也可以有多个,多个参数之间用逗号隔开
def add(x,y,z):
return x+y+z
a.位置参数
对于位置参数,即实际参数列表需要与形式参数列表一一对应,体现在传入数据的数量,数据类型的对应。
add(1,2,3)
如上,则add函数接收到结果是x=1,y=2,z=3
b.赋值参数
赋值参数即是对应函数时形式参数列表中存在赋值操作,则传入参数时可以省略该参数,或者通过在赋值操作重新赋值
def add(x,y,z=1)
return x+y+z
print(add(1,2)) # 4
print(add(1,2,3)) # 6
特别提醒:位置参数与赋值参数混用时后者要位于参数列表的末尾
c.可变参数
上述传参方式的参数列表长度都是固定的,因此产生了可变参数,即传入参数数量是任意可变的。可变参数参数分为一个星号修饰*以元组接收,两个星号修饰**以字典接收
def funname(*args, **kwargs):
print(type(args))
print(type(kwargs))
funname()
运行结果:
<class 'tuple'>
<class 'dict'>
3.函数体(statements)
(1).函数的嵌套
函数的嵌套包括,在函数内部定义只能在该函数里面调用的函数,该方法称为a.嵌套定义以及在定义函数时调用外部已经定义好的函数,该方法称为b.嵌套调用
def sub(x, y): # 嵌套定义
return x - y
def calculation(x, y):
def add(x, y): # 嵌套定义
return x + y
return add(x, y), sub(x, y)
print(calculation(1, 1))
结果:(2, 0)
(2).变量的作用域
根据变量的作用范围可将变量分为,在函数外定义的a.全局变量和在函数内定义的b.局部变量
注意:全局变量变量在函数中只读不写,如果要更改则需要先加global修饰说明该相名变量为全局变量,并且不能在使用后修改全局变量
num = 1 def mod(): num = 2 print(num) mod() print(num) 结果: 2 1 ***************** num = 1 def mod(): global num num = 2 print(num) mod() print(num) 结果: 2 2 ***************** num = 1 def mod(): print(num) num = 2 mod() print(num) 结果: 报错
4.返回值(expression)
return语句可用于返回函数的任意数据类型的结果,也可以省略,由Python自动返回None
小贴士:Python可以返回多个返回值,多个返回值返回值之间用逗号隔开
def add(x, y, z=0): z = x + y return x + y, z result1, result2 = add(1, 1, z=1) print(result1, result2) 结果: 2 2
二、lambda函数
相比通过def关键字定义函数,lambda函数定义函数的特殊的在函数体必须是一行简单的语句,格式如下:
lambda parameter:expresssion
其中parameter是可选的参数表,是待处理数据的传入;expression是函数体部分,是数据处理后结果的返回
助理小贴士:匿名函数可看作是只有返回语句的可定义函数
例如 匿名函数形式: add=lambda x,y:x+y 可定义函数相似: def add(x,y): return x+y