链式调用:用一个函数的返回值作为另外一个函数参数
嵌套调用:一个函数在另一个函数定义里面,而调用该定义函数既可以使用在其里面的函数
在Pycharm中调试器的左下角能够看到函数之间的"调用栈"
调用栈里面描述了当前这个代码的函数之间,调用关系是什么.
每一层这个调用关系就称为"函数的栈帧",每个函数的局部变量就在栈帧里面体现的
每一层栈帧选中之后,就能看到其中的局部变量,每一个函数的局部变量就是体现在相应的栈帧中
调用函数则生成相应的局部变量;函数结束则对应的栈帧消亡了。
变量本质就是一块内存空间,每个变量就是保存在相应的栈帧中,每个栈帧保存在内存上。
函数递归:函数自己调用自己。分析递归代码时,可用1.画图2.调试器来思考,缺点就是执行过程中非常繁琐,难以理解,递归代码容易出现"栈溢出"的情况。"栈溢出"指的是调用栈3.递归代码一般都是可以转化成等价的循环代码的,并且循环的版本通常运行速度要比递归的版本更有优势(因为递归的调用需要开销时间)递归优点是代码简洁!!
在Python当中可以支持默认参数值(即函数的形参列表可以上默认参数值,但不可以放在前面或者中间,只能放在后面)
关键字传参:按照形参的名字进行传参!非常明显的告诉程序员自己的值给哪个形参,另外可以无视形参和实参的顺序。
位置参数和关键词字参数还能混着用,只不过混着用的时候要求位置参数在前面,关键词参数在后面。
关键字参数,一般也是搭配默认参数来使用的。
一个函数可以提供很多的参数来实现对这个函数的内部功能做出一些调整设定。
列表和元组:可以用一个变量表示多个数据。
列表的数据可以变;元组的数据不能变。若强行改变元组的数据,只有舍弃原来的元组重新搞新的元组。[]表示一个空列表 list()也可以表示一个空列表.
len内联函数可以传字符串、列表、元组、字典、自定义的类,本质就是Python支持动态类型
切片操作:通过下标操作一次性取出里面的第1个元素, 而通过切片则是一次可以取出一组连续的元素,相当于得到一个子列表.
[ : ]里面有两个数字,表示一段区间. 右边的数值表示开始区间的下标,左边的数值表示结束区间的下标,但记住是左闭右开.
在这里面可以省略边界,前边界和后边界也可以,两个边界同时省略.
省略前边界说明表示取到第1个元素到下标为最左边数字的元素,但取不到最左边的元素哦,因为左闭右开。
省略后边界说明从下标为右边数字为始的后面所有元素。
省略两个边界表示直接取整个列表。
注意[ : ]这两个数字 不存在越界之说。例如最左边设100,但列表只有10个数据,则直接取到第10个元素,即结束了。
[ : : ]其实还有第3个参数表示步长,步长可以为负数表示从后往前取。[1:5:2]表示从下标为1的元素到下标为5的元素,以步长为2开始取.
切片操作是一个高效的操作方法,进行切片的时候只是取出了原有列表中的一个部分,不涉及"数据拷贝"
遍历: 把一个可迭代对象中(例如列表、元组、range)的所有对象都依次取出来,并进行某种操作.
一般使用for循环遍历也可以使用while循环通过下标遍历.