Python攻关之函数

本文探讨了Python中函数的重要性和使用,包括函数创建、命名规则、形参与实参、参数管理、返回值、作用域规则,特别是全局与局部变量的处理。还介绍了高阶函数的特性,如函数作为值传递和返回,以及递归函数的概念,如阶乘计算和递归的特点,强调了递归与循环的关系以及效率问题。
摘要由CSDN通过智能技术生成

一、函数的作用:
1.减少重复代码
2.方便修改,更易扩展
3.保持代码的一致性

二、
2.1函数的创建

 def f():
     print('ok')     #创建

 f()                 #调用一定记得加括号

2.2函数的命名规则

同变量的命名规则

3.3函数的形参与实参

三、参数

def print_info(name,age):
     print('Name: %s'%name)
     print('Age: %d'%age)
print_info('zhang',18)   #必须参数    顺序必须一致
print_info(age=18,name='zhang')    #关键字参数
默认参数   例如 def print_info(name,age,sex='male')
如果有默认参数  必须放左边

 def add(*args):           #不定长参数
      print(args)          #args 是一个元组
      sum = 0
      for i in args:
          sum+=i
      print(sum)
 add(1,2,3,4)
def print_info(*args,**kwargs):
	print(args)        #('zhang', 18, 'male')
    print(kwargs)      #{'job': 'IT', 'height': 180}
    for i in kwargs:
    	print_info('%s:%s'%(i,kwargs[i]))
     	print_info('zhang',18,'male',job = 'IT',height = 180)
关于不定长参数的位置:*args放在函数的左边    **kwargs放在右边    
函数参数的顺序
 def func(name,age=22,*args,**kwargs)
 顺序为   默认参数   关键字参数   不定长参数 (*args在左边  **kwargs在右边)

四、函数的返回值

 def f():
     print('ok')
     return 10         #作用:1.结束函数   2.返回某个对象
     print('zhang')    #这里的值就没有意义了 因为已经return了

 a = f()
 print(a)
 print(f())


 def add(*args):
     print(args)
     sum = 0
     for i in args:
         sum+=i
     print(sum)
     return sum     #返回函数的计算结果 以便后面调用
 a = add(1,4)
 print(a)

 return 的注意点:1.函数如果没有return,会默认返回一个None
              2.如果return 多个对象,那么Python会将这些对象封装成一个元组

五、函数的作用域
1.变量查找顺序:LEGB作用域局部 > 外层作用域 > 当前模块中的全局 > python内置作用域
2.只有模块、类、及函数才能引入新作用域
3.对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量
4.内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字、嵌套作用域变量要使用nonlocal关键字、nonlocal是python3新增的关键字,有了这个关键字,就能完美的实现闭包了

六、高阶函数
函数名可以进行赋值
函数名可以作为函数参数,还可以作为函数的返回值

 def f(n):
     return  n*n

 def foo(a,b,func):

     ret = func(a)+func(b)
     return  ret

 print(foo(1,2,f))

七、递归函数

求阶乘

 def fact(n):
     if n == 1:
         return 1
     else:
         return  n*fact(n-1)
 print(fact(5))

关于递归的特点
1.函数调用自身函数
2.有一个结束条件

但凡是递归可以写的,循环都可以解决
递归的效率在很多时候很低

def fibo(n):
    # before = 0
    # after = 1
    if n==0 or n==1:
        return n
    else:
        return fibo(n-1)+fibo(n-2)
print(fibo(3))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值