函数:
对程序逻辑进行结构化或过程化的一种编程方式,写函数的目的是为了代码的重用。
def函数名([形参]):#定义函数
‘’‘注释’’’
函数体
函数名([实参]) #执行函数
函数的创建:
def printlnfo():
print(’---------’)
print(‘人生苦短,我用python’)
print(’---------’)
printlnfo()#执行函数
返回值:
return 表示把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回,返回时可附带一个返回值,由return后面的参数指定。
程序一旦执行到return就会结束当前函数。当函数中没有return时,默认返回值是None
def add(a,b):
return a+b #返回a+b的值
c = add(1,2) #c = 3
参数:
def函数名字(参数1=数据1,参数2=数据2): #默认值参数
pass
函数名(参数1=数据1)#关键字参数
可变长参数
*args星号操作符之后的形参将作为元组传递给函数,元组保存了所有传递
**kwargs用于接收0个或者任意个的关键字参数,这里的关键字就是参数名字
参数顺序:
参数的顺序是位置参数,默认值参数,可变长参数
如果参数有多种类型,应按照一下这个顺序排序
第一个是位置参数 fun(a)
第二个是默认参数 fun(a,b=1)
第三个是可变长参数 fun(a,b=1,*c,**d)
在可变参数中,非关键字参数要在关键字参数前面
变量作用域:
变量的作用域就是定义的变量可以使用的代码范围
全局变量:是可以被所有的函数访问的,除非被删除掉,否则一直存在活到脚本运行结束
局部变量:只能在函数或代码块内部被调用,一旦函数或代码块执行完成,数据就会释放,引用比全局变量速度快,应优先考虑使用
变量的作用域:
当程序运行时,python先从局部作用域开始搜索变量,如果局部没有则从全局中找,找不到会抛出NameError,如果全局变量与局部变量重名,则内部访问则是局部变量,外部是全局变量
在函数中想要对全局变量进行修改,要用到关键字
global
匿名函数
lambda 参数1,参数2…:返回值
print((lambda x,y,z:x+y+z)(1,2,3))
递归函数:
程序调用自身的编程技巧称为递归(recursion)。
#使用递归方法实现5!
def fun(n):
if n == 1 or n == 0:
return 1
else:
return n * func(n-1)
print(fun(5))
要求输入一个数字表示是第几个数字,正确输出第n个斐波那契数
def fun(n):
if n < 0:
print(‘输入有误!’)
elif n ==1 or n == 2:
return 1
else:
return fun(n-1) + fun(n-2)
print(fun(6))
生成器函数:
我们之前学过元组生成器(i for i in range(10))
yield语句的函数也可以用来创建生成器对象
每次执行到yield语句并返回一个值之后会暂停或挂起后面代码的执行
下次通过生成器对象的_next_()方法、内置函数next()、for循环遍历生成器对象元素或其他方式显示”索要“数据”时恢复执行。
生成器–斐波那契
def f():
a,b = 1,1
while True:
yield a #暂停执行,需要时再产生一个新元素
a,b = b,a+b
a = f()
for i in range(10):
print(next(a),end=’ ')