函数:
1、函数什么是函数(what)
C语言是一门面向过程的语言,python和java为面向对象的语言。
函数就是行为、就是动作、就是功能、就是过程。
2、python如何定义函数
关键字 def 【defined function】
函数名称的命名规范就是变量命名规范
def 函数名称([参数列表]):
# 函数体
# [return 返回值]
3、函数分类:
1)是否存在返回值
(1)有返回值的函数
使用return关键字返回结果
函数遇到return关键字,则立刻返回
(2)无返回值的函数
2)是否存在参数
(1) 有参函数
参数的个数,根据情况任意
参数的类型,是任意类型
(2) 无参函数
3)函数定义者
(1)系统函数
由官方定义的函数
print、input、type
(2)第三方定义
需要安装这些模块,才能使用
pip install 模块名称
pip(python install package)
(3)自定义函数
我们写的函数
注意:(函数、变量……)命名时一定要注意,和系统的全局函数不要冲突!!
4.全局变量和局部变量:
1)全局变量:
直接定义在py(模块)文件中的变量
2)局部(本地)变量:
定义在函数内部的变量叫做局部变量
因此只能在函数内部使用,访问在外间访问到!!!
注意:全局变量在函数直接访问,可以正常访问,如果要在函数内部修改全局变量,python是不允许修改的。
若要强修改:
需要声明这个函数需要修改某个全局变量在函数的第一行,global关键字声明需要修改全局变量。
5.函数调用的本质
函数本质就是一个对象
压栈(push):将函数从堆内存中放到栈中执行
弹栈(pop):函数执行完成后出栈内存
引用传递和值传递:
引用传递:传递的本质是地址,是对象、是引用;
值传递:本质就是值,将实参的值传递给形参;
函数本质就是一个对象,参数的类型,是任意类型(python是弱数据类型的语言)
6.函数参数:
1)默认值参数:
就是说,如果函数的参数,在大多数情况下,值是固定的一个值,此时可以使用默认值参数;
这个时候,如果不传该参数,值就取默认的,如果传递了,则按照传递的算。
注意:默认值参数,一定要写在普通参数之后
2)可变参数:
在python,如果一个函数中参数可能有很多(这些参数,也可以没有),建议将这种参数设置为可变参数
function(* 参数名称(习惯性*args))
注意:可变参数默认是以元组封装所有参数
3)命名(关键字)参数:
function(**(变量=值))
7.函数递归:
1)什么是递归
递归的本质就是函数自身调用自身,直到中止条件达成为止。递归用到了分治的思想,即将复杂的问题分为多个重复的小问题,将小问题逐个解决从而达到解决复杂问题的目的。
2)递归两个条件:
(1)函数自身调用自身
(2)一定要有终止条件!!(否则是一个死循环)
注意:python中,不允许递归超过1000次,当然如果一定要调整,可以使用如下代码:
import sys
# 获取递归限制次数
sys.getrecursionlimit()
# 重新设置递归限制次数
sys.setrecursionlimit(10000)