函数
函数:可以实现一个功能的代码组
自定义函数的定义必须要使用def关键字
函数命名通常使用英文结合数字或下划线,严格区分大小写,不能和关键字相同
格式:
def 函数名():
函数功能语句1()
函数功能语句2()
函数名()
具有参数的函数结构
def 函数(参数名,参数名...):
函数功能语句1
函数功能语句2
函数名(值,值...)
还有一种使用return语句将函数执行完毕的结果返回
一般return一般只能返回一个值,如需返回多个数据可以将其组成序列类型再返回
def 函数名():
函数功能语句1()
函数功能语句2()
return 语句
参数分为四类:
- 普通参数
- 默认参数
- 关键字参数
- 收集参数
我们以后用到的最多的就是关键字参数
关键字参数
语法:
def 函数名(形参名 = 默认值,形参名 = 默认值,...):
函数功能语句1
函数功能语句2
...
调用:
函数名(形参名 = 实参名,形参名 = 实参名,...)
一般实参和形参按照位置要一一对应,比较麻烦容易出错
引入关键字参数后,不用考虑参数位置
例:
def stu(name,age,addr):
print("I am a student!")
print("I am {0},{1} years old , and I live in {2}".format(name,age,addr))
n = stu('Jason',7,'laifu hotle')
输出结果:
I am a student!
I am Jason,7 years old , and I live in laifu hotle
收集参数
把没有位置,不能和定义时的参数位置相对应的参数,放入一个特定的数据结构中
def 函数名(*形参名):
函数功能语句1
函数功能语句2
...
调用:
函数名(实参,实参,实参,...)
例:
def stu(*args):
print("Hello,everyone!")
for item in args:
print(item)
stu("liuying",18,"Beijing","666","single")
输出结果:
Hello,everyone!
liuying
18
Beijing
666
single
lambda表达式
如果你觉得这样写函数很麻烦的话,实现一个很简单的功能还要写这么多行代码的话,python还提供使用lambda表达式
定义:
lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。
例:
a = lambda x,y : x+y
print(a(3,5))
输出结果:
8
例:
m = int(input("请输入m的值:"))
a = lambda x : 1 if m>3 else 2
print(a(2))
输出结果:
输入m的值:1
2
请输入m的值:5
1
函数的变量作用域
变量分:全局变量和局部变量
全局变量:在函数外部声明,可在全局范围使用,包括局部内部使用
局部变量:在函数内部声明,只能在局部内使用
如果需要将局部变量变为全局变量,可以使用python提供的关键字global
def 函数名():
global 局部变量
其他操作
例:
num = 1
def fun():
num = 123
print(num)
fun()
print(num)
输出结果:
123
1
想要对全局变量进行修改,要用到关键字global
num = 1
def fun():
global num
num = 123
print(num)
fun()
print(num)
输出结果:
123
123
在全局变量和局部变量同名时,局部环境指挥使用局部变量,忽略同名的全局变量
递归函数
函数中调用和当前函数本身的函数,就是递归函数
例子
def func(n):
print(n)
if n>0:
func(n-1)
else:
print('------')
print(n)
func(int(input("请输入:")))
输出结果
请输入:5
5
4
3
2
1
0
------
0
1
2
3
4
5
小提示:递归函数可以写成循环,但递归函数胜在定义简单,逻辑清晰