python 入坑路-6 函数

函数定义:

我们上初中那会也学过函数,即:y=2x,说白了,这里面总共就两个变量x和y,x是自变量,y是因变量(因为x变而变),y是x的函数。自变量的取值范围,叫做这个函数的定义域。

编程中的函数:

1 python 中函数定义:
2 
3 关键字:def 
4 
5 例如 : 
def func(x,y): #func 函数名称 6 x=2*y 7 return x #可以有return 值,也可以没有 当没有return 是返回none

函数的好处:

 1 #或者说为什么要使用函数,
 2 
 3 #1.代码重复利用。
 4 #2.代码保持一致性。
 5 #3.可扩展性。
 6 
 7 #例如 设置一个邮件报警程序,
 8 
 9 if cpu 使用率>90%10     报警程序
11 if 内存使用率>90%
12     报警程序
13 if 硬盘使用率>90%
14     报警程序
15 。。。。
16 在中情况下就可以使用函数,定义一个报警程序函数,在需要报警时使用,可以节省工作时间,提高效率,
17 
18 当报警内容出现更改,例如:邮件服务器、或者用户名,密码需要更改,如果没有使用函数就需要每个地方修改,也可能出现遗漏的情况,
19 
20 如果使用了函数,只要修改函数的内容,其他调用的地方也跟着修改,避免重复,无意义的劳动。

函数的调用

 1 #函数的调用:
 2 #例如:先定义函数
 3 def avg(a,b,c):
 4     avg=(a+b+c)/3
 5     return avg
 6 
 7 #调用,输入函数名,如果函数有参数,输入参数,
 8 result=avg(1,2,3)
 9 print(result)
10 2

函数中的一些东西

形参,实参,位置参数,关键字参数,返回值,*args,**kwargs

1 #例如
2 >>> def avg(a,b,c):
3 ...     avg=(a+b+c)/3
4 ...     return avg
5 ...
6 >>> result=avg(1,2,3)
7 >>> print(result)
8 2.0

#例子中的 a,b,c 就是形参, 顾名思义就是形式上的参数,没有调用时时不存在的。
#调用函数中的 1,2,3 是实参,顾名思义就是实际上的参数,实际存在内存中的。
#1,2,3 与 a,b,c 一一对应 叫位置参数,也可以用关键字调用,如下例
>>> def func(x,y):
...     z=x/y
...     return z
...
>>> print(func(y=4,x=2))
0.5
#利用关键字调用时,位置不必固定,但是位置参数时,位置是固定的如下例:
>>> print(func(1,2))
0.5
>>> print(func(2,1))
2.0
>>>
#一般情况参数不能少给,(默认参数除外,下面说明),也不能多给。
#当位置参数,关键字参数混用时需要注意:位置参数一定在前,关键字参数在后,位置参数赋值,关键字参数不能再赋值,都会报错。
>>> func(1,x=1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: func() got multiple values for argument 'x'
#正确如下
>>>>>> func(1,y=1)
1.0
>>>
#一般情况也不能少给参数,除非有默认参数
>>> func(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: func() missing 1 required positional argument: 'y'
#除非有默认参数 ,默认参数,调用时有给就用 调用时给的,没有就用默认的。默认参数用处:安装软件时,默认路径。连接数据库时默认端口。
>>> def func1(x,y=1):
...     z=x/y
...     return z
...
>>> func1(2)
2.0
>>>func1(6,2)
3.0
>>>
#一般也不能多给参数 ,非固定参数*args,**kwargs.
>>> func(1,y=1,2)
  File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
>>>
#使用*args (ps:args只是一个类似名称,一般都用这个名字,也可用其它)多给的参数会返回成元组,用在实参不固定个数的情况下,例如:
#如果没有传参,就返回一个空元组
>>> def test(x,*args):
...     print(x,args)
...
>>> test(1,2,3,4,3,43,3,4,23,4)
1 (2, 3, 4, 3, 43, 3, 4, 23, 4)
>>>def test(x,*a):
...     print(x,a)
...
>>> test(1,232,32,3,23,2,3)
1 (232, 32, 3, 23, 2, 3)
>>>
#使用 **kwargs ,把多个关键字,字符串转换成字典。也可以用**字典传参数,如果没有传参,就返回一个空字典,参数组一定要放在后面。
>>> def test2(**kwargs):
...     print(kwargs)
...
>>> test2(name="niubi",age=250,salary=999999)
{'name': 'niubi', 'age': 250, 'salary': 999999}
>>> test2(**{"name":"niubi2","age":9999})
{'name': 'niubi2', 'age': 9999}
>>>

 

posted @ 2017-12-26 15:07  东郭仔  阅读(472)  评论(0)    收藏  举报