一. 定义一个函数 以def为关键字
def fun():
如果函数体为空, 则要用pass说明该函数体为空, 不然解释器不知道什么时候结束, 会报错
def fun():
pass
二. 参数
根据对象的类形性质, 函数参数分为传递可变类型与传递不可变类型
不可变类型 相当于C语言的值传递
def swap(a,b):
t=a;
a=b;
b=t;
print(a, b)
a=7
b=5
swap(a,b)
print(a,b)
执行结果
5 7
7 5
可变类型 相当于C语言的地址传递 比如 列表 字典
def changlist(mylist):
mylist.append([8,5,4])
print(mylist)
mylist=[1,2,3]
changlist(mylist)
print(mylist)
执行结果
[1, 2, 3, [8, 5, 4]]
[1, 2, 3, [8, 5, 4]]
函数参数按照功能划分 必须参数 关键字参数 默认参数 不定长参数
必须参数 参数必须要有且对应
错误示例
def fun(a):
print(a)
fun()
关键字 按关键字匹配参数
def plus(str,num):
print(num,str)
plus(5,'hello')
plus(num=6,str='hello')
执行结果
hello 5
6 hello
默认参数 默认的参数写右边
def fun(name,age=18):
print(name,'---',age)
fun('cat')
执行结果
cat --- 18
错误示例
def fun(age=18,name):
print(name,'---',age)
fun('cat')
正确样例
def fun(name,age=18):
print(name,'---',age)
fun('cat',16)
执行结果
cat --- 16
不定长参数
def printsome(arg1,*vartuple): # *代表不定长元组
print(arg1)
print(vartuple)
printsome(10,64,88)
10
(64, 88)
def printsome(arg1,**vardir): # **代表不定长字典
print(arg1)
print(vardir)
printsome(10,a=64,b=88)
10
{'a': 64, 'b': 88}
三. 返回值
所有函数都有返回值, 没有return 返回None
def funx(x):
def funy(y):
return x*y
return funy #funy 返回的是一个对象
print(funx(5)(7)) #funx(5)===funy funx(5)(7)====funy(7)
35
错误示例
def funx(x):
def funy(y):
return x*y
return funy() #funy() 返回的是funy()的返回值, 该属于函数调用, 没有返回值
print(fun(5)(7))
def funx(x):
def funy(y):
return x*y
return funy(7) #funy() 返回的是funy()的返回值, 该属于函数调用, 没有返回值
print(fun(5))
35
四. 匿名函数 一个表达式, 不是代码块
不使用def ,使用 lambda 关键字创建 (可以访问全局变量)
count = lambda a,b : a+b
变量 参数 函数体及返回值
print(count(1,2))
3