python函数
定义一个函数
def 函数名( 参数列表 ) :
函数体
return [ 表达式 ]
- 在没有参数时,要保留
()
- 在return时,会根据表达式返回一个值给调用方,如果不带返回值,则相当于返回 None
函数调用
通过函数名调用函数,也要注意在调用函数时参数的问题。
参数传递
在python中,类型属于对象,变量没有类型
在传入参数时,不同的参数类型会产生不同的影响
- 不可变对象,如整数、字符串、元组
- 可变对象,如列表、字典
传入不可变参数对象时,传入的是参数的值,不会对对象本身产生影响
传入可变参数对象时,传入的是对象,函数内对参数进行的操作会影响到函数外参数的内容,即函数内对参数的操作会在全局范围内对变量产生影响
# 传入可变参数
def change(mylist):
mylist.append([1,2,3,4])
print('函数内取值:',mylist)
return
mylist = [10,20,30]
change(mylist)
print('函数外取值:',mylist)
参数
调用函数时,可使用到的正式参数类型
- 必需参数
- 关键字参数
- 默认参数
- 不定长参数
必需参数
必需参数需要以正确的顺序传入函数,调用时的数量必须和声明时一样
关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值
使用关键字参数允许函数调用时参数的顺序与声明时不一致
def printinfo(name,age):
print('姓名',name)
print('年龄',age)
return
printinfo(age=50,name='Tom')
默认参数
调用函数时,如果没有传递参数,则会使用默认参数
def printinfo(name,age=15): # age默认值为 15
print('姓名',name)
print('年龄',age)
return
printinfo(age = 50,name='Tom')
printinfo(name='Amy')
不定长参数
需要一个函数处理比声明时更多的参数。这些参数叫做不定长参数。与之前的参数不同,声明时不会命名。
def printinfo(arg1 , *vartuple):
print('输出:')
print(arg1)
print(vartuple)
printinfo(70,80,90)
输出
70
(80,90)
加*
的参数会议元组的形式传入,存放所有未命名的变量,在函数调用时没有指定参数,他就是一个空元组,可以不向函数传递未命名变量
加了
**
的参数会以字典的形式导入
def printinfo(arg1, **vardict):
print(arg1)
print(vardict)
return
printinfo(1,a=2,b=3)
1
{‘a’:2 , ‘b’:3}
注:*
可以单独出现,如果出现单独的*
,则星号后的参数需要以关键字的方式传入
def test(a,b,*,c):
print(a)
print(b)
print(c)
return
text(1,2,c=5)
匿名函数
python使用 lambda 来创建匿名函数
-
lambda 只是一个表达式,函数体比 def 简单
-
lambda 的主体是一个表达式,而不是一个代码块。仅能封装有限的逻辑
-
lambda 函数有自己的命名空间,不能访问参数列表外或全局命名空间的参数
-
看上去只有一行,但等同于内联函数,主要是为了提高运行效率,减少不必要的栈内存使用
sum = lambda arg1,agr2: arg1+arg2 print(sum(10,20))
return 语句
return [表达式]
,用于退出函数,选择性地向调用方返回一个表达式。不带参数的 return语句返回 None。
def sum(arg1,arg2)
total = arg1 + arg2
return total
total = sum(1,2)
print(total)