(04)Python函数

  • A+
所属分类:Python学习

(04)Python函数

定义、调用函数

(04)Python函数(04)Python函数

(04)Python函数

作用域

函数是最小的作用域

返回值

(04)Python函数(04)Python函数(04)Python函数

return 结束一个函数

(04)Python函数

return 之后,函数内的任何语句不在执行

函数执行流程

  • 堆          可以随机访问,用于保存变量数据

  • 栈          先进后出,用于保存现场

  • 指令       顺序访问,用于存储程序指令

函数默认参数

(04)Python函数

默认参数让API简洁,但不失去灵活性

(04)Python函数

当重构的时候,可以很好的向下兼容

(04)Python函数

允许有多个默认参数,但是默认参数,需要放在参数列表的最后面

(04)Python函数

通常来说,当默认参数是可变的时候,需要特别注意作用域的问题。

在谈作用域

全局作用域(函数之外的,参数列表里的)

函数作用域(函数内定义的)

位置参数和关键字参数

(04)Python函数

位置参数和关键字参数是在函数调用时的概念。

(04)Python函数

当默认参数和关键字参数结合起来用的时候,很爽

(04)Python函数

位置参数和关键字参数可以共存,但是关键字参数必须写在位置参数之后

可变位置参数

(04)Python函数

可变位置参数用 * 定义,在函数体内,可变位置参数是一个元组

可变关键字参数

(04)Python函数

可变关键字参数用 ** 定义,在函数体内,可变关键字参数是一个字典

可变关键字参数的Key都是字符串,并且符合标识符定义规范

可变位置参数只能以位置参数的形式调用

可变关键字参数只能以关键字参数的形式调用

(04)Python函数

(04)Python函数

可变位置参数必须在可变关键字参数之前

(04)Python函数

常规参数

(04)Python函数

(04)Python函数

可变参数后置

可变参数不和默认参数一起出现

参数结构

(04)Python函数

可以把线性结构接解包成位置参数

(04)Python函数(04)Python函数

可把字典结构成关键字参数

(04)Python函数(04)Python函数

尽量的少同时使用两种解构,除非你真的知道在做什么

传参的顺序:位置参数,线性结构解构,关键字参数,字典解析

解构的时候,线性结构的结构是位置参数,字典结构是关键字参数

参数槽

(04)Python函数

* 之后的参数,必须以关键字的形式传递,称之为参数槽

参数槽通常和默认参数搭配使用

(04)Python函数

* 之后必须有参数

(04)Python函数

命名参数可以有默认值

(04)Python函数

非命名参数有默认值时,命名参数可以没有默认值

默认参数应该在每段参数的最后

(04)Python函数

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

类型示意 Python 3.5才有

(04)Python函数

类型示意没有任何类型检查,只是一个int类型的示意而已

但是有毛用呢?

Python是一种自文档的语言

(04)Python函数

更清晰的自文档

帮助IDE做检查

可以通过这种机制,做类型检查

递归

递归函数在Python非常慢,并且有深度限制,所以 应尽量避免使用递归

循环都可以转化为递归,但不是所有递归都可以转化为循环

迭代器

迭代是Python最强大的功能之一,是访问集合元素的一种方式。。

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

迭代器有两个基本的方法:iter() 和 next()。

list=[1,2,3,4]
it = iter(list)   # 创建迭代器对象

print (next(it))  # 输出迭代器的下一个元素
1

print (next(it))
2

生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行
next()方法时从当前位置继续运行。

(04)Python函数(04)Python函数

生成器的定义和函数类似,但是有yield语句

生成执行到yield的时候会暂停,在下一次next会从暂停的地方继续执行

(04)Python函数

yield弹出值,暂停函数

return返回值,并且结束函数

(04)Python函数

当yield和return同时存在时,return的返回值会被忽略,但是return依然可以结束生成器

(04)Python函数

严格的说,应该是一个生成器函数,返回的是一个生成器。

协程是用户空间的轻量线程,跑在一个线程内,由用户 空间调度

(04)Python函数

生成器应用

练习计数器:0

(04)Python函数

(04)Python函数

(04)Python函数

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: