以下文章是对该视频的学习笔记,侵删:
简介:
(1)Python 安装官网如下:Welcome to Python.orgThe official home of the Python Programming Languagehttps://www.python.org/
(2)PyCharm 安装官网如下:
可以选择社区版进行安装
开始上手编程:
(1)进行新建项目:
虚拟环境的好处是可以让不同项目使用不同解释器版本、第三方库等,适用于程序员做多个项目以及团队合作的情况。但对新手来说,用虚拟环境不是必要的,所以如果没有venv文件夹,也不用专门回去修改。
(2)新建Python文件,在控制台打印:
注意:中英文符号问题
打印进阶:
①字符串连接打印
②单双引号转义(假设内容本本身就包含引号的情况)
可以外单内双、外双内单进行打印
⭕ 假设又有单引号,又有双引号呢?
在字符串里面的引号前加一个反斜杠(即转义符——),表明后面的引号就是单纯的引号符号
③换行
Python读一行执行一行,读到一行结尾会查看是否有结束引号与括号,如果没有会直接报错。因此不能随便换行
换行——> \n 反斜杠转义符
④三引号 """" """ 跨行字符串
三引号作用:Python 就会把新的一行当成内容的换行,而非代码语句的结束。因此对打印跨行多的内容非常方便
Python 入门
1.Python 变量
变量声明规则:
注意:不能用数字开头
赋值操作即用 = 去为变量声明值(Python是从上到下执行,因此需要先声明,再打印)
变量可以给变量赋值(即 = 左边会被视为变量名,右边则会被先求值)
2.命名规则
命名硬性规则: 只能由文字、数字、下划线组成,不能有除下划线之外的符号,不能有空格,不能以数字开头
Python3 支持用中文给变量命名
下滑线命名法:
- 字母全部小写
- 不同单词用下划线分隔
变量名大小写敏感——>user_age 和 user_Age 会被看作两个不同的变量
变量名不要占用 Python 的关键字(如下,并且会高亮展示)——>假设把关键字给占用赋值了,便不能正确使用关键字了
3.数学运算
注意:与 转义符的反斜杠 进行区分
默认就有的函数库即内置函数,如print
在导入math函数之后,便可以进行数学运算,使用如下:
关于其他库的官方文档如下:
4.注释
注释:会被解释器或编译器忽略的一行或多行文字,给人们阅读代码思路解释用的
注释快捷键
通过三引号进行多行注释
5.数据类型
数据类型: 会决定在该类型对象上可以运用哪些函数。
函数: 负责执行哪个功能,正确的输入才能有正确的输出。
①字符串 str
完整的转义符才占一个长度
通过索引(注意索引是从0开始)拿到提取出该索引位置的字符
②整数 int ③浮点数 float
④布尔类型 bool
⑤空值类型 NoneType——>表示完全没有值
type 函数——>返回该对象类型
6.执行模式
- 命令行模式
- 交互模式
(1)命令行模式:
运行时,python 解释器会一行一行对文件进行解析和运行。
即可以不解析一整个文件就执行某一行命令。
(2)交互模式:
输入一行便会立即执行并展示那一行的运行结果 。
优点:
1.不需要创建任何新的文件,只需要进入交互式环境;
进入交互式环境:PyCharm 下方的Python控制台或Windows的CMD输入Python3;
退出:quit() 或者 control d
2.不需要 print 语句,就能直接看到执行输出的结果
7.input
input 函数——>从用户获取输入
调用之后便会等待用户输入后返回值(一律是字符串),因此可以用变量进行接收:
因此,也有函数可以将 字符串 str 类型转换为 整数 int 类型
包括:float 函数 将其他类型转换为浮点数;str 函数可以把其它类型转换成字符串
例如:整数不能与字符串一起打印,因此需要转换为字符串:
8.条件语句
条件语句:即根据条件是否满足来执行条件相对应的内容
相对应的代码即:
比较运算符:
(1)等于号 == :比较两个对象的值是否相等
(2)不等于号 != :比较两个对象的值是否不相等
9.多条件判断
1.嵌套条件语句:
嵌套时更需要进行缩进
2.多条件判断语句:
10.逻辑运算
与 and、或 or(前二者都可以连接两个或者以上操作对象)、非 not
(1)与 and:只要有一个或以上为 False,最后求值结果为False
(2)或 or:只要有一个为True,其结果则为True
(3)非 not:原先的操作对象为True,则其结果为False。反之亦然。
and VS or :
优先级:
11.列表
列表:一种数据结构,将相关联的数据整合到一起
增加列表元素 - append方法。方法:同样用来定义特定功能的
方法 VS 函数:
用append方法不需要也不应该再对shopping_list重新进行赋值。
删除列表中的元素:remove 方法
对列表中的元素进行查看:
列表也可以放不同的数据:
并且列表跟字符串一样可以通过len()函数求长度,便可以求得列表里元素的数量
通过索引,可以获得某个位置的元素
通过索引赋值,也可以修改列表的元素
其他内置函数:
12.字典
字典 dictionary:用来存储键值对
键和值之间用引号表示对应,键值对之间用逗号分隔(注意:键的类型必须是不可变的——即列表是可变的,就不能作为键)
元组 tuple:不可变
在字典中直接声明便可以添加进字典中。假设键已经存在便会覆盖掉键的原本的值。
del 便可以进行键值对的删除
进行字典长度的查询:
13.for 循环
for 循环可以进行迭代:迭代的对象可以是列表、字典、字符串等
并不能有效地检索
1.常用三个方法:
即通过 .items 声明元组,将第一个元素赋值给staff_id,第二个赋值给temperature
等同于以下写法:
2.for循环结合range:(注意:结束值并不在序列范围内)
例如:
例:计算1到100的和
14.while循环
while 循环:一开始未假时,则一次也不会被执行。
两者都可以用的情况下,for 循环 会更加简洁直观,所需行数更少。
15.格式化字符串
短信祝福案例:
格式化字符串方法:
① format 方法:
根据关键词指定替换的对象 (位置无所谓,只看format 里面的关键字,即所有current_year的地方都将会被替换为year的值)
简洁写法:
② f-字符串
③数字对字符串进行格式化
保留几位小数写法 :.2f
16.函数
问题:计算不同扇形的面积(参数不一致,部分代码一致<——DRY原则 Don't Repeat Yourself)
Python 自带函数 :
进行自定义函数:
因此问题解决代码可以被优化为:
但缺少储存计算结果的变量,无法后续继续使用(Python函数作用域的概念)
a 只是在函数中被定义,只是局部变量, 只作用于函数里面。
return 语句:如此在函数外便可以继续使用
代码优化为:
Python内置函数:
内置函数 — Python 3.12.4 文档Python 解释器内置了很多函数和类型,任何时候都能使用。以下按字母顺序给出列表。,,,, 内置函数,,, A, abs(), aiter(), all(), anext(), any(), ascii(),, B, bin(), bool(), breakpoint(), bytearray(), bytes(),, C, callable(), chr(), classmethod()...https://docs.python.org/zh-cn/3/library/functions.htmlPython 标准库中的其他模块:模块就是一个Python程序,引入后里面的函数和变量都可以为你所用。
例:求中位数函数:
可以直接引用:
代码可被优化为:
内置函数都是很常用的函数,所以其他模块便需要进行引入才能使用
引入模块:
* 表示模块里的所有变量以及函数都被引入,包括可能用不到的
假设都有abc() 函数便会冲突<——通过import 模块名,便能清楚是哪个模块
control点击函数名便可以对函数源码进行查看
引入第三方库模块(即第三方程序员编写的模块):
以下网站可对第三方库进行搜索:
17.面相对象编程
Object Oriented Programming 面向对象
过程:负责完成某个具体任务的代码,基本可以理解为函数(即拆分为一个一个实现的步骤,然后依次完成——程序长度以及逻辑复杂度增加,代码可读性会比较差)
面相对象:以对象为核心,先考虑各个对象有什么性质、能做什么事情
类与对象关系:类是创建对象的模板,对象是类的实例
通过对象与相关属性绑定在一起,有利于让逻辑更加清晰(即可以清晰性质所属对象)
面向过程打印记录需要携带许多信息参数:
而面向对象便可以通过对象来获取与它绑定的属性(即对象拥有的性质)——>逻辑以及数据流动可以更加清晰:
方法(对应对象能够做些什么)也可以跟对象绑定(所谓方法就是放在类里面的函数,所谓属性就是放在类里面的变量)
面向过程写法:
相比面向过程编程直接聚焦于按步骤执行,面向对象编程,把事务先分解到对象身上,描述各个对象的作用,再之间进行交互。
特定的属性,可以在对象被创建的时候就进行设置,之后不论是哪个方法用到了该属性,就都不需要作为参数再被传入。而是作为自身属性,可以直接被获取到。
面向对象特性:
①封装:将类内部的细节进行隐藏,使用类只通过外部的接口(提供使用的方法)访问与使用——>即只需要类包含了什么方法,并且方法如何使用就可以了,并不需要知道方法是怎么写的。因此能够减少对不必要细节的投入
②继承:面向对象编程允许创建有层次的类。类也可以有子类以及父类,来表示从属关系。父类属性与方法都可以被继承,并不需要被反复定义,减少代码的冗余。
③多态: 同样的接口,因为对象具体类的不同,而具有不同的表现。(即无需判断,便可以统一调用同一名称的方法)
18.创建类
构造函数:(必须命名为 _init_ , self 用于表示对象自身,把属性的值绑定在实例对象上。不然只会认定为普通的值,而不会把这个值看成是对象的属性。并且 self 不需要手动传入):定义实例对象的属性。
定义对象拥有的方法(即对象能够做什么事情)——>1.必须发写在 class 里面;2.第一个参数会被占用 self ,约定俗成为 self ——> 可以在方法里面可以获取修改对象绑定的属性
实现:方法调用结果,根据属性的不同而进行改变
19.继承类
面对重复的代码<—— 继承
继承类:子类假如有自己的跟父类同名的方法,就会调用自己的。(即优先看所属的类有没有该方法,如果没有就会往上找父类的方法)
假设给子类写 _init_ 方法就会导致子类创建实例时,只有 has_tail 属性
解决方法:通过 super() 方法——>返回当前类的父类,再通过super.()_init_ 调用父类的构造函数,便可以使用相对应的属性了。
20.文件路径
代码怎么知道系统文件在哪里呢?
绝对路径:从根目录出发的路径,对于Linux、macOS等类Unix系统,绝对路径就是以 / 开头。路径之间用 / 进行分隔,以目标文件和目标路径作为结尾。
①绝对路径:
Linux、macOS等类Unix系统 / :
Windows 操作系统 \:
②相对路径:
. 表示参照文件当前所在的目录,.. 表示更上一层的父目录,假设需要更上一级便可以 ../ 进行分隔(类Unix用/,Windows用\)表示当前文件所属目录的父目录的父目录
在同一目录下的文件,互相用相对路径找到彼此,可以直接使用文件名
21.文件操作
问题:借助程序记录销售数据
根据文件把数据一条条复制到代码里面,再通过代码获取执行结果?假设有多个日期的变量便需要反复修改代码的变量。
因此 文件操作:让同一段代码读取不同的市场数据文件,只需要对文件名进行改动即可。
步骤:
1.打开目标文件
FileNotFoundError的错误:表示文件不存在
假设像Word还有字号,颜色等格式,代码将文本转换为字符串时会出现问题
(1)read方法:
第二次调用已经到结尾了,所以会返回空字符串。
(2)readline 方法:
(2)readlines 方法:读取全部文件内容,并返回由每行组成的字符串列表
方法总结:
close() 方法:
缩进的内容执行完毕后,文件就会被自动关闭。
进行程序输出结果输出为文件(与读文件操作类似——打开文件,并且在操作完成后关闭文件):
假设设定路径下的文件不存在,那么会自动创建文件(用“w”模式打开文件进行写入的话,如果那个文件已经存在,就会先把原本的文件内容清空)
需要手动进行换行
假设是追加内容即需要用 a 附加模式
两种模式都不支持 read 操作
因此有 r+ 读写模式,并且内容是追加进去的
22.异常处理
错误类型:
异常捕获(执行逻辑跟if···else一样,从上到下执行并且前面已经正确捕捉到错误,之后except语句便不会再执行——只有第一个符合条件的分支会运行):
else和finally
23.测试
assert 断言 后面跟上任何布尔表达式
出现 AssertionError 程序将直接中断
unitest 单元测试库 :对软件中的最小可测试单元进行验证,比如验证某函数某方面表现是否符合预期(测试代码放到独立文件里面)
TestMyAdder子类可以继承自unittest.TestCase的各种测试功能,然后在这个类下面定义各种测试用例。每一个测试用例都是类下面的一个方法。命名必须以 test_ 开头。unitest库 会自动搜寻test 开头的方法,而且只把test_开头的当成测试用例。
24.高阶函数和匿名函数
问题:进行多阶次方的打印
假设把计算的函数作为参数?——> ①高阶函数 (作为参数的函数是直接用函数名传入,表示函数本身,不带括号或者是参数)
一旦有括号就意味着函数被调用了,会返回该函数的执行结果,而非函数本身。
②匿名函数:匿名函数不需要起名字,而且像个一次性物品一样,即用即扔。如果非要拿一个名字指代匿名函数的话,可以叫Lambda。匿名函数的定义是以lambda这个关键字开始的。
lambda后面不想要return。并且lambda想增加参数,也只需要在lambda关键字后面,把参数用不同逗号分隔开。
匿名函数可当成是没有名字且占用行数更少的函数。
匿名函数优点:
- 减少代码行数;
- 不用起名字;
- 不用换行缩进
特别适合只需要一次性调用的场景!
而且除了作为高阶函数的参数,匿名函数也可以定义好后被直接调用,调用方式和普通函数一样
局限性:
冒号后面没法有多个语句或表达式——>只适用于比较简单的场景(多步骤的复杂逻辑,或者是涉及循环递归等)
Python 进阶也可以通过以下网站学习:
Python教程 - 廖雪峰的官方网站研究互联网产品和技术,提供原创中文精品教程https://www.liaoxuefeng.com/wiki/1016959663602400#0