python中的函数
函数是个好东西,我觉得函数要比类用的更多,函数化编程从维护和开发中都带来了很多方便,函数就好比是模块,程序是由多个函数模块组装起来的乐高玩具
函数基本定义
python中定于函数使用def关键字,如下:1
2
3
4
5
6def func(argv):
"""
这是注释
"""
somecode
return something
其中func()就是一个函数,argv是函数的参数不是必须的,return 也不是必须的,没有return 就意味着函数只是执行,没有返回值是None
定义函数是不会执行函数的,上面我们只是定义了一个名为func的函数,并没有被执行,只有函数被调用的时候才会被执行
__doc__
是函数的文档信息也就是注释信息
1 | def func(): |
上面2段3个双引号之前的内容就是文档信息,当然如果你想重新定义doc 也是可以的如下:1
2
3
4
5
6
7
8def func():
"""
This is Comments
"""
func.__doc__ = "Comments"
return 'a'
print(func.__doc__)
Comments
这样就可以把doc重新定义了
__name__
返回函数的命名空间名称
是不能被重定义的,当def 或者lambda都会产生一个新的命名空间1
2
3
4
5
6
7
8def func():
"""
This is Comments
"""
func.__name__ = "I am not func"
return 'a'
print(func.__name__)
func
__module__
返回函数定义所在模块的名字
我们先写一个test.py 在里面定义个func ,然后在写一个test2.py import test.py 中的func 然后打印func.module
输出test,也就是说 func 这个函数是在test.py这个模块里面的1
2
3
4
5
6
7
8
9
10
11
12# test.py
def func():
"""
This is Comments
"""
print(func.__moudle__)
return True
# test2.py
from test import func
print(func.__module__)
test
函数的参数
参数分为4种
1. func(a) # a这个参数只是一个形参只是一个占位符在传递的时候我们可以使用 func(1) 或者func(a=1),如果直接使用func()就会报错,
2. func(a=3) # a这个参数相当于实参,也就说说参数a有一个默认值是3,在传递的时候如果不专递a,那么就使用默认的3 例如:func()
3. func(*arg) # arg 任意多个实参的集合,且类型的是tuple,调用的使用我们可以传递任意参数func(1,2,3,4,5)
4. func(**argv) # argv 同样任意 多个参数和一个*号的区别 是他必须指定形参和实参,是一个字典类型func(a=1,b=3,c=5)
5. 传递顺序问题 func(a,a=3,*arg,**argv)当多种参数一起传递的时候,一定是这样子的传递顺序,否则会报错
举例子:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30# 第一种
def func(a):
print(a)
func(1)
1
# 第二种
def func(a=3):
print(a)
func()
3
func(4)
4
func(a=5)
5
# 第三种
def func(*argv):
print(argv)
argv = (1,2,3)
func(*argv)
(1,2,3)
# 第四种
def func(**some):
print(some)
some = {"name":"Seal","class":12}
func(**some)
{"name":"Seal","class":12}
lambda
表达式,是一个单行的函数表达式属于匿名函数,不需要return语句 会自动return
lambda更简洁,这个符合python的精神 “Simple is better than complex.(简洁胜于复杂)”,其实lambda是一个很好用的东西在很多地方都可以使用1
2
3
4
5
6
7
8
9
10
11# 2个数相加
def func(a,b):
print a+b
# lamdba
a = lambda a,b: a+b
func(2,3)
5
a(2,3)
5