欢迎光临散文网 会员登陆 & 注册

黑马程序员python教程,8天python从入门到精通,学python看这套就

2023-08-09 22:25 作者:不念过往云烟123  | 我要投稿

1.cmd调出命令提示符后,输入python并回车即为进入python.exe(解释器程序:功能是解释python代码并提交给计算机执行)之后可在>>>后面输入代码,但每回车一次就运行一次

2.一次性运行一大段代码:cmd后输入 python+空格+文件路径

如:python D:\python\test.py

3.pycharm常用快捷键:

ctrl+alt+s:打开设置

ctrl+d:复制当前行代码

ctrl+a(/f):全选(/搜索)

ctrl+shift+f10:运行当前代码文件

shift+alt+上/下:将当前行代码上下移动

shift+f6:重命名文件

4.字面量-----不需要声明变量类型,直接写即可 如:666

print(666)

5.单行注释:以#开头中,最好用空格隔开

多行注释:一对三个双引号 (一般对python文件,类或者方法进行解释) 即:

"""

我是力神

"""

6.print输出多份内容----print(内容1,内容2,,,,内容n)

并且默认print语句输出内容时会自动换行

想要不换行:

print(“hello”,end=‘’

变量----可以存储很多类型的数据信息(在python中变量本身无类型) 变量名=变量值 如:

money=50

print("钱包还有:",money)

money=money-10

print("买了冰淇淋话费10元,还剩余:",money,"元")

7.查看数据类型----type()

8.数据类型转换----int(x) / float(x) / str(x)

均表示将x转换成对应的数据类型

万物都可转化成字符串,带上双引号即可

但是字符串转换成数字时必须确保字符串的内容都是数字

浮点数转换成整数会丢失精度,即小数部分

9.标识符命名规则----由英文、中文(不推荐)、数字、下划线组成,开头不能是数字1

变量命名规则----简洁明了;多个单词组合变量名时要用下划线做分隔(如:first_number=1);英文字母全小写

10.运算符: // 取整除(只要整数部分) 9//2 结果 :2

** 指数 2**3 结果:8

11.三种字符串定义方法:单/双/三引号定义法

name="""黑马"""

单可包含双 name=‘“黑马”’

双可包含单 name=“‘黑马’”’

可以用转义字符\解除引号的效用

name=“\"黑马\"”

name=‘\'黑马\'’

12.字符串拼接---用“+”连接字符串变量或者字符串字面量

统计字符串长度---- len()

13.字符串格式化----(不仅可以在字符串类型之间,还可以有数字类型)如:

num=57

salary=16781

message=“python大数据学科,北京%s期,毕业平均工资:%s%(num,salary)

数据类型占位:

%s ---- %表示:我要占位

s表示:将变量变成字符串放入占位的地方

%d 将内容转换成整数放入占位的地方

%f 将内容转换成浮点数放入占位的地方

14.字符串格式化-数字精度控制

m 控制宽度,要求是数字(小数点和小数部分也算入宽度计算)如果m小于数字本身,则不生效

.n 控制精度,会进行小数的四舍五入

15.快速格式化方法(不限数据类型,没有精度控制):

语法 ----- f"内容{变量}" (即format首字母)

如:name=“博客”

year=2023

price=19.26

print(f"我是{name},我成立于:{year},我今天的股票价格是:{price}")

16.input() ---- 数据输入(输入的数据都被当做字符串返回)

17.bool(布尔类型) True / False

变量名称=布尔类型字面量

可以通过比较运算得到布尔类型的结果

18.if语句

19.if else语句

20.if-elif-else多条件判断语句

elif语句可以写多个,当所有条件都不满足时,执行else后面的语句

从上往下有序判断条件是否满足,有一个满足后面的条件就不用管了,else语句可以省略不写

案例:

21.产生随机数字:

import random

num=random.randint(1,10)

22.while循环

while+空格+True / False

23.制表符\t

24.九九乘法表(用while循环写)

print()即为输出一个换行

25.for循环

无法自定义循环条件,只能被动取出数据处理


26.range语句

一. range(num) 获取一个从0开始,到num结束的数字序列(不含num本身)

如 range(5)得到数据【0,1,2,3,4】

27.变量作用域

想要访问for循环中的临时变量,可以预先在循环外定义它

规范为软要求,规则是硬要求

28.九九乘法表(用for循环写)

29.continue和break语句

在嵌套循环中,都只能作用在所在的循环上,对上层循环不起作用


30.函数的定义

def 函数名(传入参数)

函数体

return 返回值

31.函数空返回值None

在if判断中,None等于False

在声明无初始内容的变量时,如name=None

32.函数的说明文档

33.在函数的内部将外面的全局变量进行修改:

重新赋值没用---因为相当于又定义了一个新的局部变量

global关键字

34.数据容器:可以容纳多份数据的数据类型

如:name_list=['小红’,‘小美’,‘小李’,‘小王’]

35.列表list


变量名称=[元素1,元素2,。。。]

元素类型不受限制

列表允许重复数据存在

空列表---- 变量名称=[ ] 或 = list()

嵌套列表:my_list = [[1,2,3],[4,5,6]]

正向索引,下标从0开始

反向索引,下标从-1开始


36.方法

37.列表常用操作

# 查找下标 列表.index(元素)

#修改特定位置的元素值 列表[下标] = 值

(即进行重新赋值 / 修改)

#在指定下标位置插入指定的元素

列表.insert(下标,元素)

#追加元素到列表尾部 列表.append(元素)

append追加单个元素

extend追加一批元素

#删除元素

del 列表[下标] / 列表.pop(下标)

可以通过返回值接收到pop方法删除即取出的元素

remove方法 从前往后删除第一个

#请空列表内容 列表.clear()

#统计某一个元素在列表内的数量:列表.count()

#统计列表内有多少元素 len(列表)

38.列表遍历

39.元组tuple 元组内的元素不能被篡改,否则会报错,但是可以修改元祖内的list内容


嵌套元组根据下标寻找:num = t5[1][3]

40.字符串也可以通过下标索引:从0开始 / 从-1开始

字符串也是一个无法修改的数据容器

# index方法

# replace方法


# split方法

用‘,’的时要注意中英文区别


因为同样是得到了一个新的字符串,所以用新的 new_my_str进行赋值

# strip

line = line.strip() 能去除开头和结尾的空格以及换行符

# count()

# len()

41.序列---内容连续、有序,可使用下标索引的一类数据容器

列表、元组、字符串均可以视为序列

非序列类型:集合、字典(不支持下标索引)

序列切片(结束下标元素不包含在内)

步长为1时可以省略不写

为n表示每次跳过n-1个取元素

如; my_tuple = (0,1,2,3,4,5,6)

result = my_tuple[:]

(表示从开头到结尾)

42.切片联系案例

示例如下

42.集合set :内容无序(所以不支持下标索引访问)但是内容可以修改,不重复

不支持下标,所以不能用while循环进行遍历

# pop方法

# difference方法

# difference_update方法

# union方法

新集合去重且顺序不确定

# len()统计集合元素数量时同样去重,一种元素只算一个

43.字典dict

其中的key不能重复

没有下标索引,通过key来获得value值

字典[key] 获得对应的value

字典的嵌套:

score = stu_score_dict[“周杰伦”][“语文”]

44.字典常用操作

# 新增 / 更新元素

字典[key] = value

# keys方法

# 通过获取全部的key遍历

# 直接通过for循环进行遍历,每一次循环都直接得到key


45.数据容器分类


通用操作:

遍历


字符串转列表(元组、集合):会将字符串中的每一个元素取出作为列表(元组)元素

字典转列表(元组、集合):会将value抛弃,key作为列表(元组)元素

字典转字符串:value会保留

字典可以转换成别的容器,但是别的容器不能转换成字典

通用排序---排序的结果都是列表对象(所以字典排序后value值会丢失)

逗号后面是默认参数,不写则默认是正向排序,写了为反向


46.字符串大小比较

单个字符之间通过ASCII码表,确定字符对应的码值数字来确定大小

47.多返回值的函数

48.函数的多种参数

缺省参数;


不定长参数:

48.函数作为参数传递

实质是一种逻辑的传递

49.lambda匿名函数

图中的compute相当于一个调用test_func时传入的参数,也可以理解成x

50.文件编码:使用正确的编码才能对文件进行正确的读写操作

编码:是一种规则集合,记录了内容和二进制间进行相互转换的逻辑

以什么编码写文件就以什么编码读文件

用windows系统自带的记事本打开文件即可查看文件编码(右下角)

UTF-8 是目前全球通用的文件编码格式

51.文件操作

# 打开文件:



# 读操作

用这两种方法读取时,每使用一次read,读取文件的位置会被记录,下一次读取会接着往下读取(其实就是有一个指针)

readlines方法读取文件封装到列表时,会将换行符也读取到

readlines返回的是列表,readline返回的是字符串

for循环读出来的是列表形式

# 关闭文件

如果不用close可以用下面这个:



52.案例


严格来说,第一种方法不太准确,当有‘itheimahhh’也会被计数

自己做的:

53.写操作

文件不存在时会字典创建文件

存在时在再次打开文件写时会清空原有内容

其实close方法内置了flush功能

54.追加操作(与写操作无异,将‘w’换成‘a’即可)

想要写入时换行追加,可以加上换行符‘\n’

54.文件备份案例

题目


代码

55.异常处理(捕获异常:提前假设某处会出现异常,做好提前准备,当真的出现异常时,可以有后续手段)

###

### 下图的e是一个别名,改成a/c。。。。都可以

e可以看成是一个记录异常信息的变量

示例:

###

示例:

###

或者使用开头的捕获常规异常

即只用 except:

# else

# finally

56.异常的传递性

57.python模块:即为一个Python文件,以 .py结尾,

模块的导入一般写在代码文件的开头位置

中括号表示可选,即中括号内的可以不写:

### import模块:

ctrl + 鼠标左键 查看导入模块文件内容

ctrl + f 搜索文件内函数

###

###

示例:

###

58.自定义模块

新建一个Python文件,并在里面定义出对应的函数

ps: 当导入多个模块时,且模块内有同名功能,当调用这个同名功能时,调用到的时后面导入的模块的功能

# 测试功能

Python里面有内置变量 __name__

既满足了自定义模块内右键运行时能进行测试又实现了导入模块功能时测试功能不会被运行

###

注意事项;

59.python包

当 __init__.py 这个特殊文件存在时,该文件夹才是一个python包,不存在时,就是一个普通的文件夹


或者如下示例:

又或者直接导入某种功能;


示例:


注意事项:

60.如何安装第三方包



注意事项;

61.

因为f.close()也可能出现错误,因为如果在f = open就出现错误,则f 仍然为None,无法调用close方法

示例代码;




62.json数据格式(JavaScript Object Notation)

json本质上来说就是一个字符串,将Python的字典转化成字符串,或者将python中元素都是字典的列表转换成字符串

能让不同语言都能够相互通用地互相传递数据,是一种非常良好的中转数据格式

其实就是python内的字典 / 内部嵌套了字典的列表


示例:(带上后面的参数使得中文能完整地不加转换地输出)

因为json是字符串,所以别忘了 ‘ ’

总结:

63.pyecharts模块

64.pyecharts快速入门.

构建出一个Line对象后,得到的只是一个空的二维坐标系

自己做的图:

全局配置,类似于一种通用设置

设置全局配置项:

鼠标悬停可以查看全局配置项有哪些,或者收藏网页(pyecharts官网)里面查看,ctrl+p???

使用前要记得导包

示例如图:

总结:

65.数据准备

可以通过第三方网站(如ab173---懒人网站)对json数据进行格式化分析,可以更容易地看出数据之间的层级关系

# 获取trend key

json整个字典复制给了usdict,选择usdict的key“data”可以获取到值,值是另外一个列表,然后从字典的key“data”获取到的列表里面用下标索引0来获取一个新的字典,

最后在这个新的字典里面还是要新的key“trend”获取到值,这个值就是我们要的日期啊什么什么的

去完之后复制打印出来的代码到网站:


#取x轴


因为2020年结尾的12月31号的

#取y轴


66.构建折线图

构建一个Line对象

三个国家其实可以共用同一个x轴,所以添加一个x轴即可




67.# 设置全局选项

ctrl+p 导出如下卡片:

代码添加:



鼠标在圆点悬停可以显示

68.地图


可见,数据是一个列表,列表里面的元素是元组

要显示颜色:

手动校准范围:

查看颜色编码:


代码实现:


69.全国疫情地图构建

取数据的步骤如下:


21行是给列表传参,传入一个元组,元组里面是两个值

render()也可以传参数:

代码:


效果图:

70.河南省疫情地图构建

层级关系如下:

老师代码;




缺少一个济源市的数据所以手动添加


71.基础柱状图。

反转X轴和y轴

想要让数据显示如图:

添加如下代码:在导包之后,在添加y轴数据的同时添加标签

------------------------------------------------------------

总结:

72.基础时间线柱状图的绘制


想让时间线自动播放:

时间线设置主题 :如柱状图的颜色

即在创建时间线对象时传入一个字典

------------------------------------------------------------

总结

73.动态GDP柱状图绘制

列表的sort方法:


------------------------------------------------------------


此处是传入了一个函数对象,而不是函数的返回值

这里就是sort方法将my_list遍历进coose_sort_key (等于for element in my_list) ,将他们的返回值进行升序, 降序排列

------------------------------------------------------------

需求分析

数据处理:

下图可见数据之间由,分隔开所以可以由,将其分成三列

右下角不再是UTF-8而是ANSI, ANSI是Windows系统的一个默认编码格式,即跟随Windows系统语言版本来的,而Windows系统是中文版本所以默认的中文编码是GB2312

也可以另存文件,改为UTF-8的格式


为什么要用字典,因为这样可以把字典的key作为x轴,对应的value作为y轴

这里有错,不是将键作为x轴,而是将键对应的值作为x轴和y轴

------------------------------------------------------------

字存在对应的key值时不会报错,不存在则报错



这里其实不是字典的append方法,而是在传入key后,新建一个列表对象作为value,然后再把数据'美国, 123'这个列表数据传入刚才新建的列表对象中

各位,这里的意思是一开始字典是空的,然后dict_data[year]是在找year这个键

由于字典是空的,就会出错,所以用try来捕获,如果出错了执行except里面的语句

而except里dict_data[year]=[]的意思是给字典添加一个键值对为year的值:[]空列表

这样说吧,第一次字典没数据,是进行下面expect的内容,先添加1960关键字,再向里面加一个列表,列表用的append

------------------------------------------------------------构建时间线:

因为字典中的key值是无序的,而时间线的年份是从小到大的,所以通过sorted函数将年份排序成列表

------------------------------------------------------------

因为每一年GDP只取到前8的国家,所以通过列表中国家的GDP数据进行排序吗,即为开头的列表的sort方法

又又因为X轴是一个列表,存放国家,y轴也是一个列表,存放GDP数据,所以定义两个空列表

------------------------------------------------------------

要想把最高GDP数据放在最上面,可以在加入添加数据前就把数据翻转


或者data_dict[year].sort(key=lambda element:element[1],reverse=False)这里改为False就好了??? X

等于False不是取倒数前8了吗哈哈


p111

使用对象组织数据

p112

类的定义和使用

函数是写在类外部的,方法是写在类内部的函数


成员方法的定义语法

成员方法访问成员变量必须使用self

self表示的是类对象本身的意思

Self虽然出现在形参列表中,但是本质上不占用参数位置,无需理会

注意事项:

p113


类不是已经能够完美地描述现实世界的事物了吗?那为什么还要创建对象才去使用呢

类是抽象,对象是具体。就像马是类,而白马、黑马等是对象,可以这样理解?


面向对象编程:

设计类,基于类创建对象做具体的工作


通过Python有一个内置的模块叫做winsound导入它之后可以让我们的电脑发出一些小声音再通过beep方法就可以发出声音了

其中2000表示频率

3000表示闹钟响铃的持续时间

p114

构造方法

init这个单词的前后各有两个_



如果上一步省略了,那么这一步就表示对成员变量进行声明并且进行赋值

也就是说这一步既有定义的功能也有赋值的功能

-------------------------------------------------------------构造方法的注意事项


案例练习------------------------------------------------


代码:


p115

str字符串方法

lt小于符合比较方法

括号内的self表示本身的类对象,other表示另外一个传入的类对象

其实就是定义一种方法,告诉计算机你比较的是什么东西,如果说不定义,计算机不知道该比较年龄还是姓名(可以用ASCII码比较)


Le小于等于比较符号方法

eq比较运算符实现方法

这个地方没有报错是因为在没有实现eq方法的前提下,等等符号就默认比较内存地址,如果是比较内存地址那么STU1和STU2是两个独立的对象所以结果一定是false:

每新建一个对象就会自动生成一个内存地址值,直接打印对象打印的是地址值,想打印对象中的变量,必须对象名.变量名,这个对象对应的地址里边的变量值

总结

P116

封装

对用户隐藏的属性和行为:

私有成员:

使用私有成员:


如果不赋值直接访问私有成员变量并打印怎么会报错


???这里为什么可以赋值并打印出来没有报错呢

它不是私有变量吗

接上条:而赋值可以访问到是因为创建了一个新属性,但是这个属性和原来的哪个私有属性是没有关系的

可以赋值是相当于又定义了一个新的变量,类内部的私有成员变量值不变

直接在外部修改私有成员变量不会报错,那是因为这个为对象创造的一个新成员变量




所以私有成员的作用是可以定义不直接对用户开放的属性和行为

118继承

单继承:

多继承:

pass关键字:用来补全语法,

比如我们在写类的时候,这个类继承了别的类已经有很多的功能了,我不想在添加新功能,但是由于语法要求不能空着必须写点什么,保证我们的语法不报错,所以可以用pass来替代一下

多继承的注意事项:


总结:



P119

调用父类同名成员



------------------------------------------------------------------------------------------------------------------------多继承情况下,如果出现同名成员,使用supert()方式2调用父类成员时,优先匹配先继承的父类成员





P120












p121

掌握对函数或方法的形参或返回值进行类型注解




p122

使用union类型进行联合注解




P123多态






这里的AC是抽象类,抽象类即为含有抽象方法的类,抽象方法就是方法体为空即pass的方法函数

所以构造对象时是创建它的子类

父类的存在就是一个标准,虽然他不执行,但是没有这个标准,所有的类都乱套了,讲究的就是一个规范,规范即优雅

p124-126(数据分析案例

代码中通过print输出的是内存地址,而内存地址并没有用,所以我们通过一个魔术方法将它的内容输出

将地址转换成字符串输出

多态的前提是:子类继承父类、复写父类方法,而使用多态是:子类对象类型传给父类对象类型对象,通过父类对象调取方法

----------------------------------------------------------


这里的如果日期不在字典里就创建新的日期作为key,相当于遍历结束同时把字典创建完成

------------------------------------------------------------


record.data是Record里的成员属性,data


-------------------------------------------------------


也可以和之前那样用异常处理

代码如下:









p127SQL




p128数据库

以Excel组织数据的存储

数据库如何存储数据;



数据库与SQL的关系:


相当于数据库是一块农田,农田里面可以滋养数据,而SQL可以帮助我们更好地完成农田的管理

p129


p139

pspark




最为亮眼的是大数据开发和人工智能






p140

pyspark安装



p154

闭包



简单的闭包可以让我们的函数依赖外部变量

图中的logo变量对于inner函数来说是持续存在的外部变量,如“黑马程序员”,而对于outer函数来说是临时的内部变量

不管inner函数调用几次“黑马程序员”这个变量都是不变的,没有人能够访问到也没有人能够修改它,因为“黑马程序员”对于outer函数来说是临时的内部变量

想要修改的话只有再调用一次out函数再传入一个参数(如图)


从而达到既想依赖外部全局变量又不想那个全局变量可以被修改

------------------------------------------------------------

一般来说如果想让一个函数去使用外部变量肯定是要在函数的外面去定义一个变量,那么,当函数运行之后,这个变量的作用域还在,但是跟我们的函数就没有什么关系了

------------------------------------------------------------

1.这里就是嵌套闭包的特性。内部函数可以捕获到外部函数的变量

2.而此时外部函数中的参数因为作用域的原因,它是一个临时变量,用完了对于外部来说,就消失了

------------------------------------------------------------

在inner内部对outer的临时变量logo进行修改



initial_account是作用于这个函数内部的一个临时变量

防止别人随随便便找到全局变量的内存地址直接修改值




p155

装饰器





装饰器不单单只能在闭包商用,普通函数和类也可以使用,不是只局限于闭包的

P156设计模式之单例模式



如图构建了一次str_ tool之后在引用的时候都是同一个对象

如图S1,和S2打印出来的地址是不一样的说明S1和S2并不是同一个对象

而单例模式是要实现不管构建多少个S1 S2或S3 S4都是希望最终得到的是同一个对象



P157

设计模式之工厂模式

低耦合



不管你传的对象是谁,入口都是统一的


但是如果是通过工厂这样的统一入口则只需要像下面这个图里面一样改


P158

多线程

一个进程理解成单个工作任务, 多线程理解成完成单个任务需要好几个人

处理器同一时刻只能执行一条指令, 但多个处理器可以同时执行多个指令

并行是指同一时刻有多条指令在多个处理器上同时执行

并发是指多个线程对应的多条指令被快速轮回的执行




P159

多线程编程

我们构建出了多少个thread对象就构建出了多少个线程





因为按照顺序来说target排在第二位所以不能不加参数名

------------------------------------------------------------


如果是元祖那么哪怕只有一个元素也要记得带



4

P160

网络编程之服务端开发

Socket




构建客户端:


运行好代码即运行服务端,卡在了如图蓝线处


所以关键是不是127.0.0.1要重新手动输入一遍?


想要让对话连续进行持续进行下去:


全选之后按Tab键,整体右移4个空格,牛逼啊老师!!!





p161

网络编程之客户端开发



必须要先运行服务端的代码才能再运行客户端的代码


服务端通过ip和端口去区分不同的客户端


p162

正则表达式之基础方法

正则的三个基础方法:

第一个

0到6,但不包含6,有些函数又是包括的,注意区分和记忆-------索引左闭右开

span是区间,group是内容


第二个

第三个




p163

正则表达式之元字符匹配




案例分析:

正则里面不要随便的加空格

为了让第一位不为零则规定第一个数字是1-9

这样还是不够,因为要么是,要么不是,而不是从中取一部分

因为邮箱格式就是@前面一大堆内容和@后面一大堆内容,而这个内容可能是一个,可能是两个,可能是多个

运行结果如下:

结果是这样的原因是findall有一个特殊的地方就是如果有分组的话那么就会按照分组的那个显示出来

当前代码有三个括号分了三个组

------------------------------------------------------------

为了得出准确的结果需要把所有的完整的做一个组

因此运行结果如下:

或者用match方法

不符合要求的运行代码如下:


转义字符


p164

递归


黑马程序员python教程,8天python从入门到精通,学python看这套就的评论 (共 条)

分享到微博请遵守国家法律