python函数

2021-07-16 13:04

阅读:707

标签:匹配   过程   生成器   求值   可变参数   简化   递归函数   要求   不能   

形参:定义中的参数列表成为形式参数,只是一种符号表达

实参:调用时写的参数是实际参数,是实实在在传入的值

可变位置参数:在参数前加一个星号*

可变关键字参数:在参数前加两个星号**

混合使用参数时,普通参数在前 可变参数在后,可变位置参数在可变关键字参数前面

 

参数解构

  非字典类型使用*解构成位置参数

  字典类型使用**解构成关键字参数

  提取的元素数目要和参数的要求匹配,也要和参数的类型匹配

作用域

  全局作用域:整个程序运行环境中都可见

  局部作用域:做函数,类等内部可见

闭包

  自由变量:在嵌套函数中,定义在外层函数作用域的局部变量
       闭包:在嵌套函数中,内层函数用到外层函数的自由变量

 

nonlocal

  将变量标记为不在本地作用域定义,而在上层的局部作用域中定义,但不能在全局作用域定义

变量名解析原则LEGB

  local,本地作用域。函数调用时创建调用结束消亡

  Enclosing,嵌套函数的外层函数的命名空间

  Global,全局作用域。解释器退出时消亡

  Build-in,内置模块的命名空间。生命周期从解释器启动到解释器退出

递归函数

函数直接或间接调用本身就是递归

递归需要有边界条件,递归前进段,递归返回段

递归一定要有边界条件。当边界条件不满足时递归前进,当边界条件满足时,递归返回

递归函数实现斐波那契数列:

def fib(x, a=0, b=1):
for i in range(x):
a, b = b, a + b
yield a
for j in fib(10):
print(j)

匿名函数

  匿名函数,即没有名字的函数

  使用lambda关键字定义匿名函数

  格式:lambda 参数列表:表达式;例:(lambda x:x**2)(4)

  labda表达式只能写在一行上,称为单行函数

  用途:

    在高阶函数传参时,使用lambda表达式,往往能简化代码

 

生成器 generator

  生成器指生成器对象,可以由生成器表达式得到,也可以使用yield关键字得到一个生成器函数,调用这个函数得到一个生成器对象

  生成器函数

    函数体中包含yield语句的函数,返回生成器对象

    生成器对象,时一个可迭代对象

    生成器对象时延迟计时,惰性求值的

包含yield语句的生成器函数生成生成器对象时,生成器函数的函数体不会立即执行

next(generator)会从函数的当前位置向后执行到之后碰到第一个yield语句,会弹出值,并暂停函数执行

再次调用next函数,和上一条一样的处理过程

没有多余的yield语句被执行,继续调用next函数,会抛出StopIteration异常

 

python函数

标签:匹配   过程   生成器   求值   可变参数   简化   递归函数   要求   不能   

原文地址:https://www.cnblogs.com/zuohaipeng/p/9532994.html


评论


亲,登录后才可以留言!