1、函数创建语句--def
在python中我们用def语句创建函数语法如下:
def function_nam(参数): #def 函数名(参数)
function_body #函数内容主体,必须缩进,我的习惯是缩到与函数名对齐
2、python不在乎函数声明顺序
python不允许调用未声明函数
def foo():
print("aa")
bar()
foo() #报错,因为bar没有定义
python不在乎函数声明顺序
def foo():
print("foo")
bar() #可以调用顺序之后的函数
def bar()
print("bar")
3.调用函数
通过函数名()的形式调用,如果不加(),只是对函数的引用,函数()中可以加入参数
>>> def foo():
... print('foo')
...
>>> foo()
foo
>>> foo
<function foo at 0x7ff829658e18>
4.函数参数
创建函数时可以定义参数,不像java,c,python不需要加类型符。python参数还可以定义默认值
def get_info(name,age):
print('name is %s ,age is %s' %(name,age))
get_info('libai',18) #或者get_info(name='libai',age=18)
def get_info(name='libai',age=18): #在创建函数时指定参数的默认值
print('name is %s ,age is %s' %(name,age))
get_info() #当不指定传参值时,函数采用默认值
5.参数组,指针做形参
python允许程序员执行一个没有显示定义参数的函数
相应的方法是把一个字典作为参数传递给函数
>>> a
{'name': 'libai', 'age': 18}>>> def func(*args):
... print(args[0]['name']) #输出字典的一个值
... print(args[0]) #输出下标为0的字典
... print(args) #输出整个字典
... print(args[1]) #输出错误
...
>>> func(a)libai
{'name': 'libai', 'age': 18}
({'name': 'libai', 'age': 18},)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in func
IndexError: tuple index out of range
如果大家学过c语言,应该知道*args就是一个指针类型,可以指向一个列表,通过下标的形式,我们可以指向多个列表
>>> a={'name':'jjh'}
>>> b={'name':'zzz'}
>>> def func(*avgs):
... print(avgs[0],avgs[1])
...
>>> func(a,b)
{'name': 'jjh'} {'name': 'zzz'}
6.匿名函数 lambda
python允许用lambda关键字创建匿名函数
匿名不需要以def方式声明,lambda一般用于创建较简单的函数
>>> a= lambda x,y: x+y
>>> a(1,2)
3
7.偏函数
定义:偏函数的概念是将函数式编程的概念和默认参数以及可变参数结合在一起
一个带有多个参数的函数,如果其中某些参数基本上是固定的,那么就可以通过偏函数为这些参数赋默认值
在使用偏函数时需导入模块 : from functionls import partial
>>> def add(x,y):
... return x+y
>>> from functools import partial
>>> add_10=partial(add,10)
>>> print(add_10(22))
32
8.递归函数
定义:如果函数包含了对其自身的调用,该函数就是递归的
在操作系统(linux)中,查看某一目录内所有文件,修改权限等都是递归的应用
一个可以执行的递归函数需要有一个结束判断,如下
>>> print(add_10(22))
32
>>> def func(x):
... if(x<=1): #递归函数需要一个结束递归的判断
... return 1
... return func(x-1)*x
...
>>> print(func(10))
3628800
9.生成器
定义:从句法上讲,生成器是一个带yield语句的函数
一个函数或者子程序只返回一次,但一个生成器能暂停执行并返回一个中间结果
yield语句返回一个值给调用者并暂停执行
当生成器的next()方法被到用时,它会准确地从暂停的地方继续
当到达一个真正的返回或函数或结束没有更多的值返回时,就会抛出StopIteration异常
>>> def simp_gen():
... yield '1'
... yield '2'
...
>>> mygen=simp_gen()
>>> print(next(mygen))
1
>>> print(next(mygen))
2
>>> print(next(mygen))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration