摘要:一:工厂模式实现 设计模式是面向对象语言特有的内容,是我们在面临某一类问题时候固定的做法,设计 模式有很多种,比较流行的是:GOF(Goup Of Four)23 种设计模式。 工厂模式实现了创建者和调用者的分离,使用专门的工厂类将选择实现类、创建对象进 行统一的管理和控制。 【操作】 运行结果:
阅读全文
摘要:一:面向对象三大特征介绍 Python是面向对象的语言,也支持面向对象编程的三大特性:继承、封装(隐藏)、多态。 封装(隐藏) 隐藏对象的属性和实现细节,只对外提供必要的方法。相当于将“细节封装起来”,只 对外暴露“相关调用方法”。 通过前面学习的“私有属性、私有方法”的方式,实现“封装”。Pyth
阅读全文
摘要:一:多重继承 Python支持多重继承,一个子类可以有多个“直接父类”。这样,就具备了“多个父类”的特点。但是由于,这样会被“类的整体层次”搞的异常复杂,尽量避免使用。 二:mro() Python支持多继承,如果父类中有相同名字的方法,在子类没有指定父类名时,解释器将 “从左向右”按顺序搜索。 M
阅读全文
摘要:多态: 多态(polymorphism)是指同一个方法调用由于对象不同可能会产生不同的行为。在现实 生活中,我们有很多例子。比如:同样是调用人的休息方法,张三的休息是睡觉,李四的休 息是玩游戏,程序员是敲代码。同样是吃饭的方法,中国人用筷子吃饭,英国人用刀叉吃 饭,印度人用手吃饭。 关于多态要注意以
阅读全文
摘要:一:特殊方法和运算符重载 Python的运算符实际上是通过调用对象的特殊方法实现的。比如: 运行结果: c= 50 d= 50 常见的特殊方法统计如下: 每个运算符实际上都对应了相应的方法,统计如下: 我们可以重写上面的特殊方法,即实现了“运算符的重载”。 【操作】运算符的重载 运行结果: jack
阅读全文
摘要:对象的浅拷贝和深拷贝: 变量的赋值操作 只是形成两个变量,实际还是指向同一个对象。 浅拷贝 Python拷贝一般都是浅拷贝。拷贝时,对象包含的子对象内容不拷贝。因此,源对象 和拷贝对象会引用同一个子对象。 深拷贝 使用copy模块的 deepcopy 函数,递归拷贝对象中包含的子对象。源对象和拷贝对
阅读全文
摘要:组合: “is-a”关系,我们可以使用“继承”。从而实现子类拥有的父类的方法和属性。“is-a” 关系指的是类似这样的关系:狗是动物,dog is animal。狗类就应该继承动物类。 “has-a”关系,我们可以使用“组合”,也能实现一个类拥有另一个类的方法和属性。” has-a”关系指的是这样的
阅读全文
摘要:一:私有属性和私有方法(实现封装) Python对于类的成员没有严格的访问控制限制,这与其他面向对象语言有区别。关于私有 属性和私有方法,有如下要点: 1. 通常我们约定,两个下划线开头的属性是私有的(private)。其他为公共的(public)。 2. 类内部可以访问私有属性(方法) 3. 类外
阅读全文
摘要:面向对象: 面向对象(Object oriented Programming,OOP)编程的思想主要是针对大型 软件设计而来的。面向对象编程使程序的扩展性更强、可读性更好,使的编程可以像搭 积木一样简单。 面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式 更加接近人的思维,从
阅读全文
摘要:一:类的定义 如果把对象比作一个“饼干”,类就是制造这个饼干的“模具”。 我们通过类定义数据类型的属性(数据)和方法(行为),也就是说,“类将行为和状态打 包在一起”。 对象是类的具体实体,一般称为“类的实例”。类看做“饼干模具”,对象就是根据这个“模 具”制造出的“饼干”。 从一个类创建对象时,每
阅读全文
摘要:一:类对象 前面讲的类定义格式中,“class 类名:”。实际上,当解释器执行class 语句时, 就会创建一个类对象。 【操作】 运行结果: <class 'type'> 2220691901896 <class '__main__.Student'> <__main__.Student obje
阅读全文
摘要:一:__del__方法(析构函数)和垃圾回收机制 __del__方法称为“析构方法”,用于实现对象被销毁时所需的操作。比如:释放对象 占用的资源,例如:打开的文件资源、网络连接等。 Python实现自动的垃圾回收,当对象没有被引用时(引用计数为 0),由垃圾回收器 调用__del__方法。 我们也可
阅读全文
摘要:一:方法没有重载 在其他语言中,可以定义多个重名的方法,只要保证方法签名唯一即可。方法签名包含 3 个部分:方法名、参数数量、参数类型。 Python中,方法的的参数没有声明类型(调用时确定参数的类型),参数的数量也可以由 可变参数控制。因此,Python中是没有方法的重载的。定义一个方法即可有多种
阅读全文
摘要:函数也是对象,内存底层分析: Python中,“一切都是对象”。实际上,执行def 定义函数后,系统就创建了相应的函数 对象。我们执行如下程序,然后进行解释: 上面代码执行 def 时,系统中会创建函数对象,并通过print_star 这个变量进行引用: 我们执行“c=print_star”后,显然
阅读全文
摘要:一:变量的作用域(全局变量和局部变量) 变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为:全 局变量、局部变量。 全局变量: 1. 在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块结束。 2. 全局变量降低了函数的通用性和可读性。函数中应尽量避免全
阅读全文
摘要:一:参数的传递 函数的参数传递本质上就是:从实参到形参的赋值操作。 Python中“一切皆对象”, 所有的赋值操作都是“引用的赋值”。所以,Python中参数的传递都是“引用传递”,不 是“值传递”。具体操作时分为两类: 1. 对“可变对象”进行“写操作”,直接作用于原对象本身。 2. 对“不可变对
阅读全文
摘要:参数的几种类型: 位置参数: 函数调用时,实参默认按位置顺序传递,需要个数和形参匹配。按位置传递的参数,称为: “位置参数” 默认值参数: 我们可以为某些参数设置默认值,这样这些参数在传递时就是可选的。称为“默认值参数”。 默认值参数放到位置参数后面。 命名参数: 我们也可以按照形参的名称传递参数,
阅读全文
摘要:一:lambda表达式和匿名函数 lambda表达式可以用来声明匿名函数。lambda 函数是一种简单的、在同一行中定义函数 的方法。lambda函数实际生成了一个函数对象。 lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数 的返回值。 lambda表达式的基本语
阅读全文
摘要:递归函数: 递归函数指的是:自己调用自己的函数,在函数体内部直接或间接的自己调用自己。递归类 似于大家中学数学学习过的“数学归纳法”。 每个递归函数必须包含两个部分: 1. 终止条件 表示递归什么时候结束。一般用于返回值,不再调用自己。 2. 递归步骤 把第 n步的值和第 n-1步相关联。 递归函数
阅读全文
摘要:嵌套函数: 嵌套函数: 在函数内部定义的函数! 一般在什么情况下使用嵌套函数? 1. 封装 - 数据隐藏:外部无法访问“嵌套函数”。 2. 贯彻 DRY(Don’t Repeat Yourself) 原则: 嵌套函数,可以让我们在函数内部避免重复代码。 3. 闭包: 后面会详细讲解。 运行结果: t
阅读全文
摘要:一:nonlocal关键字 nonlocal 用来声明外层的局部变量。 global 用来声明全局变量。 运行结果: inner:b 10 outer:b 20 a: 200 二:LEGB规则 Python在查找“名称”时,是按照LEGB规则查找的: Local-->Enclosed-->Globa
阅读全文
摘要:一:for循环和可迭代对象遍历 for 循环通常用于可迭代对象的遍历。for 循环的语法格式如下: for 变量 in 可迭代对象: 循环体语句 可迭代对象: Python包含以下几种可迭代对象: 1. 序列。包含:字符串、列表、元组 2. 字典 3. 迭代器对象(iterator) 4. 生成器函
阅读全文
摘要:嵌套循环及练习: 一个循环体内可以嵌入另一个循环,一般称为“嵌套循环”,或者“多重循环”。 【练习】
阅读全文
摘要:一:break语句 break语句可用于 while 和for 循环,用来结束整个循环。当有嵌套循环时,break 语句只 能跳出最近一层的循环。 【操作】使用 break 语句结束循环 二:continue语句 continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue
阅读全文
摘要:一:循环代码优化 虽然计算机越来越快,空间也越来越大,我们仍然要在性能问题上“斤斤计较”。编写循环时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算: 1. 尽量减少循环内部不必要的计算 2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。 3. 局部变量查询较快,尽量使用局部变量
阅读全文
摘要:推导式创建序列: 推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合, 从而避免冗长的代码。推导式是典型的Python 风格,会使用它代表你已经超过Python初 学者的水平。 一:列表推导式 列表推导式生成列表对象,语法如下: [表达式 for item in 可迭代对
阅读全文
摘要:一:函数介绍 函数是可重用的程序代码块。函数的作用,不仅可以实现代码的复用,更能实现代码的 一致性。一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现。 在编写函数时,函数体中的代码写法和我们前面讲述的基本一致,只是对代码实现了封 装,并增加了函数调用、传递参数、返回计算结果等内容
阅读全文
摘要:一:形参和实参 【操作】定义一个函数,实现两个数的比较,并返回较大的值。 上面的 printMax 函数中,在定义时写的printMax(a,b)。a 和 b称为“形式参数”, 简称“形参”。也就是说,形式参数是在定义函数时使用的。 形式参数的命名只要符合“标 识符”命名规则即可。 在调用函数时,传
阅读全文
摘要:字典核心底层原理(重要) 字典对象的核心是散列表。散列表是一个稀疏数组(总是有空白元素的数组),数组的 每个单元叫做 bucket。每个 bucket 有两部分:一个是键对象的引用,一个是值对象的引 用。 由于,所有bucket 结构和大小一致,我们可以通过偏移量来读取指定 bucket。 一:将一
阅读全文
摘要:一:根据键查找“键值对”的底层过程 明白一个键值对是如何存储到数组中的,根据键对象取到值对象,理解起来就 简单了。 >>> a.get("name") 'jack' 当我们调用a.get(“name”),就是根据键“name”查找到“键值对”,从而找到值对象“jack”。 第一步,我们仍然要计算“n
阅读全文
摘要:集合: 集合是无序可变,元素不能重复。实际上,集合底层是字典实现,集合的所有元素都是字典 中的“键对象”,因此是不能重复的且唯一的。 一:集合的创建和删除 1. 使用{}创建集合对象,并使用 add()方法添加元素 2. 使用set(),将列表、元组等可迭代对象转成集合。如果原来数据存在重复数据,则
阅读全文
摘要:控制语句介绍: 前面学习的变量、数据类型(整数、浮点数、布尔)、序列(字符串、列表、元组、字 典、集合),可以看做是数据的组织方式。数据可以看做是“砖块”! 流程控制语句是代码的组织方式,可以看做是“混凝土”。 一个完整的程序,离不开“砖块”,也离不开“混凝土”。他们的组合,才能让我们建 立从小到“
阅读全文
摘要:一:选择结构介绍 选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为:单分 支、双分支、多分支。流程图如下: 二:单分支选择结构 if语句单分支结构的语法形式如下: if 条件表达式: 语句/语句块 其中:1条件表达式:可以是逻辑表达式、关系表达式、算术表达式等。 2语句/语
阅读全文
摘要:一:双分支选择结构 双分支结构的语法格式如下: if 条件表达式 : 语句 1/语句块 1 else: 语句 2/语句块 2 二:三元条件运算符 Python提供了三元运算符,用来在某些简单双分支赋值情况。三元条件运算符语法格式如 下: 条件为真时的值 if (条件表达式) else 条件为假时的值
阅读全文
摘要:一:多分支选择结构 多分支选择结构的语法格式如下: if 条件表达式 1 : 语句 1/语句块 1 elif 条件表达式 2: 语句 2/语句块 2 . . elif 条件表达式 n : 语句 n/语句块n [else: 语句 n+1/语句块 n+1 ] 注:多分支结构,几个分支之间是有逻辑关系的,
阅读全文
摘要:一:循环结构介绍 循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反 复执行循环体里的语句。在每次执行完后都会判断一次条件是否为 True,如果 为True则重复执行循环体里的语句。图示如下: 循环体里面的语句至少应该包含改变条件表达式的语句,以使循环趋于结束;否 则,就会变成一
阅读全文
摘要:一:字典介绍 字典是“键值对”的无序可变序列,字典中的每个元素都是一个“键值对”,包含:“键 对象”和“值对象”。可以通过“键对象”实现快速获取、删除、更新对应的“值对象”。 列表中我们通过“下标数字”找到对应的对象。字典中通过“键对象”找到对应的“值 对象”。“键”是任意的不可变数据,比如:整数、
阅读全文
摘要:字典元素的访问: 1. 通过 [键] 获得“值”。若键不存在,则抛出异常。 2. 通过get()方法获得“值”。推荐使用。优点是:指定键不存在,返回None;也可以设 定指定键不存在时默认返回的对象。推荐使用 get()获取“值对象”。 3. 列出所有的键值对 4. 列出所有的键,列出所有的值 5.
阅读全文
摘要:字典元素添加、修改、删除 1. 给字典新增“键值对”。如果“键”已经存在,则覆盖旧的键值对;如果“键”不存在, 则新增“键值对”。 2. 使用update()将新字典中所有键值对全部添加到旧字典对象上。如果key有重复,则直 接覆盖。 3. 字典中元素的删除,可以使用del()方法;或者 clear
阅读全文
摘要:序列解包 序列解包可以用于元组、列表、字典。序列解包可以让我们方便的对多个变量赋值。 序列解包用于字典时,默认是对“键”进行操作; 如果需要对键值对操作,则需要使用 items();如果需要对“值”进行操作,则需要使用 values();
阅读全文
摘要:表格数据使用列表和字典存储,并实现访问 【操作】源代码(mypy08.py):
阅读全文
摘要:一:二维列表 一维列表可以帮助我们存储一维、线性的数据。 二维列表可以帮助我们存储二维、表格的数据。例如下表的数据: 【操作】 内存结构图: 二:【操作】嵌套循环打印二维列表所有的数据 建立源文件mypy07.py。源码如下: 运行结果: 高小一 18 30000 北京 高小二 19 20000 上
阅读全文
摘要:一:元组tuple 列表属于可变序列,可以任意修改列表中的元素。元组属于不可变序列,不能修改元组中的 元素。因此,元组没有增加元素、修改元素、删除元素相关的方法。 因此,只需要学习元组的创建和删除,元组中元素的访问和计数即可。元组支持如 下操作: 1. 索引访问 2. 切片操作 3. 连接操作 4.
阅读全文
摘要:一:元组的元素访问和计数 1. 元组的元素不能修改 2. 元组的元素访问和列表一样,只不过返回的仍然是元组对象。 3. 列表关于排序的方法list.sorted()是修改原列表对象,元组没有该方法。如果要对元组排 序,只能使用内置函数 sorted(tupleObj),并生成新的列表对象。 二:zi
阅读全文
摘要:一:生成器推导式创建元组 从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号。列表推 导式直接生成列表对象,生成器推导式生成的不是列表也不是元组,而是一个生成器对象。 我们可以通过生成器对象,转化成列表或者元组。也可以使用生成器对象的__next__() 方法进行遍历,或者直接作为
阅读全文
摘要:一:修改原列表,不建新列表的排序 二:建新列表的排序 可以通过内置函数sorted()进行排序,这个方法返回新列表,不对原列表做修改。 通过上面操作,我们可以看出,生成的列表对象b和c都是完全新的列表对象。 三:reversed()返回迭代器 内置函数reversed()也支持进行逆序排列,与列表对
阅读全文
摘要:一:切片操作 列表的切片操作和字符串类似。 切片是Python序列及其重要的操作,适用于列表、元组、字符串等等。 切片 slice 操作可以让我们快速提取子列表或修改。标准格式为: [起始偏移量start:终止偏移量end[:步长 step]] 注:当步长省略时顺便可以省略第二个冒号 典型操作(三个
阅读全文
摘要:一:通过索引直接访问元素 可以通过索引直接访问元素。索引的区间在[0, 列表长度-1]这个范围。超过这个范围则 会抛出异常。 二:index()获取指定元素在列表中首次出现的索引 index()可以获取指定元素首次出现的索引位置。语法是: index(value,[start,[end]])。其中,
阅读全文
摘要:一:del删除 删除列表指定位置的元素。 二:pop()方法 pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素。 三:remove()方法 删除首次出现的指定元素,若不存在该元素抛出异常。
阅读全文
摘要:列表元素的增加和删除 当列表增加和删除元素时,列表会自动进行内存管理,大大减少了程序员的负担。但这 个特点涉及列表元素的大量移动,效率较低。除非必要,我们一般只在列表的尾部添加元素 或删除元素,这会大大提高列表的操作效率。 一:append()方法 原地修改列表对象,是真正的列表尾部添加新的元素,速
阅读全文
摘要:一:基本语法[]创建 二:list()创建 使用 list()可以将任何可迭代的数据转化成列表。 三:range()创建整数列表 range()可以帮助我们非常方便的创建整数列表,这在开发中及其有用。语法格式为: range([start,] end [,step]) start 参数:可选,表示起
阅读全文
摘要:一:序列介绍 序列是一种数据存储方式,用来存储一系列的数据。在内存中,序列就是一块用来存放多个值的连续的内存空间。比如一个整数序列[10,20,30,40],可以这样示意表示: 由于 Python3 中一切皆对象,在内存中实际是按照如下方式存储的: a = [10,20,30,40] 从图示中,可以
阅读全文
摘要:一:常用查找方法 len(): 返回字符串长度 startswith():是否以指定字符串开头。返回True或false endswith(): 是否以指定字符串结尾。返回True或false find(): 第一次出现指定字符串的位置 rfind(): 最后一次出现指定字符串的位置 isalnum
阅读全文
摘要:一:format()基本用法 Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的 功能。 基本语法是通过 {} 和 : 来代替以前的 % 。 format 函数可以接受不限个参数,位置可以不按顺序。 可以通过{索引}/{参数名},直接映射参数值,
阅读全文
摘要:可变字符串: 在Python中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能创建新的字符串对象。但是,有时我们确实经常需要原地修改字符串,可以使用 io.StringIO 对象或array 模块。
阅读全文
摘要:一:基本运算符 1. 比较运算符可以连用,并且含义和我们日常使用完全一致。 >>> a = 4 >>> 3<a<10 #关系运算符可以连用 True 2. 位操作 >>> a = 0b11001 >>> b = 0b01000 >>> c = a|b >>> bin(c) #bin()可以将数字转成
阅读全文
摘要:一:字符串基本特点 很多人初学编程时,总是担心自己数学不行,潜意识里认为数学好才能编程。实际上, 大多数程序员打交道最多的是“字符串”而不是“数字”。因为,编程是用来解决现实问题 的,因此逻辑思维的重要性远远超过数学能力。 字符串的本质是:字符序列。Python的字符串是不可变的,我们无法对原字符串
阅读全文
摘要:一:转义字符 我们可以使用“\+特殊字符”,实现某些难以用字符表示的效果。比如:换行等。常见的 转义字符有这些: 【操作】测试转义字符的使用 二:字符串拼接 1. 可以使用+将多个字符串拼接起来。例如:’aa’+ ’bb’ ==>’aabb’。 (1) 如果+两边都是字符串,则拼接。 (2) 如果+
阅读全文
摘要:一:str()实现数字转型字符串 str()可以帮助我们将其他数据类型转换为字符串。例如: str(5.20) ==> ‘5.20’ str(3.14e2)==>’314.0’ str(True) ==> ‘True’ 当我们调用 print()函数时,解释器自动调用了 str()将非字符串的对象转
阅读全文
摘要:一:字符串切片slice操作 切片 slice 操作可以让我们快速的提取子字符串。标准格式为: [起始偏移量start:终止偏移量end:步长 step] 典型操作(三个量为正数的情况)如下: 其他操作(三个量为负数)的情况: 注:切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围
阅读全文
摘要:一:split()分割 split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔 符,则默认使用空白字符(换行符/空格/制表符)。示例代码如下: 二:join()合并 join()的作用和split()作用刚好相反,用于将一系列子字符串连接起来。示例代码如下: 注:
阅读全文
摘要:一:字符串驻留 仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。 Python 支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母 和数字)会启用字符串驻留机制驻留机制。 二:字符串比较和同一性 我们可以直接使用==,!=对字符串进行比较,是否含有相同的字符
阅读全文
摘要:一:Python内置数据类型 每个对象都有类型,python中最基本的内置数据类型: 1. 整型:整数,2345,10,50 2. 浮点型:小数,3.14 或者科学计数法 314e-2 3. 布尔型:表示真假,仅包含:True、False 4. 字符串型:由字符组成的序列。 “abc”,”speed
阅读全文
摘要:一:整数-不同进制 Python中,除10 进制,还有其他三种进制: ·0b或0B,二进制 0 1 ·0o 或0O,八进制 0 1 2 3 4 5 6 7 ·0x或 0X,十六进制 0 1 2 3 4 5 6 7 8 9 a b c d e f 这三种进制可以非常方便的进行“位运算”操作。位运算知识
阅读全文
摘要:一:浮点数 浮点数,称为 float。 浮点数用科学计数法表示。比如:3.14,表示成:314E-2或者 314e-2。 这些数字在内存中也是按照科学计数法存储。 二:类型转换和四舍五入 1. 类似于int(),我们也可以使用 float()将其他类型转化成浮点数。 2. 整数和浮点数混合运算时,表
阅读全文
摘要:一:时间表示 计算机中时间的表示是从“1970 年 1月 1日 00:00:00”开始,以毫秒(1/1000 秒) 进行计算。我们也把1970 年这个时刻成为“unix 时间点”。 这样,我们就把时间全部用数字来表示了。时间本质上就是数字 python中可以通过 time.time() 获得当前时刻
阅读全文
摘要:一:布尔值 Python2中没有布尔值,直接用数字 0表示 False,用数字1 表示True。 Python3中,把 True和 False 定义成了关键字,但他们的本质还是 1和 0,甚至可以和数字相加。 二:比较运算符 所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和Fa
阅读全文
摘要:一:同一运算符 同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址。 is 与 == 区别: is 用于判断两个变量引用对象是否为同一个,既比较对象的地址。 == 用于判断两个变量引用对象的值是否相等,默认调用对象的 __eq__()方法。 二:整数缓存问题 Python仅仅对比较小的整数
阅读全文
摘要:一:Python程序的构成 二:Python文件的创建和执行 之前使用的交互式环境,每次只能执行一条语句;为了编写多条语句实现复杂的逻辑, 可以通过创建 Python 文件,并执行该文件。 在 IDLE 环境中,可以通过 File-->new 创建 Python 文件,并可以编辑该文件内容。也可以通
阅读全文
摘要:一:对象 Python 中,一切皆对象。每个对象由:标识(identity)、类型(type)、值(value) 组成。 1. 标识:用于唯一标识对象,通常对应于对象在计算机内存中的地址。使用内置函数 id(obj) 可返回对象obj 的标识。 2. 类型:用于表示对象存储的“数据”的类型。类型可以
阅读全文
摘要:引用 在Python中,变量也称为:对象的引用。因为,变量存储的就是对象的地址。 变量通过地址引用了“对象”。 变量位于:栈内存(压栈出栈等细节,后续再介绍)。 对象位于:堆内存。 Python是动态类型语言 变量不需要显式声明类型。根据变量引用的对象,Python解释器自动确定数据类型。 Pyth
阅读全文
摘要:一:标识符 标识符:用于变量、函数、类、模块等的名称。标识符有如下特定的规则: 1. 区分大小写。如:JACK和jack 是不同的 2. 第一个字符必须是字母、下划线。其后的字符是:字母、数字、下划线 3. 不能使用关键字。比如:if、or、while 等。 4. 以双下划线开头和结尾的名称通常有特
阅读全文
摘要:一:变量的声明和赋值 变量的声明和赋值用于将一个变量绑定到一个对象上,格式为: 变量名 = 表达式 最简单的表达式就是字面量。比如:a=123 。 运行过程中,解释器先运行右边的表达式, 生成一个代表表达式运算结果的对象;然后,将这个对象地址赋值给左边的变量。 【操作】变量在使用前必须先被初始化(先
阅读全文
摘要:一:链式赋值 链式赋值用于同一个对象赋值给多个变量。 如:x=y=123 相当于:x=123; y=123 二:系列解包赋值 系列数据赋值给对应相同个数的变量(个数必须保持一致) 如:>>> a,b,c=4,5,6 相当于:a=4;b=5;c=6 【操作】使用系列解包赋值实现变量交换 三:常量 Py
阅读全文
摘要:1、恰当的空格,缩进问题 (1) 逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。 (2) 语句从新行的第一列开始。 (3) 缩进风格统一: 每个缩进层次使用单个制表符或四个空格(IDE会自动将制表符设置成 4个 空格);Python用缩进而不是{}表示程序块 2、P
阅读全文
摘要:一:开始学习图形化程序设计 二:绘制奥运五环标记 运行结果:
阅读全文
摘要:一:Python开发环境 开发环境,英文是 IDE(Integrated Development Environment 集成开发环境)。 不要纠结于使用哪个开发环境。开发环境本质上就是对 Python解释器 python.exe 的 封装,核心都一样。可以说:“开发环境IDE,只是解释器的一个外挂
阅读全文
摘要:一:第一个python源程序 打开Python自带的IDLE,点击File选择New File。然后输入源代码如下图。然后File选择save保存到硬盘中。如:d:/python/mypy01.py 执行代码:在IDLE中单击 F5或者 run-->run module 执行这个源程序。 第一个Py
阅读全文
摘要:一:Python下载安装和配置 二:第一行Python程序 打开cmd命令窗口,输入python回车。出现如下提示说明Python安装成功 输入代码:print("hello python")回车。命令窗口执行python第一行代码。
阅读全文
摘要:Python 是当今世界最潮的编程语言之一,它语法简单、通俗,语言结构清晰,是很多零基础编程者的最爱。Python 的受欢迎程度已经与 Java、C 语言成三足鼎立之势。如果你曾 经学习过 Java,再学习 Python 的话就会感觉非常的轻松。Python 拉近了菜鸟与老鸟之间的 距离,Pytho
阅读全文