《Python基础知识——函数》

函数

  • 一,简介
  • 二,定义函数
  • 三,参数
    • (一)参数类型
      • 1.位置参数
      • 2.可变数量位置参数
      • 3.可选参数\关键字参数
      • 4.可变数量关键字参数
    • (二)不同类型参数的位置
  • 四,调用函数
  • 五,匿名函数(lambda函数)
    • (一)定义方式
    • (二)调用方式
  • 六,函数的说明文档

一,简介

在Python语言中函数的概念与我们数学中有大同小异之处。在数学中我们假设一个式子y=2x+6,那么我们会称y为x的函数。而在Python语言当中,式子中的x会被成为参数,y会被成为返回值,2x+6这个过程则是处理过程。书写形式如下所示:

def fnc1(x):
	y=2*x+6
	return y
#调用函数
fnc1(2) #10
fnc1(3) #12

函数在Python语句中十分常用,因为它能够封装自己填写的功能代码,需要的时候直接调用即可,不需要自己重新编写。一方面降低了编程的难度,同时又避免了代码的重用,使得总体代码看起来简洁干净。从上面的案例中我们也可以看到,一个函数是由多个部分组成,下面我们每个部分都进行讲解。

二,定义函数

Python语言中,我们使用def关键载来定义一个函数,其基本形式如下:

def <函数名> (<参数列表>):
<缩进>函数体
<缩进>return <返回值>
函数名:与变量名差不多,同属标识符,不过这里指代的是一个函数,命名方式与变量一样。
参数列表:即在调用函数时需要传入作为函数体内的变量来使用的数据。可有可无。
函数体:需要函数执行的内容。
返回值:由return关键字引导,即函数体执行完毕后需要返回的值,该部分可以不写。一旦函数返回某个值,该函数立即停止执行,即使后面还有内容也会被忽略。

这里面需要注意的是参数列表这一块,由于需求的不同,参数也会被分为好几类,且不同参数之间的位置也是十分讲究的。

三,参数

(一)参数类型

1.位置参数

位置参数是函数最为常见的参数,一旦被定义了就必须填入,我们以len函数为例。

len(object):返回对象的长度。
这里面的object就是一个位置参数,如果不传入就会报错。

len() #TypeError: len() takes exactly one argument (0 given)

2.可变数量位置参数

有些时候我们不知道具体要输入的参数量为多少时,我们就需要到可变数量参数了。可变数量参数非必填参数,书写方式在参数名前面加上星号即可,这时候,输入的参数就会被当作元组类型传入到函数当中,或以可迭代对象的形式传入也是可以的,如max函数就是一类。

max(arg1, arg2, *args, key=func]:返回输入参数的最大值。
其中第三个参数就是可变数量参数,因为我们不知道会输入多少个参数进行对比,因而需要一个可变参数。

def traverse(*tup):
	for data in tup:
		print(data,end='')
traverse(1,2,3,4,5) #12345
traverse(*(1,2,3,4,5)) #12345
traverse(*range(5)) #01234

3.可选参数\关键字参数

顾名思义,这种参数可填可不填,且在函数定义时就已经有自己的参数名和对应的默认值,因此也叫关键字参数。如果不填入该参数的话会把默认值传递到函数体当中,print函数中就有sep和end两个可选参数,如果不指定填入时数据之间就会以空格为分隔符,函数执行完之后以换行结尾。

4.可变数量关键字参数

一般用该类型参数来为函数传入一个字典,在参数名前加两个星号即可注明为此类参数。为该参数传入实际参数时,可以用多个关键字参数的形式或以字典的形式传入。
注意:这时候参数名作为字典的键传入,参数值作为字典的值传入。

def traverse_dict(**dict1):
    for key, value in dict1.items():
        print(f'{key}{value}',end=',')
traverse_dict(Mike=2, Tony=3,Jack=4) #Mike2,Tony3,Jack4,
traverse_dict(**{
     'Mike':2, 'Tony'=3,'Jack'=4}) #Mike1,Tony3,Jack4,

(二)不同类型参数的位置

1.首先根据位置参数和关键字参数的定义,由于关键字参数自带默认值,位置参数是要放在前面的。如果关键字参数在前,则无法分辨是要对关键字参数重新赋值还是对位置参数进行赋值。
2.接着再看可变数量参数和单参数。也可以很容易对其先后顺序进行分辨,如果非可变数量在前,则在赋值的时候是无法分辨该参数是属于单参数还是可变数量参数,因而要把单参数放前。
遵循以上两条原则,很容易就可以推出不同类型参数的位置应为:

1.位置参数 2.可变数量位置参数 3.关键字参数 4.可变数量位置参数

四,调用函数

函数名(参数值) 的方式调用函数,这时候函数中的函数体代码就会被执行一次。

五,匿名函数(lambda函数)

(一)定义方式

说完了函数的一些基本定义和调用,下面介绍一种比较方便的函数——匿名函数。这种函数顾名思义,在定义的过程中是没有函数名的,因而书写非常方便,一般只用一行代码就可以定义一个匿名函数,主要用于生成只有返回值的函数,用关键字lambda来定义,其书写形式为:

lambda <参数列表>:<返回值>
等同于
def <参数列表>:
<缩进>return <返回值>

lambda x:x+6 # at 0x000002261D8DD280>

(二)调用方式

这时候你可能会有疑问,调用一个函数的方式是函数名加小括号,那对于没有变量名的匿名函数又该如何调用呢?下面为你解答:

(lambda <参数列表>:<返回值>)(参数值)
利用这种方式可以调用匿名函数,但由于匿名函数是没有保存到系统当中的,如果下一次还想调用的时候就得重新输入一次,比较麻烦。这时可以用把匿名函数赋值给变量的方式拟定一个函数名,如果下一还想再使用这个匿名函数,就可以利用正常的方式调用了。
变量名= lambda <参数列表>:<返回值>
变量名(参数值)

(lambda x:x+6)(7) #13
fnc=lambda x:x+6
fnc(7) #13

六,函数的说明文档

在我们自定义完成一个函数后,有时候需要把这个函数分享出去或者给其他人去使用,但是别人不知道这个函数的作用是什么,也不知道该传入哪种类型的参数。这时就需要一个说明文档来解释这个函数,里面可以填入任何说明内容,包括函数的用处,参数的说明等等。添加方法在第一行加入说明字符串即可。如果想查看函数的说明文档,可利用以下方式:

1.利用help函数
2.利用function.__doc__的方式,不过这种方法会返回说明文档的字符串格式。

def add(x1,x2):
	'''
	说明:这是一个作加法运算的函数,返回两个加数的和。
	x1:加数1
	x2:加数2
	'''
	return x1+x2
help(add)
#    说明:这是一个作加法运算的函数,返回两个加数的和。
#    x1:加数1
#    x2:加数2
add.__doc__
#'\n\t说明:这是一个作加法运算的函数,返回两个加数的和。\n\tx1:加数1\n\tx2:加数2\n\t'

你可能感兴趣的:(python教程,python)