函数概念:
功能模块化
具有名称的,实现特定功能的代码集合(可以重复利用)
python定义函数: #不建议超过20行,过于复杂
关键字:def #define function
def max([形参列表]): #定义一个名叫max的函数,()内可以传多个参
...
... #函数体
return #返回值(可以不写,等于没有返回值)
注:python是弱数据类型,参数和返回值类型不做要求
Python调用函数: #函数本身不会执行,必须通过调用来执行
不含参函数调用:
max() #调用max函数
含参函数调用:
def max(name,age): #定义一个含参函数
print(f’我的名字是{name}’)
print(f’我的年龄是{age}’)
max(‘小王’,’18’) #输入参数并调用
运行结果如下:
函数的分类:
按有无参数:
含参函数
无参函数
按有无返回值:
有返回值函数 #返回结果,例如做运算、判断等
无返回值函数 #仅输出,如上述max函数
return关键字使用:
只能出现在函数中,函数执行到return时,会立即结束执行,
并且返回return的结果
与if搭配用于判断真假:
Return False #结果为假
Return True #结果为真
函数内常用注释:
“”” #文档注释
...
...
... #这是注释的内容
”””
局部变量(local variable)与全局变量(global variable)
局部变量:
定义在函数内部的变量,在函数外无法使用
全局变量:
定义在脚本内的变量(最外层,与函数同级别),在函数内外都能用
注:在函数内部,全局变量仅可以被访问,不可以被修改(其他语言有的可以改,但不建议)
如一定要改,则需要先在函数体前声明
global ‘全局变量’ 即可
函数调用的内存分析:
内存溢出:
内存不够用
内存泄漏:
垃圾内存没有得到回收
函数调用从内存角度来看,就是压栈操作(push)
函数调用结束后,就会出栈/弹栈(pop)
#每次调用结束,局部变量就会被释放,否则会出现栈内存溢出(存不下)的情况
函数参数的问题:
默认值参数:
在定义时直接赋值,然后直接调用(默认值参数必须在普通参数后面)
可变参数:
加个*号,就是可变参数(eg:*args)
有多个参数时:封装成一个元祖,调用方式与元祖一样
命名参数:
加**,封装成字典,调用方式与字典一样
函数递归(recursion):(做法略)
自身调用
终止条件
注:递归效率一般不高