-
IPython 中 的 “I” 代表 交互 interactive
-
注意python解释器、交互式python shell、集成开发环境三者之间的区分
-
编译型语言和解释型语言对比
- 速度 —— 编译型语言比解释型语言执行速度快
- 跨平台性 —— 解释型语言比编译型语言跨平台性好
-
- Python 是完全面向对象的语言
- 函数、模块、数字、字符串都是对象,在 Python 中一切皆对象
- 完全支持继承、重载、多重继承
- 支持重载运算符,也支持泛型设计
- Python 拥有一个强大的标准库,Python 语言的核心只包含 数字、字符串、列表、字典、文件 等常见类型和函数,而由 Python 标准库提供了 系统管理、网络通信、文本处理、数据库接口、图形系统、XML 处理 等额外的功能
- Python 社区提供了大量的第三方模块,使用方式与标准库类似。它们的功能覆盖 科学计算、人工智能、机器学习、Web 开发、数据库接口、图形系统 多个领域
- Python 是完全面向对象的语言
-
- 开发 项目 就是开发一个 专门解决一个复杂业务功能的软件
- 通常每 一个项目 就具有一个 独立专属的目录,用于保存 所有和项目相关的文件
- 一个项目通常会包含 很多源文件
-
关于代码规范:
谷歌有对应的中文文档:http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/ -
注意
- elif 和 else 都必须和 if 联合使用,而不能单独使用
- 可以将 if、elif 和 else 以及各自缩进的代码,看成一个 完整的代码块
- elif 的应用场景是:同时 判断 多个条件,所有的条件是 平级 的
- if 的嵌套 的应用场景就是:在之前条件满足的前提下,再增加额外的判断
-
random.randint(a, b) ,返回 [a, b] 之间的整数,包含 a 和 b
-
运算符:(回忆运算符的优先顺序)
- 算术运算符 : ** * / // % + -
- 比较(关系)运算符 : == != >= <= > <
- 逻辑运算符 : and or not
- 赋值运算符 : **= *= /= //= %= = += -=
-
\t 在控制台输出一个 制表符,协助在输出文本时 垂直方向 保持对齐
-
导入模块的注意事项
# from fxj_01_99 import multiple_table
import fxj_01_99
“”“导入模块时–模块中的全局变量、可执行代码–全部都会执行”""
# fxj_01_99.multiple_table() -
- 形参:定义 函数时,小括号中的参数,是用来接收参数用的,在函数内部 作为变量使用
- 实参:调用 函数时,小括号中的参数,是用来把数据传递到 函数内部 用的
-
模块体验:模块可以让 曾经编写过的代码 方便的被 复用!
- 可以 在一个 Python 文件 中 定义 变量 或者 函数
- 然后在 另外一个文件中 使用 import 导入这个模块
- 导入之后,就可以使用 模块名.变量 / 模块名.函数 的方式,使用这个模块中定义的变量或者函数 -
pyc 文件 – 可以提高程序执行速度
pyc文件 – 已经编译(compiled)过的二进制文件 – 字节码 -
注意:如果使用 del 关键字将变量从内存中删除
后续的代码就不能再使用这个变量了
-
函数和方法的区别:
1. 函数 封装了独立功能,可以直接调用 -- 函数名(参数) 2. - 方法 和函数类似,同样是封装了独立的功能 - 方法 需要通过 对象 来调用,表示针对这个 对象 要做的操作 # 对象.方法名(参数)
-
尽管 Python 的 列表 中可以 存储不同类型的数据
但是在开发中,更多的应用场景是
1. 列表 存储"相同类型"的数据 2. 通过 迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作
-
在 Python 中,可以使用 for 循环遍历所有非数字型类型的变量:# 列表、元组、字典 以及 字符串
提示:在实际开发中,除非 能够确认元组中的数据类型,否则针对元组的循环遍历需求并不是很多
-
字典在开发应用中的应用场景:
- 使用 多个键值对,存储 描述一个 物体 的相关信息 —— 描述更复杂的数据信息 - 将 多个字典 放在 一个列表 中,再进行遍历,在循环体内部针对每一个字典进行 相同的处理
-
字符串对象的方法特别多 – 开发中,字符串的使用更加灵活
-
切片
切片 方法适用于 字符串、列表、元组 # 不包含字典
-
注意:在开发时,应该把模块中的所有全局变量
定义在所有函数上方,就可以保证所有的函数
都能够正常的访问到每一个全局变量了
-
多值参数:*变量名 元组
**变量名 字典
eg: def demo(num, *args, *kwargs): -
多值参数 – 元组和字典的拆包
eg: gl_nums = [2,3,4,5]
gl_xiaoming = {“name”:“小明”, “age”:18}
demo(*gl_nums, **gl_xiaoming) -
函数的递归
-
init 改造初始化方法,可以让创建对象更加灵活
del 如果希望在对象被销毁前,再做一些事情,可以考虑一下 del 方法
str 魔法方法 : 改变实例对象的返回值,必须return一个#字符串 -
封装:
1.封装 是面向对象编程的一大特点 2.面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 3.外界 使用 类 创建 对象,然后 让对象调用方法 4.对象方法的细节 都被 封装 在 类的内部 练习: 家具练习 + 士兵突击练习 1.一个实例对象可以作为“参数传入”到另外一个类创建的实例对象的调用方法内 2.一个对象的 ”属性“ 可以是 另外一个类创建的对象 此时可以通过属性来调用另外一个对象中包含的方法 #当不知道给属性设置什么值的时候,可以设置为 none
继承:可以减少相同代码的重复编写,大大提高开发效率
#当相同代码需要修改时,各个类都需要进行修改
多态:
1.多态 不同的 子类对象 调用相同的 父类方法,产生不同的执行结果 2.多态 可以 增加代码的灵活度 3.以 继承 和 重写父类方法 为前提 4.是调用方法的技巧,不会影响到类的内部设计
-
- super 是python中 一个内置的 特殊的 类
- 应用场景: 父类中的方法需要保留的时候,
方法1 : 此时可以使用super().方法名来保留,
减少方法重写时代码的重复
方法2 : 父类名.方法名(self) 不推荐使用,
修改父类时,此处调用也需要修改
-
子类不能直接访问或调用父类中的私有属性和私有方法
子类可以通过父类调用自己的私有属性和方法–间接访问
子类可以通过 _父类名__属性或方法 – 间接访问
-
多继承的使用注意事项: 开发中尽量避免容易产生混淆的情况 – 父类之间尽量不用相同的属性和方法#名称
Python 中针对 类 提供了一个 “内置属性” mro 可以查看 方法 搜索顺序
eg: print(C.__mro__)
在搜索方法时,是按照 mro 的输出结果 从左至右 的顺序查找的
如果在当前类中 找到方法,就直接执行,不再搜索
如果 没有找到,就查找下一个类 中是否有对应的方法,如果找到,就直接执行,不再搜索
如果找到最后一个类,还没有找到方法,程序报错 -
类方法:# 实例对象和类对象均可调用 – 只能使用类方法和类属性
静态方法:# 实例对象和类对象均可调用 – 不可以使用类或者实例对象的方法或属性
实例方法:# 只能由实例对象调用 – 类方法、类属性、实例方法、实例属性均可使用 -
在每次使用 类名() 创建对象时,Python 的解释器都会自动调用两个方法:
1.# new 分配空间 和 返回对象的引用
2.# init 对象初始化 -
如果 两个模块,存在 “同名的函数”,那么
后导入模块的函数,会 覆盖掉先导入的函数
-
1.在开发时,给文件起名,不要和 系统的模块文件 重名
2.如果 两个模块,存在 同名的函数,那么 后导入模块的函数,会 覆盖掉先导入的函数
# 开发时 import 代码应该统一写在 代码的顶部,更容易及时发现冲突
# 一旦发现冲突,可以使用 as 关键字 给其中一个工具起一个别名
3.原则 —— 每一个文件都应该是可以被导入的
一个 独立的 Python 文件 就是一个 模块
# 在导入文件时,文件中 所有没有任何缩进的代码 都会被执行一遍!
4. name 属性可以做到,测试模块的代码 只在测试情况下被运行,
而在 被导入时不会被执行!
# 根据 name 判断是否执行下方代码
if name == “main”:
main() -
1.read 方法默认会把文件的 所有内容 一次性读取到内存
如果文件太大,对内存的占用会非常严重
2.readline 方法可以一次读取一行内容
方法执行后,会把 文件指针 移动到下一行,准备再次读取 -
import(‘os’).system(‘ls’) 不要随便使用eval函数
如果直接调用os模块,容易出现意想不到的结果
python基础知识回顾
最新推荐文章于 2021-06-01 00:06:18 发布