python函数,,函数的定义使用def


函数的定义

使用def语句,在依次写出函数名、括号、括号中的参数、冒号、函数体。如果函数需要返回值使用return语句返回。

def my_abs(x):    if x >=0:        return x    else:        return -xprint(my_abs(-2))#调用这个函数,-2为传递的参数

函数体内部执行时,遇到return 函数就执行完毕,并将结果返回。如果没有return语句,函数执行完毕也返回结果,只是这个结果是None。

def fun1(x,y):    if x > 0 and y > 0:        return x + y;        print(x)        print(y)print(fun1(1,5))

技术分享

只显示了return 的结果。x,y的值并没有打印。说明执行完return之后,就不再执行后面的代码了。

def fun1(x,y):    if x > 0 and y > 0:        x + y;    print(fun1(1,5))

技术分享

没有return 也会返回一个none.

多个返回值

Python 可以返回多个值,多种类型的值。

def test():    print(‘in the test‘)    return 1,‘hello‘,[‘hello‘,‘world‘],{‘name‘:‘xiaoming‘},(1,2,3)print(test())#(1, ‘hello‘, [‘hello‘, ‘world‘], {‘name‘: ‘xiaoming‘}, (1, 2, 3))

其实返回的是一个元组 ,元组中的每一项和定义的位置一致。如果返回的值只有一个,括号省略了。

函数的参数

如果定义了一个函数并设置了两个参数,调用的时候就要传值给函数,没传会报一个错误。

def test(x,y):    print(x)    print(y)print(test())

技术分享

当然也可以给这两个参数设置一个默认值。这个时候可以不用传参数。

def test(x=1,y=2):    print(x)    print(y)print(test())

技术分享

如果传递的参数大于设置的参数,那么也会报错。因为他们的位置是一一对应的。所以个数也必须一致。

def test(x=1,y=2):    print(x)    print(y)print(test(3,5,7))

技术分享

传递参数的时候也可以指定参数的值。这种叫关键字参数。

def test(x=1,y=2):    print(x)    print(y)x = 2y = 4print(test(y=y,x=x))

技术分享

关键字参数和位置参数的混用

def test(x,y,z):    print(x)    print(y)    print(z)print(test(3,z=2,y=5))

关键字参数不能写在位置参数前面,因为有位置参数会按照位置参数的方式去匹配形参。

参数组

如果要传递的参数不固定,可以用变量组的方式。

定义一个变量组,形参的变量名格式为*变量名。会把多个实参放到一个元组里面。

def test(*args):    print(args)test(1,2,3,4,5,6)#(1, 2, 3, 4, 5, 6)

也可以传一个列表过去。一样会把这个列表转成元组。

test(*[1,2,3,4])#(1, 2, 3, 4)

如果已知一个参数,其它参数不固定,可以把不确定的参数做为一个参数组。

def test1(x,*args):    print(x)    print(args)test1(1,2,3,4,5)

技术分享

以上只能接收位置参数或者列表,不能接收关键字参数。

传递字典

把N个关键字参数,转换成字典的方式

def test(**kwargs):    print(kwargs)test(name=‘alex‘,age=28)#{‘name‘: ‘alex‘, ‘age‘: 28}

如果要传字典 形参的定义必须是**,形参名一般都是kwargs。

也可以直接传一个字典过去。字典之前要加**。

test(**{‘name‘:‘alex‘,‘age‘:28})#{‘name‘: ‘alex‘, ‘age‘: 28}

取值用[key]:

def test(**kwargs):    print(kwargs)    print(kwargs[‘name‘])    print(kwargs[‘age‘])test(**{‘name‘:‘alex‘,‘age‘:28})

技术分享

几种参数组合使用

def test(name,age=18,*args,**kwargs):    print(name)    print(age)    print(args)    print(kwargs)test(‘xiaoming‘,age=34,sex=‘m‘,hobby=‘xuexi‘)

技术分享

参数传递过程如下:

1、首先name 传了一个位置参数。

2、age 传了一个关键字参数,因为age有默认值就算不传也可以的。

3、sex、hobby 这两个参数为关键字参数,而*arge并不能接收关键字参数,所以这些参数传给了**kwargs。

python函数

评论关闭