一、函数定义
1 def name( parameters): #没有参数括号内可以为空
2 "函数描述" #其实就是注释
3 <代码块>
4 return [expression] #没有返回值可以不加[]内容,也可以省略return
def是定义函数的关键字,name是函数名,parameters是形参
函数描述可以省略,但建议要有
expression是返回值,可以没有返回值,也可以没有retrun。
函数在return处结束。
二、传参过程
这里需要了解几个名词:位置参数、关键参数、默认参数
1.位置参数:按照函数形式参数的顺序传递参数
def func(x,y):
print("x={0} y={1}".format(x,y))
func(3,4)
func(4,3)
#输出:
x=3 y=4
x=4 y=3
可以发现,位置参数的使用相当于C语言当中的函数调用方式。
2.关键参数:指的是在传递参数时,不必考虑形式参数的具体先后顺序,以“形式参数=实际参数”的形式传参。
def func(x,y):
print("x={0} y={1}".format(x,y))
func(y=3,x=4)
#输出结果:
x=4 y=3
3.默认参数:如果函数有默认参数,允许调用函数时不对默认参数传参(这时形参为默认值)
def text2(x,y=2):#y为默认参数,非必须传递
print(x,y)
text2(1) #可以这样调用
text2(1,3) #也可以这样调用
#输出结果:
1 2
1 3
4.参数组
如何向函数传递一个元组呢?
需要参数组。
def text3(*args):
print(args)
text3(1,2,3) #当使用参数组时,调用函数可以不传参
#输出:
(1,2,3)
形参中*args是参数组,可以接收数量不固定的参数,也可以接收0个参数,并将这些参数组成一个元组在函数中使用。
参数组可以在参数个数不确定的情况下使用。
5.字典的传递
def text5(**kwargs):#向函数传递字典
print(kwargs)
text5() #调用函数时可以不传参
text5(name="liuwei",sex="man",index=3) #标准的传参传字典过程
#输出结果:
{“name”:"liuwei","sex":"man","index":3} #3是int型
这种传参方式很容易和关键参数混淆。
6.多种类型参数传递和优先级问题
def text6(a,b=2,*args,**kwargs):
print(a)
print(b)
print(args)
print(kwargs)
text6("woo",3,sex="m",hobby="aa")
#输出结果:
woo
3
()
{'sex': 'm', 'hobby': 'aa'}
在定义函数时,形参应当遵循 普通参数-->默认参数-->参数组-->字典参数 的顺序
在调用函数时,实参应当遵循 位置参数-->关键参数-->参数组-->字典参数 的顺序
这样做为的是避免混淆。
7.如何传递列表
(1)位置参数
def func(names): print(names) names[1] = 'jujinyi' names = ['aaron','jim'] func(names) print(names) #输出: ['aaron', 'jim'] ['aaron', 'jujinyi']