定义一个函数:
1 def sayhi(): #定义函数2 print('hello I am nobody')3 sayhi() #调用函数
函数参数的定义:
1 def sayhi(name): #定义函数时,括号里写的叫形参2 print('hello,',name, '.my name is black girl,','约吗?-_-')3 sayhi('Alex') #调用函数时,括号里写的叫实参。4 5 def cal(x,y):6 res=x*y7 print(res) #调用时,实参传递给形参,一一对应8 cal(3,5) #3传给x,5传给y
默认参数:
1 def stu_info(name,age,course,country='china'): #把china作为country的默认参数,默认参数必须写在最后 2 print('*******学生信息*******')3 print('姓名:',name)4 print('年龄:',age)5 print('国籍:',country)6 print('课程:',course)7 stu_info('王铁锤',23,'python') #不传国籍,则默认为china8 stu_info('杨叫春',27, '高数')9 stu_info('山本一狼',35, '量化金融','日本')
关键参数:
1 def stu_info(name,age,course,country='china'):2 print('*******学生信息*******')3 print('姓名:',name)4 print('年龄:',age)5 print('国籍:',country)6 print('课程:',course)7 stu_info('王铁锤',course='python',age=23) #使用关键参数
非固定参数:把报警信息传送给运维人员
1.形参前面加星号
方式一:
def send_alert(msg,*args): print(msg,args)send_alert('有黑客侵入','Alex','岳云鹏','铁锤')
方式二:调用时自己打包传给形参
1 def send_alert(msg,*args):2 print(msg,args)3 send_alert('有黑客侵入',*['Alex','岳云鹏','铁锤']) #以列表或元组的形式自己打包,前面要加*
2.形参加**,以字典形式接收
方式一:
1 def send_alert(msg,**kwargs):2 print(msg,kwargs)3 send_alert('有黑客侵入',name='ji',age=23) #以列表或元组的形式自己打包,前面要加*
方式二:
1 def send_alert(msg,**kwargs):2 print(msg,kwargs)3 d={ 'name': 'ji', 'age': 23}4 send_alert('有黑客侵入',**d)
返回值:
1 def f(): 2 print('OK') 3 return 5 #一个返回值 4 a=f() 5 print(a) 6 7 def f(): 8 print('OK') 9 return 5,'ko',[1,5,'p'] #对个返回值会被打包成一个元组10 a=f()11 print(a)
作用域
count=10 #全局变量def outer(): count = 5 #E层局部变量 print(count) def us(): count=7 #local层局部变量 print(count) us()outer()print(count)
高阶函数:
def sq(n): return n**2print(sq(7))def foo(a,b,f): return f(a)+f(b)print(foo(2,3,sq)) #把函数名sq作为实参传给形参f,则foo()就是一个高阶函数
函数名作返回值:
def outer(): x=10 def inner(): print(x) return inner #inner变量装的是inner()函数的地址,把它返回给了outer()outer()() #调用inner()函数print(outer()) #outer()指向inner()函数print(outer) #outer变量装的是outer()函数的地址
递归函数
实现求n的阶乘:
def fac(n): ret=1 for i in range(1,n+1): ret=ret*i return retprint(fac(5))
用递归实现求n的阶乘:
def fac(n): if n==1: #递归结束的条件 return 1 return n*fac(n-1)print(fac(5))
用递归输出Fibonacci数列:
def fibo(n): if n<=1: #递归结束的条件 return n return fibo(n-1)+fibo(n-2)for i in range(8): print(fibo(i))print(fibo(8))
用内置函数reduce和lambda实现求阶乘:
from functools import reduceprint(reduce(lambda x,y : x*y, range(1,6)))