随笔分类 - Python学习笔记
摘要:###递归函数 递归函数指的是:自己调用自己的函数,在函数体内部直接或间接的自己调用自己。递归类似于大家中学数学学习过的“数学归纳法”。 每个递归函数必须包含两个部分:1. 终止条件表示递归什么时候结束。一般用于返回值,不再调用自己。2. 递归步骤把第 n 步的值和第 n-1 步相关联。 递归函数由
阅读全文
摘要:###eval()函数 功能:将字符串 str 当成有效的表达式来求值并返回计算结果。 语法: eval(source[, globals[, locals]]) -> value 参数:source:一个 Python 表达式或函数 compile()返回的代码对象globals:可选。必须是 d
阅读全文
摘要:###lambda 表达式和匿名函数 lambda 表达式可以用来声明匿名函数。lambda 函数是一种简单的、在同一行中定义函数的方法。lambda 函数实际生成了一个函数对象。lambda 表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数的返回值。lambda 表达式的基
阅读全文
摘要:###可变参数 可变参数指的是“可变数量的参数”。分两种情况:1. *param(一个星号),将多个参数收集到一个“元组”对象中。2. **param(两个星号),将多个参数收集到一个“字典”对象中。 【操作】测试可变参数处理(元组、字典两种方式) def f1(a, b, *c): print(a
阅读全文
摘要:###参数的几种类型 ###位置参数 函数调用时,实参默认按位置顺序传递,需要个数和形参匹配。按位置传递的参数,称为:“位置参数”。 【操作】测试位置参数 def f1(a, b, c): print(a, b, c) f1(2, 3, 4) f1(2, 3) # 报错,位置参数不匹配 输出结果:
阅读全文
摘要:###传递不可变对象包含的子对象是可变的情况 # 传递不可变对象时。不可变对象里面包含的子对象是可变的。则方法内修改了这个可变对象,源对象也发生了变化。 a = (10, 20, [5, 6]) print("a:", id(a)) def test01(m): print("m:", id(m))
阅读全文
摘要:###浅拷贝和深拷贝 为了更深入的了解参数传递的底层原理,我们需要讲解一下“浅拷贝和深拷贝”。我们可以使用内置函数:copy(浅拷贝)、deepcopy(深拷贝)。 浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象 # 测试浅拷贝
阅读全文
摘要:###传递不可变对象的引用 传递参数是不可变对象(例如:int、float、字符串、元组、布尔值),实际传递的还是对象的引用。在”赋值操作”时,由于不可变对象无法修改,系统会新创建一个对象。 【操作】参数传递:传递不可变对象的引用 a = 100 def f1(n): print("n:", id(
阅读全文
摘要:###参数的传递 函数的参数传递本质上就是:从实参到形参的赋值操作。 Python 中“一切皆对象”,所有的赋值操作都是“引用的赋值”。所以,Python 中参数的传递都是“引用传递”,不是“值传递”。具体操作时分为两类:1. 对“可变对象”进行“写操作”,直接作用于原对象本身。2. 对“不可变对象
阅读全文
摘要:###局部变量和全局变量效率测试 局部变量的查询和访问速度比全局变量快,优先考虑使用,尤其是在循环的时候。在特别强调效率的地方或者循环次数较多的地方,可以通过将全局变量转为局部变量提高运行速度。 【操作】测试局部变量和全局变量效率 # 测试局部变量、全局变量的效率 import math impor
阅读全文
摘要:###变量的作用域(全局变量和局部变量) 变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为:全局变量、局部变量。 全局变量:1. 在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块结束。2. 全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使
阅读全文
摘要:###函数也是对象,内存底层分析 Python 中,“一切都是对象”。实际上,执行 def 定义函数后,系统就创建了相应的函数对象。我们执行如下程序,然后进行解释: def print_star(): print("*********") print(print_star()) print(" ")
阅读全文
摘要:###返回值 return 返回值要点:1. 如果函数体中包含 return 语句,则结束函数执行并返回值;2. 如果函数体中不包含 return 语句,则返回 None 值。3. 要返回多个返回值,使用列表、元组、字典、集合将多个值“存起来”即可。 【操作】定义一个打印 n 个星号的无返回值的函数
阅读全文
摘要:###形参和实参 形参和实参的要点,请参考上一节中的总结。在此不再赘述 【操作】定义一个函数,实现两个数的比较,并返回较大的值。 def printMax(a, b): """实现两个数的比较,并返回较大的值""" if a > b: print(a, '较大值') else: print(b, '
阅读全文
摘要:###函数简介 ###函数的基本概念 1. 一个程序由一个个任务组成;函数就是代表一个任务或者一个功能。2. 函数是代码复用的通用机制。 ###Python 函数的分类 Python 中函数分为如下几类:1. 内置函数我们前面使用的 str()、list()、len()等这些都是内置函数,我们可以拿
阅读全文
摘要:1. 【操作】绘制多个同心圆 import turtle t = turtle.Pen() my_colors = ("red", "green", "yellow", "black") t.width(4) t.speed(1) for i in range(10): # 0 1 2 3 4 t.
阅读全文
摘要:###推导式创建序列 推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合,从而避免冗长的代码。推导式是典型的 Python 风格,会使用它代表你已经超过 Python 初学者的水平。 ###列表推导式 列表推导式生成列表对象,语法如下: [表达式 for item in
阅读全文
摘要:###使用 zip()并行迭代 我们可以通过 zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止。 【操作】测试 zip()并行迭代 names = ("高淇", "高老二", "高老三", "高老四") ages = (18, 16, 20, 25) jobs = (
阅读全文
摘要:###循环代码优化 虽然计算机越来越快,空间也越来越大,我们仍然要在性能问题上“斤斤计较”。编写循环时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算: 1. 尽量减少循环内部不必要的计算 2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。 3. 局部变量查询较快,尽量使用局部变量
阅读全文
摘要:###else 语句 while、for 循环可以附带一个 else 语句(可选)。如果 for、while 语句没有被 break 语句结束,则会执行 else 子句,否则不执行。语法格式如下: while 条件表达式: 循环体 else: 语句块 或者: for 变量 in 可迭代对象: 循环体
阅读全文