Python函数学习笔记

 

函数解构

1 . 可变位置参数必须在可变关键字参数之前, 就是* 必须在 ** 之前

2. 在可变关键字参数后不能定义之前已经定义过的可变位置参数的值, 可变参数不和默认位置参数一起出现. 可变参数后置.

3. 参数解构, 通过一个* 将线性结构的参数解构为位置参数传给函数中(此处解包和解构同义)

4. 将字典解构成关键字参数(必须是字典)

注意, 如果在之前定义的位置参数中与后面的字典中定义了相同名称的参数, 会在函数运行过程中报错.如下图所示:(定义的lst 与字典d 中均有a 变量的赋值, 造成二次赋值, 报错!)

提示: 尽量少的使用解构, 这样的代码会让自己和其他的代码阅读者难以理解.

 

参数槽

即限定参数输入, 如下图所示

*号后面的参数为命名参数, 若未指定, 则使用默认参数传入

使用参数槽时,  不能使用可变位置参数, 可变关键字参数, 必须放在命名参数之后.

类型示意

只有Python 3.5才有

仅仅只是一个示意, 对输入的类型进行示意, 不会对输入类型进行强制检查

作用相当于注释~

递归

Python 中 递归函数是有深度的, 可以通过 sys.getrecursionlimit()得到深度限制

可以通过sys.setrecusionlimit()来进行设定,

尽量避免使用递归函数, 在Python中非常慢

生成器

生成器的定义和函数类似, 但是有yield 语句, 执行到yield的时候, 会暂停, 再次next()会从暂停的地方继续执行~

当yield和 return同时存在的时候, return 的返回值会被忽略, 但是return还是能中断函数运行

此处能将这个函数用于计数~

在之前设定开服的脚本中, 第一次获取到最新的server_id后, 要进行设置多个游戏服开启的操作时, 能自动保存当前数值并开始叠加, 比新建一个变量更加方便~不需要对一个值进行多次赋值.~

当通过return结束生成器函数运行时, 可以将return的内容作为StopIteration的内容输出

协程: 用户空间的轻量线程~ 跑在一个线程内, 由用户空间调度(最重要)

高阶函数

  • 参数是函数
  • 返回值是函数

满足以上任意一点, 即为高阶函数

将函数作为一个值传入另一个函数中

闭包 : 当函数使用了负一级命名空间的变量, 当负一级命名空间, 所使用的变量或环境还存在, 这就称为闭包.

柯里化