python中function函数_Python基础---函数Function

时间:2025-02-24 22:16:49

函数Function

定义:带名字的代码块,用于完成具体的工作

最基本的一种代码抽象的方式,借助函数,可以不用关心底层的具体计算过程,直接在更高层次上思考问题

在Python中,内置了多种多样的函数,可以直接调用,例如abs(), len(), list()。。。

函数要素:

1、在Python中,使用关键字 def func_name():来告诉Python定义了一个函数func_name

2、在函数名称后的括号内,可以设置函数参数

函数参数包含:形参、位置实参、关键字实参、默认值、收集参数、关键字收集参数

1、形参:函数完成其工作所需的一种信息

1def youname(first_name, last_name): # first_name, last_name即为形参

2、位置实参:调用函数时传递给函数的信息,以传递时的前后顺序一一对应函数的形参

1 def youname(first_name, last_name):2 name = first_name + ' ' +last_name3 print(())4

5

6 youname('alan', 'wood') # 实参位置对应形参,实参位置不同,输出结果不同7 --->Alan Wood8

9 youname('wood', 'alan')10 --->Wood Alan

3、关键字实参:传递给函数的名称-值对,传递时使用' = '明确表示相对应

1 def youname(first_name, last_name):2 name = first_name + ' ' +last_name3 print(())4

5

6 youname(last_name='alan', first_name='wood')7 --->Wood Alan

4、默认值:在定义函数时,给形参指定默认值,当传递实参到函数时,没有该形参,则该形参直接使用默认值

1 def youname(first_name, last_name='wood'):2 name = first_name + ' ' +last_name3 print(())4

5

6 youname('alan')7 --->Alan Wood8

9 youname('alan', 'simth')10 --->Alan Simth

5、收集参数:传递任意数量的实参,使用 ' *形参名' 代表该参数,该参数所接受的实参会组成一个元组Tuple

1 def youname(first_name, *last_names):

2print(type(last_names))

3 for last_name inlast_names: # last_names接收实参后形成元组,遍历出其中的值做后续操作4 name = first_name + ' ' +last_name5 print(())678 youname('alan', 'simth', 'wood', 'xu')

9 --->10 --->Alan Simth11 --->Alan Wood12 --->Alan Xu

6、关键字收集参数:使用任意数量的关键字参数,使用 '**形参名' 代表该参数,该参数所收集的实参,会组成一个字典Dict

1 def youname(first_name, last_name, **you_info):2 print(type(you_info))3 name = first_name + ' ' +last_name4 print(())5 for key, value inyou_info.items():6 print('your' + key + 'is' +value)7

8

9 youname('alan', 'simth', age='18', height='180cm')10 --->

11 --->Alan Simth12 --->your age is 18

13 --->your height is 180cm

函数参数顺序:

1、关键字收集参数必须在所有形参之后(即最后一位);

2、普通形参和收集参数之间的顺序,一般普通在前,收集在后;

3、普通参数位于何种收集参数之前,则必须使用该收集参数可以接受的格式;

4、一个函数的参数位中,只能存在一个收集参数或者一个关键字收集参数,普通参数不受限制

3、在函数中,可以使用return关键字将值返回到调用函数的代码行,可以将程序大部分的动作移到函数中去,简化程序

函数编写细节:

1、函数名应该具有对其功能的描述性,且只能使用小写字母和下划线

2、每个函数都应包含简要阐述其功能的注释,紧跟在函数定义后面,采用'''   '''格式;

其中必须包含:功能,参数,返回值非必须:示例,注意事项等

3、给形参指定默认值、对于调用函数时引入的关键字实参,等号两边不要有空格

4、每行代码不要超过79字符

5、如果程序或模块包含多个函数,可使用两个空行将相邻函数分开

模块Module:

函数的优点之一,是可以将代码块与主程序分离,

将函数存储在.py文件中,在需要使用时,使用import func_name语句导入到主程序中,这个文件就是一个模块

import语句允许在当前运行程序文件中,使用模块的代码

1 import name# 将上面的例子保存在文件中,import导入2

3 ('alan', 'simth', age='18', height='180cm')

导入特定的函数:from  file_name import func_name

1 from name importyouname2

3 youname('alan', 'simth', age='18', height='180cm')

使用as给函数或模块指定别名:

如果函数名与程序中现有的名称冲突,或者函数名太长,可指定一个别命,即外号

1 from name importyouname as yn2 #import name as n

3

4 yn('alan', 'simth', age='18', height='180cm')

5 # ('alan', 'simth', age='18', height='180cm')

使用 * 号运算符可以导入模块中所有的函数(一般不使用)

1 from name import *

2

3 youname('alan', 'simth', age='18', height='180cm')

递归函数:

定义:在函数内部,可以调用其他函数,但是如果一个函数在内部调用的是函数自身,则这个函数就是递归函数

1 deffunc(n):2 if n == 1:3 return 1

4 return n * func(n-1)5

6

7 num = func(5)8 print(num)9 --->120

优缺点:使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出

栈溢出:在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每进行一次函数调用,栈就会加一层栈帧,每当函数返回,则减少一层栈帧

但是栈的大小不是无限的,所以函数调用多次就会出现栈溢出

1 deffunc(n):2 if n == 1:3 return 1

4 return n * func(n-1)5

6

7 num = func(1001)8 print(num)9 --->RecursionError: maximum recursion depth exceeded

尾递归:解决栈溢出现象可以使用尾递归进行优化

尾递归是指,函数在返回的时候,调用自身本身,并且return语句不能包含表达式

这样,无论函数本身调用几次,都只占一个栈帧