Python函数
函数介绍
- 函数概念
java函数构成 名称 参数 返回值类型 方法体 访问修饰符
python函数 构成 名称 方法体 参数
参数不需要指定数据类型
函数没有重载,若函数名相同,则覆盖原有的参数,后面覆盖前面函数
函数的参数可以带默认值,当不传递实参时,执行形参结果;当传递实参时,执行传递参数运算结果
函数调用的时候,可以带有参数名称,此时按照名称进行赋值
def add (a=100,b=200)
print(a)
print(b)
add(b=1,a=2)
打印结果为:2 1
一般情况下,某段代码需要反复使用多次,
而且这段代码又具备特定的功能,
我们会把这段代码组织成为单独的功能模块,
这个功能模块就可以叫做函数
-
函数的定义和调用
- 函数的定义(函数可以重复调用,不能重复定义)
语法格式: def 函数名(): 代码块...
- 函数的调用
调用格式: 函数名()
-
练习 封装函数打印99乘法表:
# 函数的定义
def show99():
i = 1
while i < 10:
j = 1
while j <= i:
print("%d * %d = %d\t"%(j,i,i*j),end=" ")
j += 1
i += 1
print("")
# 函数的调用,只有调用函数,函数中的代码才会被执行
show99()
- 函数的文档说明
使用help(自定义方法名) 可以查看函数的文档说明
help(show99)
显示结果:
Help on function show99 in module __main__:
show99()
# 函数的定义: 打印99乘法表
函数的参数
- 定义带有参数的函数
语法格式:
def 方法名(形参...):
代码块(带代码中,形参可以被理解为定义好的一个变量)
- 带参数的函数的调用
方法名(实际参数)
注意:参数的个数要匹配
-
不定长参数
*args 表示一组值的集合,普通数据
**kwargs 表示kv格式的数据
-
引用传参(可变,不可变)
函数的返回值
- 什么叫做返回值(生活实例)
让同桌帮你买饭回来,对你来说,饭,就是返回值
- 开发中的返回值
两个数字求和函数,有时候,调用者只是想得到这个和。
- 带返回值函数的案例:
def getSum(a,b):
c = a + b
return c
#简化:
def getSum(a,b):
return a + b
#调用
result = getSum(10,20)
#这时候的result就是得到的返回值
四种函数的类型
- 无参数,无返回值
- 无参数,有返回值
- 有参数,无返回值
- 有参数,有返回值
函数的封装强化练习
- 函数的嵌套调用
def test2():
print("test2")
def test1():
#调用函数2
test2()
test1()
-
封装函数练习
- 封装函数,完成自定义个数的*组成的直线
比如:参数为5,打印出如下内容 *****
- 封装函数,完成 自定义行数的 上题 实现的直线
例如:参数为3,打印如下效果 ***** ***** *****
- 封装函数
封装求3个数字平均数的函数
局部变量
- 概念
在函数内部定义,用来存储临时数据的变量,称为临时变量,形参也是局部变量
- 注意
-
在函数内部定义,作用域为函数内部
-
不同函数中可以存在同名变量,互不干涉,没有关系
-
全局变量
-
概念
- 既能在其中一个函数中使用,又能在其他函数中使用的变量,成为全局变量
#例: a = 100 def test1(): print(a) def test2(): print(a)
-
全局变量与局部变量同名问题
- 可以重名
a = 100 def test(): a = 200 print(a) test() #这种写法是允许的,打印出的结果为“200”,访问的为离的近的
- 函数内部修改全局变量问题
局部变量不能修改全局变量的值,如果需要修改就要加关键字global,换句话说,只要局部变量中使用global关键字,这个变量就成为全局变量 不能在global前定义重名的局部变量 a = 100 def test(): # global a(需要手动声明a 为全局的才可以进行修改) a += 10 print(a)
如果在函数内部,想修改全局变量的值,需要手动将变量前使用global进行修饰(可变类型的全局变量,不需要修饰)
例:
a = [1]
def test():
a.append(10)
print(a)
test()
函数应用:图书管理系统
def showMenu():
print("1.添加图书")
print("2.查询图书")
print("3.删除图书")
print("4.修改图书")
print("5.退出系统")
函数的返回值二
- 多个返回值问题
允许多个返回值,本质利用的是元组
def divid(a,b):
shang = a // b
yushu = a % b
return shang,yushu
value1,value2=divid(10,20)
print(value1)
print(value2)
函数的参数二
- 缺省参数
# 缺省参数
def test3(a,b=10):
print(a)
print(b)
test3(100)
- 可变参数
# 可变参数 *tu 元组形式
def test4(*tu):
print(a)
test4(1)
test4(1,2,3)
test4([1,2,3])
test4((1,2,3))
# 可变参数 **kw 字典形式
def test5(**kw):
print(kw)
test5(m=1,b=2)
-
引用参数(可以画图讲解)
- 基本参数
a=100 # 在方法中修改变量的值 def changValue(v): v = 200 changValue(a) # 打印发现a的值依旧为100 print(a)
- 引用参数
list1=[1,2,3] # 在函数中修改变量的值 def changValue(v): v[0] = 100 changValue(list1) # 打印发现list1的值变成了[100, 2, 3] print(list1)
递归函数
- 递归概念
占用内存
在函数中不是调用其他而是调用自身,这种调用方式,称为递归调用
- 递归的使用
- 递归求 ∑100
- 求 n!
匿名函数 lambda
- 概念
用lambda关键字创建的简单的没有函数名的函数,这种函数不用def声明
适应于简单的逻辑判断
- 语法
语法格式:
lambda 参数... : 表达式
sum = lambda args1,args2: args1+args2
print(sum(1,2))
#结果为:3
- 注意事项:
- 在匿名函数中,不能有return
- 可以有0、1、多个参数
- 表达式计算后只能返回一个值