在编写Python程序的过程中,可以将完成某个指定功能的语句提取出来,将其编写为函数。这样,在程序中可以方便地调用函数来完成这个功能,并且可以多次调用,多次完成这个功能,而不必重复的复制粘贴代码。另外,使用后,也可以使得程序更加清晰,更容易维护。
1.1函数的定义在Python程序中,在使用函数之前必须先定义函数,然后才能调用它。可以使用关键字def来定义一个函数,语法格式如下:
def<函数名>(参数列表): #def => define 定义
<函数语句>
return<返回值> #返回多个值的时候用“,”隔开
1.1.1格式
函数名:一般是指小写的,如果包含多个单词,使用_连接
参数列表:可以没有,也可以有一个或多个
返回值:
1. return可以返回一个值,也可以返回多个值,return后也可以不跟返回值,
甚至连return也没有,如果return后没有返回值,甚至连return也没有,
如果return后没有返回值,并且没有return语句,这样的函数都会返回None值。;
2. 执行了return后,return之后的语句不再执行。
当函数没有参数时,包含参数的圆括号必须写上,圆括号的“:”也不能省略。
1.1.2定义一个基本函数定义一个函数不代表去执行这个函数,使用函数之前肯定是先要定义
具体代码如下(无返回值):
def print_123(): #定义函数print_123()
print("123") #改行属于函数print_123()的内容
print_123()
----------------------------------
输出
123
Process finished with exit code 0
函数名类似于一个变量,可以进行赋值,程序在运行的时候并不是从上往下将函数里的函数语句执行了,而是只有被调用的时候才会再次回到函数并执行函数体里的函数语句,而在调用的时候会把函数赋值给function object,再有function name 执行函数语句。实现代码如下:
def print_123():
print("123")
function_name = print_123 #将函数print_123赋值给function_name
function_name() #调用函数functiong_name
------------------------------------
输出:
123
Process finished with exit code 0
如果有一个返回值,返回的是什么类型,调用函数后输出的就是什么类型;如果是多个返回值的时候,返回的都是元组。代码如下。
def return_1():
return "hello", 'h'
print(return_1(), type(return_1()))
def return_2():
return "hello"
print(return_2(), type(return_2()))
def return_3():
return 4
print(return_3(), type(return_3()))
def return_4():
return 4, 5, 10
print(return_4(), type(return_4()))
--------------------------------------------
输出:
('hello', 'h')
hello
4
(4, 5, 10)
Process finished with exit code 0
1.1.3计算元组内元素的和
代码如下。
def tpl_sum(T): #定义函数tpl_sum(T)
result = 0 #定义函数result的初始值
for i in T: #遍历T的每一个元素i
result += i #计算各个元素i的和
return result #返回计算结果
print("(1, 2, 3, 4)元组元素的和为:", tpl_sum((1, 2, 3, 4))) #使用函数tpl_sum()计算元组内元素的和
print("[3, 4, 5, 6]列表中的元素和为:", tpl_sum([3, 4, 5, 6])) #使用函数tpl_sum()计算列表内元素的和
print("[2.7, 2, 5.8]列表中元素的和为:", tpl_sum([2.7, 2, 5.8])) #使用函数tpl_sum()计算列表内元素的和
print("[1, 2, 2.4]列表中元素的和为:", tpl_sum([1, 2, 2.4])) #使用函数tpl_sum()计算列表内
-------------------------------------------------
输出:
(1, 2, 3, 4)元组元素的和为: 10
[3, 4, 5, 6]列表中的元素和为: 18
[2.7, 2, 5.8]列表中元素的和为: 10.5
[1, 2, 2.4]列表中元素的和为: 5.4
Process finished with exit code 0
1.2函数的参数
参数是函数的重要组成元素,Python中的函数的参数有多种形式,在调用某一个函数时,既可以向其传递参数,也可以不传递参数,但是这都不影响函数的正常调用。
位置参数:没有默认值的参数称为位置参数。
关键字参数:有默认值参数的称为关键字参数。关键字传参是根据key去匹配的
传参方式 :
传参的方式: 以位置参数的方式去传参:根据传入参数的顺序去匹配 以关键字参数的方式去传参:第一个关键字参数之后的必须都是关键字参数传参
形参定义的时候都是位置参数,传参的时候可以以位置参数也可以以关键字参数去传参 形参定义的时候是关键字参数,传参的时候可以以位置参数,也可以以关键字参数传参1.2.1形参于实参
形参:形式参数,在定义函数阶段,定义的函数的参数,这里面的参数叫做形参。
实参:实际参数,在调用阶段传入的实际参数,叫做实参。
def print_arg1(arg1): #函数中的arg1为形参
print(arg1)
print_arg1(1) #print_arg()中的1为实参
1.2.2默认参数
1.如果参数含有默认值,那么这个参数可以传,也可以不传。
def print_arg2(arg1=2): #定义一个有默认值参数的函数,默认值为2
print(arg1)
print_arg2() #没有给函数传参
print_arg2(1) #为函数传参
-------------------------------------------
输出:
2
1
Process finished with exit code 0
2.默认值的参数必须跟在非默认值的参数后面。
def print_arg3(arg2, arg1=2): #定义一个有默认值参数的函数,默认值为2
print(arg2, arg1)
print_arg3(4) #为arg2赋值
1.2.3特殊的参数
*args:arguments:一个或多个(位置)的参数。
:当传入多个值的时候,*args 代表多个值会把多个值打包成一个元组,而args = 元组
def print_args4(arg1, *args): #定义函数
print(arg1, *args) #输出arg1和*args的值 输出:1 2 3 4 5 6
print(args, type(args)) #输出args并打印出args的类型 输出:(2, 3, 4, 5, 6)
print_args4(1, 2, 3, 4, 5, 6) #向函数传参,arg1 = 1, *args = 2, 3, 4, 5, 6
**kwargs:keyword arguments:一个或多个(关键字)参数
当传入多个关键字参数,然后会把多个关键字参数打包成字典,kwargs = 字典。
def print_arg5(arg1, arg2, *args, **kwargs): #定义一个函数。
print(arg1, arg2, *args) #输出arg1,arg2,*args的值。 输出:1 2 3 4 5 6
print(kwargs, type(kwargs)) #输出kwargs的值和他的类型。 输出:{'value1': 10, 'value2': 11, 'value3': 12}
print_arg5(1, 2, 3, 4, 5, 6, value1 =10, value2 = 11, value3 = 12) #像函数print_arg5传参
注意:*args, **kwargs 只是解释器给我们提供的一个建议名称。 在不确定参数个数的时候可以使用这种方式。



