Python复习笔记(三)函数进阶_赋值语句

Python复习笔记(三)函数进阶_缺省参数_02

问题 1:在函数内部,针对参数使用 赋值语句,会不会影响调用函数时传递的 实参变量? —— 不会!


  • 无论传递的参数是 可变 还是 不可变
  • 只要 针对参数 使用 赋值语句,会在 函数内部 修改 局部变量的引用不会影响到 外部变量的引用

Python复习笔记(三)函数进阶_赋值语句_03

问题 2:如果传递的参数是 可变类型,在函数内部,使用 方法 修改了数据的内容,同样会影响到外部的数据

Python复习笔记(三)函数进阶_调用函数_04

面试题 —— +=

在 python 中,列表变量调用 += 本质上是在 执行列表变量 的 extend 方法,不会修改变量的引用

Python复习笔记(三)函数进阶_for循环_05

Python复习笔记(三)函数进阶_赋值语句_06

Python复习笔记(三)函数进阶_缺省参数_07

2) 调用带有多个缺省参数的函数


  • 在 调用函数时,如果有 多个缺省参数,需要指定参数名,这样解释器才能够知道参数的对应关系!

Python复习笔记(三)函数进阶_赋值语句_08

Python复习笔记(三)函数进阶_赋值语句_09

Python复习笔记(三)函数进阶_赋值语句_10

Python复习笔记(三)函数进阶_数据_11

Python复习笔记(三)函数进阶_赋值语句_12

综合


def f2(a, b, c=0, *args, d, **kw):     print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)     print(args)


f2(1, 2, 99, 33,'c',[1, 'c'], d=2, **b, ext=None, **extra)


Python复习笔记(三)函数进阶_数据_13

生成器

如果一个函数定义中包含 ​yield ​关键字,那么这个函数就不再是一个普通函数,而是一个 generator:

Python复习笔记(三)函数进阶_赋值语句_14

这里,难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到​​return​​语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用​​next()​​的时候执行遇到​​yield​​语句返回,再次执行时 从上次返回的​​yield​​语句处 继续执行

Python复习笔记(三)函数进阶_数据_15

可以看到,​​odd​​​不是普通函数,而是generator,在执行过程中,遇到​​yield​​​就中断,下次又继续执行。执行3次​​yield​​​后,已经没有​​yield​​​可以执行了,所以,第4次调用​​next(o)​​就报错。

用​​for​​​循环调用generator时,发现拿不到generator的​​return​​​语句的返回值。如果想要拿到返回值,必须捕获​​StopIteration​​​错误,返回值包含在​​StopIteration​​​的​​value​​中:

Python复习笔记(三)函数进阶_缺省参数_16