函数相关内容

定义一个函数:

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*y
7     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') #不传国籍,则默认为china 8 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**2
print(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 ret
print(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 reduce
print(reduce(lambda x,y : x*y, range(1,6)))

 




原文地址:https://www.cnblogs.com/Finance-IT-gao/p/10367245.html