深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
目录
1、简介
我们简单讲下Python目前市场应用于领域:
- Web 和 Internet开发
- 科学计算和统计
- 人工智能
- 桌面界面开发
- 软件开发
- 后端开发
2、网络接口:能方便进行系统维护和管理,Linux下标志性语言之一,是很多系统管理员理想的编程工具。
3、图形处理:有PIL、Tkinter等图形库支持,能方便进行图形处理。
4、数学处理:NumPy扩展提供大量与许多标准数学库的接口。
5、文本处理:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。
6、数据库编程:程序员可通过遵循Python DB-API(应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。
7、网络编程:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet 及BitTorrent. Google都在广泛地使用它。
8、Web编程:应用的开发语言,支持最新的XML技术。
9、多媒体应用:Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。
10、pymo引擎:PYMO全称为python memories off,是一款运行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆(memories off)风格的AVG游戏,故命名为PYMO。
开始了!!!不废话了
Pyhon中如何文件拷贝
def main():
f1 = input(“Enter a source file name:”).strip()
f2 = input(“Enter a destination file name:”).strip()
infile = open(f1, ‘r’)
outfile = open(f2, ‘w’)
count_lines = count_chars = 0
for line in infile:
count_lines += 1
count_chars += len(line)
outfile.write(line)
print(count_lines, “lines and”, count_chars, “chars copied”)
infile.close()
outfile.close()
main()
Python数学库及其应用
随机数库及其应用
Python异常处理机制
Python使用try…except…else…finally,可使程序不因运行错误而崩溃,异常捕获机制可以捕捉任何类型的错误,比如:输入非数值类型(NameError),输入无效的表达式(SyntaxError)等。只有当try中的语句没有发生异常,else语句才会被执行,finally无论有无异常都会被执行:
try:
except : except : except: else: finally:ETC
1.使用同步赋值语句实现x与y的值交换:x,y=y,x。
2.val=pow(2,1000),用一行代码返回val结果的长度值:len(str(val))。
3.布尔运算符的优先级从高到低依次是:not,and,or。
4.对于数字的零值被认为是false,任何非零值都是true。对序列类型来说,空序列被认为是false,非空序列认为是true。
5.常用编码:
- ASCII码是标准化字符集,用7个二进制位编码表示128个字符。
- Unicode跨语言,跨平台,同意且唯一的二进制编码,每个字符两个字节长。
- UTF8编码,可变长度的Unicode,英文对应1个字节,中文对应3个字节。
6.python中字符串类型未编码,可以用encode()进行编码,decode()进行解码。
turtle库的常用指令
1.turtle库以屏幕中心为坐标原点。
2.forward(distance)将箭头移到某一指定坐标。
3.left(angle)/right(angle)向左/右旋转一个角度。
4.penup()提起笔,用于另起一个地方绘制时使用,与pendown()配对使用。
5.goto(x,y)。
6.home()。
7.circle(radius)。
8.speed()。
使用turtle库绘制五角星
import turtle
p = turtle.Turtle()
p.speed(3)
p.pensize(5)
p.color(“black”)
p.fillcolor(“red”)
p.begin_fill()for i in range(5):
p.forward(200)
p.right(144)
p.end_fill()
使用turtle库绘制蟒蛇
import turtle
def draw_snake(rad, angle, len, neckrad):
for i in range(len):
turtle.circle(rad, angle)
turtle.circle(-rad, angle)
turtle.circle(rad, angle, 2)
turtle.fd(rad)
turtle.circle(neckrad + 1, 180)
turtle.fd(rad * 2 / 3)
def main():
turtle.setup(1300, 800, 0, 0)
pythonsize = 30
turtle.pensize(pythonsize)
turtle.pencolor(“blue”)
turtle.seth(-40)
draw_snake(40, 80, 5, pythonsize / 2)
main()
数据驱动的动态路径绘制
import turtle
def main():
turtle.title(“数据驱动的动态路径绘制”)
turtle.setup(800, 600, 0, 0)
pen = turtle.Turtle()
pen.color(‘red’)
pen.width(5)
pen.shape(“turtle”)
pen.speed(5)
result = []
file = open(“a.txt”, ‘r’)
for line in file:
result.append(list(map(float, line.split(‘,’))))
print(result)
for i in range(len(result)):
pen.color((result[i][3], result[i][4], result[i][5]))
pen.forward(result[i][0])
if result[i][1]:
pen.right(result[i][2])
else:
pen.left(result[i][2])
pen.goto(0, 0)
if name == ‘__main__’:
main()
使用蒙特卡洛方法估计圆周率的值
from random import *from math import *from time import *
DARTS = 1000000
hits = 0
clock()for i in range(1,DARTS):
x,y=random(),random()
dist = sqrt(x**2+y**2)
if(dist <= 1.0):
hits = hits+1
pi = 4*(hits/DARTS)print(“Pi的值是:%s”%pi)print(“程序运行时间是 %-5.5ss”%clock())
##寻找素数
for n in range(2,100):
for x in range(2,n):
if n % x == 0:
print(n, “equals”, x, “*”, n//x)
break;
else:
print(n, “is a prime number”)
文件循环
def main():
file_name = input(“What’s the file path?”)
try:
infile = open(file_name, ‘r’)
except FileNotFoundError:
print(“\nFile not found”)
else:
msum = 0.0
count = 0
line = infile.readline()
while line != “”:
msum += eval(line)
count += 1
line = infile.readline()
print(“\nThe average of the numbers is”, msum / count)
main()
图形用户界面
TKinter——Python标准GUI
1、15中常见的Tk控件
2、3种布局管理方法
3、控件的共同属性
Graphics——基于Tkinter扩展
1、GraphWin对象常用方法
2、图形对象通用方法
3、Point对象方法
4、Line对象方法
5、Circle对象方法
6、Rectangle对象方法
7、Oval对象方法
8、Polygon对象方法
9、Text对象方法
Turtle——Python内置的图形库
使用graphics库实现交互式多边形绘制
from graphics import *
def main():
win = GraphWin(“Draw a polygon”, 300, 300)
win.setCoords(0, 0, 300, 300)
message = Text(Point(150, 20), “CLick on five points”)
message.draw(win)
p1 = win.getMouse()
p1.draw(win)
p2 = win.getMouse()
p2.draw(win)
p3 = win.getMouse()
p3.draw(win)
p4 = win.getMouse()
p4.draw(win)
p5 = win.getMouse()
p5.draw(win)
polygon = Polygon(p1, p2, p3, p4, p5)
polygon.setFill(“peachpuff”)
polygon.setOutline(“black”)
polygon.draw(win)
message.setText(“Click anywhere to quit.”)
win.getMouse()
main()
使用TKinter实现简单的聊天界面
from tkinter import *import time
def main():
def send_msg():
strMsg = “我:” + time.strftime(“%Y-%m-%d %H:%M:%S”, time.localtime()) + “\n”
txtMsgList.insert(END, strMsg, ‘greencolor’)
txtMsgList.insert(END, txtMsg.get(‘0.0’, END))
txtMsg.delete(‘0.0’, END)
def cancelMsg():
txtMsg.delete(‘0.0’, END)
def send_msg_event(event):
if event.keysym == “Up”:
send_msg()
创建窗口
t = Tk()
t.title(“与Python聊天中”)
创建Frame容器
frmLT = Frame(width=500, height=320, bg=“white”)
frmLC = Frame(width=500, height=150, bg=“white”)
frmLB = Frame(width=500, height=30)
frmRT = Frame(width=200, height=500)
创建控件
txtMsgList = Text(frmLT)
txtMsgList.tag_configure(“greencolor”, foreground=“#008c00”) # 创建tag
txtMsg = Text(frmLC)
txtMsg.bind(“”, send_msg_event)
btnSend = Button(frmLB, text=‘发送’, width=8, command=send_msg)
btnCancel = Button(frmLB, text=‘取消’, width=8, command=cancelMsg)
imgInfo = PhotoImage(file=“python.gif”)
lblImage = Label(frmRT, image=imgInfo)
lblImage.image = imgInfo
窗口布局
frmLT.grid(row=0, column=0, columnspan=2, padx=1, pady=3)
frmLC.grid(row=1, column=0, columnspan=2, padx=1, pady=3)
frmLB.grid(row=2, column=0, columnspan=2)
frmRT.grid(row=0, column=2, rowspan=3, padx=2, pady=3)
固定大小
frmLT.grid_propagate(0)
frmLC.grid_propagate(0)
frmLB.grid_propagate(0)
frmRT.grid_propagate(0)
btnSend.grid(row=2, column=0)
btnCancel.grid(row=2, column=1)
lblImage.grid()
txtMsgList.grid()
txtMsg.grid()
t.mainloop()
main()
使用Turtle库绘制模拟时钟
from turtle import *from datetime import *
def Skip(step):
penup()
forward(step)
pendown()
def mkHand(name, length):
注册Turtle形状,建立表针Turtle
reset()
Skip(-length * 0.1)
begin_poly()
forward(length * 1.1)
end_poly()
handForm = get_poly()
register_shape(name, handForm)
def Init():
global secHand, minHand, hurHand, printer
mode(“logo”) # 重置Turtle指向北
建立三个表针Turtle并初始化
mkHand(“secHand”, 125)
mkHand(“minHand”, 130)
mkHand(“hurHand”, 90)
secHand = Turtle()
secHand.shape(“secHand”)
minHand = Turtle()
minHand.shape(“minHand”)
hurHand = Turtle()
hurHand.shape(“hurHand”)
for hand in secHand, minHand, hurHand:
hand.shapesize(1, 1, 3)
hand.speed(0)
建立输出文字Turtle
printer = Turtle()
printer.hideturtle()
printer.penup()
def SetupClock(radius):
建立表的外框
reset()
pensize(7)
for i in range(60):
Skip(radius)
if i % 5 == 0:
forward(20)
Skip(-radius - 20)
else:
dot(5)
Skip(-radius)
right(6)
def Week(t):
week = [“星期一”, “星期二”, “星期三”,
“星期四”, “星期五”, “星期六”, “星期日”]
return week[t.weekday()]
def Date(t):
y = t.year
m = t.month
d = t.day
return “%s %d %d” % (y, m, d)
def Tick():
绘制表针的动态显示
t = datetime.today()
second = t.second + t.microsecond * 0.000001
minute = t.minute + second / 60.0
hour = t.hour + minute / 60.0
secHand.setheading(6 * second)
minHand.setheading(6 * minute)
hurHand.setheading(30 * hour)
tracer(False)
printer.forward(65)
printer.write(Week(t), align=“center”,
font=(“Courier”, 14, “bold”))
printer.back(130)
printer.write(Date(t), align=“center”,
font=(“Courier”, 14, “bold”))
printer.home()
tracer(True)
ontimer(Tick, 100) # 100ms后继续调用tick
def main():
tracer(False)
Init()
SetupClock(160)
tracer(True)
Tick()
mainloop()
if name == “__main__”:
main()
使用turtle库绘制雪花图
import turtle as ttimport random as rd
def ground():
tt.hideturtle()
tt.speed(100)
for i in range(400):
tt.pensize(rd.randint(5, 10))
x = rd.randint(-400, 350)
y = rd.randint(-280, -1)
r = -y / 280
g = -y / 280
b = -y / 280
tt.pencolor((r, g, b))
tt.penup()
tt.goto(x, y)
tt.pendown()
tt.forward(rd.randint(40, 100))
def snow():
tt.hideturtle()
tt.pensize(2)
tt.speed(100)
for i in range(100):
r = rd.random()
g = rd.random()
b = rd.random()
tt.pencolor(r, g, b)
tt.penup()
tt.setx(rd.randint(-350, 350))
tt.sety(rd.randint(1, 270))
tt.pendown()
dens = rd.randint(8, 12)
snowsize = rd.randint(10, 14)
for j in range(dens):
tt.forward(snowsize)
tt.backward(snowsize)
tt.right(360 / dens)
def main():
tt.setup(800, 600, 0, 0)
tt.tracer(False)
tt.bgcolor(“black”)
snow()
ground()
tt.tracer(True)
tt.mainloop()
if name == “__main__”:
main()
Python库
1.Python官网提供的Python库索引(opens new window)
2.Python库的安装
自定义安装,去国内镜像站下载软件国内pipy镜像站
使用pip工具
文件安装,通过.whl文件安装
pip inatall xxx.whl
pip工具的安装
pip源码下载地址(opens new window)
解压后执行:python setup.py install即可
OS库常用函数
1、OS库常用函数
2、os.path是处理操作系统的一个字库,os.path常用函数
3、os.walk(path)用于遍历一个目录,返回一个三元组
- root,dirs,files = os.walk(path)。
- root是字符串,dirs和files是列表类型,表示root中的所有目录和所有文件。
sched库
1.sched库用来进行任务调度。
2.sched.scheduler()用来创建一个调度任务。
3.当需要对一个任务进行时间调度时,用这个函数scheduler.enter(delay,priority,action,argument=())。
4.delay表示延时多少时间去执行。
5.priority表示优先级。
6.action是具体需要调度的函数。
7.argument表示action函数需要的参数变量。
8.scheduler.run()运行调度任务中的全部调度事件。
9.scheduler.cancel(event)取消某个调度事件。
函数定时执行
import schedimport time
def print_time(msg=‘default’):
print(“当前时间”, time.time(), msg)
s = sched.scheduler(time.time, time.sleep)print(time.time())
s.enter(5, 1, print_time, argument=(“延迟5秒,优先级1”,))
s.enter(3, 2, print_time, argument=(“延迟3秒,优先级2”,))
s.enter(3, 1, print_time, argument=(“延迟3秒,优先级1”,))
s.run()print(time.time())
打印某一个目录下的全部文件
import os
path = input(“请输入一个路径:”)
for root, dirs, files in os.walk(path):
for name in files:
print(os.path.join(root, name))
打包发布python应用程序(使用py2exe库)
1.确定python程序可以执行,比如lesson.py。
2.写一个发布脚本setup.py(与lesson.py同目录),在里面指名需要调用运行的python程序。
from distutils.core import
setupimport py2exe
setup(console=[‘lesson.py’])
3.在命令行下执行python setup.py py2exe。
4.程序正确执行后会生成dist目录和__pycache__目录,前者包含了发布的exe程序,后者可以删除。
NumPy库
1、NumPy系统是Python的一种开源的数值计算扩展,能够存储和处理大型矩阵
- N维数组对象Array。
- 函数库。
- 实用的线性代数、傅里叶变换和随机数生成函数。
2、NumPy提供了许多高级的数值编程工具
- 矩阵数据类型
- 矢量处理
- 运算库
3、NumPy的主要对象是同种元素的多维数组
- 维度叫做轴
- 轴的个数叫做秩
- NumPy的数组类被称为ndarray,通常被称作数组
1、创建数组 - 使用array函数,利用常规的Python列表和元祖创造数组,所创建的数组类型由原序列中的元素类型决定,例如:a=array([[1,2],[3,4]],dtype=complex).
- 使用占位符创建数组,例如函数zeros创建一个全是0的数组,函数ones创建一个全是的数组,函数empty创建一个内容随机并且依赖于内存状态的数组。
- 利用arrange创建数组:arrange(10,30,5),从10开始,每次加5,直到30(不包括)
2、打印数组,类似于嵌套列表。
3、数组的算数运算按元素进行,NumPy中的乘法运算符*指示按元素计算。
4、矩阵乘法可以使用dot函数或创建矩阵对象实现。
5、NumPy提供常见的数学函数如sin、cos和exp。
6、NumPy对于多维数组的运算,缺省情况下并不使用矩阵运算,对数组进行矩阵运算,可调用相应的函数。
7、NumPy库提供了matrix类,使用matrix类创建的是矩阵对象,他们的加减乘除运算采用矩阵方式计算。
8、创建等比数列:numpy.logspace(1,10,3)表示在1到10中生成3个等比数列。
9、创建结构数组:
- 声明结构数组类型:person=np.dtype({‘names’:[‘name’,‘age’],‘formats’:[‘S32’,‘i’]})
- 创建结构数组:a = np.array([(‘zhang’,12)],dtype=person)
- 访问结构数组的成员:a[0][‘name’]
10、更高级的运算:NumPy线型代数子库linalg。
- inv函数:计算逆矩阵。
- solve函数:求解多元一次方程组。
Matplotlib库
1、Matplotlib是一个数据可视化函数库。
2、pyplot子库提供了2D图表制作的基本函数。
3、matplotlib提供的直方图绘制函数为hist()。
4、matplotlib的image子库可用来对图像进行操作。
- imread()函数将图像的各像素点的RGB值存入数组。
- imshow()函数将存有RGB值的图像数组以图像的方式显示出来。
使用Matplotlib库绘制曲线
import matplotlib.pyplot as pltimport numpy as np
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y = np.sin(x)
z = np.cos(x * x)
plt.figure(figsize=(8, 4))
plt.plot(x, z, “ro”, label=“
c
o
s
(
x
2
)
cos(x^2)
cos(x2)”)
plt.plot(x, y, label=“
s
i
n
(
x
)
sin(x)
sin(x)”)
plt.xlabel(“Time/s”)
plt.ylabel(“”)
plt.legend()
plt.title(“matplotlib”)
plt.show()
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
绘制函数为hist()。
4、matplotlib的image子库可用来对图像进行操作。
- imread()函数将图像的各像素点的RGB值存入数组。
- imshow()函数将存有RGB值的图像数组以图像的方式显示出来。
使用Matplotlib库绘制曲线
import matplotlib.pyplot as pltimport numpy as np
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y = np.sin(x)
z = np.cos(x * x)
plt.figure(figsize=(8, 4))
plt.plot(x, z, “ro”, label=“
c
o
s
(
x
2
)
cos(x^2)
cos(x2)”)
plt.plot(x, y, label=“
s
i
n
(
x
)
sin(x)
sin(x)”)
plt.xlabel(“Time/s”)
plt.ylabel(“”)
plt.legend()
plt.title(“matplotlib”)
plt.show()
[外链图片转存中…(img-kHwjAooM-1715360979778)]
[外链图片转存中…(img-41BsvFuy-1715360979779)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!