一小时带你入手Python

简介: 本文适用于有一定编程基础的人作为参考,本文虽然是对于Python知识点的总结,但对于知识点的介绍不会占用太多的篇幅,以思路的提供(包括游戏思路和Python学习方向)为主要内容,若想了解请直接后台留言或搜索"廖雪峰 Python"或直接查看英文文档(Python英文文档),本文所涉及到的所有例子均在Windows平台上.

Python可以干什么?


1>可以做日常任务,比如自动备份喜马拉雅音频

2>可以做网站(国内的豆瓣和国外的YouTube就是Python写的)

3>很多在线游戏的后台也是Python写的(比如异常火爆 的"吃鸡"游戏还有火遍全球的"像素小鸟"游戏)

4>Python同时也被誉为最好的人工智能语言...


话锋一转


说了这么多Python的优点,按照一般狗血剧情的发展,是时候该说点缺点了:


1>Python不能写操作系统(只能用深不可测的c语言来写)也不能写手机应用(对于iPhone只能用Swift和Objective-c来写,对于Android下只能用Java来写)


2>在3D游戏方面也有些差强人意


3>其次代码量少(话锋一转,你是不是以为我要说优点了),代码量少的代价就意味着运行速度慢,c程序运行 1秒钟,Java程序就可能运行2秒钟,而Python程序可能需要10秒.(这里的数据只做定性的分析,并没有定量的准确性)


温馨提示


本文适用于有一定编程基础的人作为参考,本文虽然是对于Python知识点的总结,但对于知识点的介绍不会占用太多的篇幅,以思路的提供(包括游戏思路和Python学习方向)为主要内容,若想了解请直接后台留言或搜索"廖雪峰 Python"或直接查看英文文档(Python英文文档),本文所涉及到的所有例子均在Windows平台上.


上车请坐稳,老司机要发车了哟

Python基础


1.第一个Python程序


输入输出语句:


input("Welcome to Python")
print("Hello world!")
"Helloworld" remarks what


2.数据类型与变量:


1>

   整数

   浮点数

   字符串(若字符串内部既包含 ' 又包含 " ,可以通过转义字符"\"来标识;Python允许用r''表示''内部的字符串默认不转义;Python允许用'''...'''的格式表示多行内容)


   布尔值(True和False,可以用and、or、not运算)


   空值(None)


   还有一些内置的数据类型(列表、字典或自定义数据类型)


你应该懂的


浮点数的在电脑中的存储形式:


对于浮点类型的数据采用单精度(float)和双精度(double)来存储.


对于float型数据,其长度是4个字节,右边23位用来表示小数点后面的数字,中间8位用来表示e,左边一位用来表示正负。


对于double型数据,其长度是8个字节,右边52位用来表示小数点后面的数字.中间11位表示e,左边一位用来表示正负.


微信图片_20220609231125.png


比如说4.02的存储:(为什么是"4.02"呢?因为这是我女朋友生日啊)


首先了解下"二进制的科学记数法":X= a*2 ^e,e为小数点移动的位数,对于"4.02"来说,其二进制表示为:"100.00001",用二进制科学记数法表示为:"1.0000001*2²"


其存储形式为:


尾数(小数点后的数)0000001,补够23位,即就是 0000 0010 0000 0000 0000 000

指数:2加上127,就是129,二进制1000 0001

用二进制表示就是:

(符号位1位)  0

(指数为8位)  1000 0001

(尾数位23位) 0000 0010 0000 0000 0000 000

写成标准二进制形式就是:

0100 0000 1000 0001 0000 0000 0000 0000

写成16进制就是:40 81 00 00 H

2>

变量:Python在定义变量的时候本身类型是不固定的(这种语言称之为动态语言),相反,必须在定义变量时指类型的语言称之为静态语言(比如Java)


理解下变量在内存中的表示:


微信图片_20220609231146.png


微信图片_20220609231202.png



常量:所谓常量就是不能改变的量(如果你想改变,也ok啊,只不过你承担的后果就相当于:"站在一堆程序中喊了一声'PHP是世界上最好的语言",所以为了活命,还是规矩点吧),通常用全部大写的变量名来表示.


Python中的两种除法:

/   --- 一般除法

//   ---  地板除(整数的除法仍然是整数,只取结果的整数部分)


3.编码问题:


微信图片_20220609231210.png


由于计算机是美国人发明的,因此最早只有127个字符被编码到计算机里,也就是英文字母、数字和一些符号,这个编码表称为ASCII编码.然而世界上有这么多的国家,各国都有自己的标准,所以乱码问题是不可避免的,由此Unicode就应运而生了,它将所有语言都统一到一套编码里(编码通常是2个字节),这样就消除了乱码问题.无奈foreigners不了解中国文字的博大精深,对于简单的英文字母通常需要编码成一个字节,而对于汉字来说却需要3-6个字节.


想象一个场景:


如果要传输的文本中包含了大量的英文字母,若采用Unicode编码的话,肯定不会乱码,但肯定会造成空间的浪费.所以聪明的人类就搞出了"可变长的UTF-8",它会把一个Unicode字符根据不同的数字大小编码成1-6个字节,从而节省空间.


举个栗子:


在Windows系统下,打开默认的记事本,输入'联通'两个字,保存之后,关闭记事本应用程序,重新打开,就会看到乱码.当你打开记事本编辑、保存、重新打开的过程中,编码的转化是一个什么过程呢?


微信图片_20220609231220.png


字符串的格式化:


(用到的场景比较多,尤其是在URL拼接时)

   %

   format


5.条件判断:


   if语句

   if-else语句

   if-elif-else语句


6.循环:


   for-in循环

   while循环

   结束循环:

       break--结束当前循环

       continue--结束当前的这次循环,开始下一次循环



7.内置数据类型:


(1)list和tuple


   list:列表(在c语言或Javascript等语言中称为数组), 对于列表的操作与其他语言对于数组的操作大致一样(这里不做赘述,如有疑问,请后台留言)

tuple:元组(一经初始化就不能修改)那你一定想问了要tuple干啥呢,只能看(初始化)不能动(操作)?

别急,tuple的优点:细说tuple


(2)dict和set


   dict:字典,在Javascript中称为JSON,使用键值对(key-value)的形式存储.

   set:类似于dict,是一组key的集合,但不存储value,且在set中没有重复的key.

   创建set的方法:list作为参数传入


(3)list和dict特点比较:


dict:

查找和插入的速度极快,不会随着key的增加而变慢;(查找方式类似于:一页一页翻字典)需要占用大量的内存,内存浪费多.(查找方式类似于:根据页码数翻字典)


list:

查找和插入的时间随着元素的增加而增加;占用空间小,浪费内存很少。

对于list和dict的基本操作这里不做赘述,若有疑问,后台留言.


8.函数


这里对于函数的定义、调用、参数的传递等基础知识不做过多的废话,相信各位大佬都有扎实的基本功了.

小编在学习Python过程中的问题分享:

打印出list的下标和对应的项:


微信图片_20220609231230.png


打印出dict的key和values:



微信图片_20220609231236.png


Python高级部分


10.模块的使用:


游戏模块:Pygame


从小编不丰富的几篇爬虫经验来看,反爬措施这些只能靠经验积累,因为各个网站的措施是不同的,最简单的甚至伪装一下headers就可以了,稍微难点可能涉及下IP代理,在难点可能涉及图片验证码等,然而还有一个点你必须提前get到,那就是正则表达式,在之前的一篇推文中也说过,对于正则的理解、书写,请务必达到信手拈来的地步(详情参考:廖雪峰官方网站).


11.面向对象部分:


面向对象编程


微信图片_20220609231253.jpg


此"对象"非彼对象


1>

面向对象中最重要的概念就是"类",将实际生活中的问题抽象成一个类,并添加该类的属性以及方法(具体如何抽象,如何添加类属性和方法请移步官方文档).


2>面向对象于面向过程的区别:


面向对象:把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递.


面向过程:把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。


3>祖先类与构造函数:


祖先类(Object):

所有类都会继承的类--object(继承方法:直接在子类中将要被继承的父类作为参数传入;使用super方法<super("子类名称",self)."继承的方法">)


具有初始化的构造函数:


__init__方法:将各种属性绑定到self,因为self就指向创建实例的本身(self不用当作参数传入,Python解释器会自己把实例变量传进去).


4>amazing aspects:


和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且调用时,不用传递该参数.除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数。


私有变量的定义:属性名称前加两个下划线("__")


继承:将父类的所有功能直接拿过来,不必从0做起,子类只需要新增自己特有的方法即可,也可以覆盖父类不合适的方法.

Stay hungry,Stay foolish


动态语言的鸭子类型:


通俗点讲就是:"一个对象只要看起来像鸭子,走路起来像鸭子,那么它就是鸭子",对于一个真正的文件对象,它有一个read()方法,当然也完全可以传入一个"file-like object"同样也可以实现read()方法.


对于__slots__(限制访问)、@property(装饰器)等的知识点,由于本文最后的实例不涉及,所以这里不做分享,若有问题,后台留言.


12.错误处理


try...except...finally

try执行出错的代码,若出错则继续执行except和finally,若不出错,则直接执行finally语句.

错误处理代码虽然简单,但是错误处理的模式对于代码的健壮性却起着非常重要的作用,在以后代码中务必学会这种模式.


13.IO编程:


文件读写:


读写文件是最常见的IO操作.Python内置了读写文件的函数.读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件).Python3中使用with open方法,这个方法最直接的好处就是不用再写f.close()了,因为with语句会直接自动帮我们调用close()方法.


<具体API的使用请参考官网>


内存读写:<StringIO和BytesIO>


数据的读写不一定是文件,也可以在内存中读写

StringIO顾名思义就是在内存中读写str,直接看代码:


微信图片_20220609231301.png


StringIO只能操作的是str,如果要操作二进制数据,就需要使用BytesIO,BytesIO实现了在内存中读写bytes,我们创建了一个BytesIO,然后写入一些Bytes.


文件操作:


即一些对于文件夹的创建、删除等,就是一些简单命令的使用,如果读者对于Linux有一些了解,就会觉得大同小异.


14.数据库的操作:


使用模块:mysql.connector

具体的使用参照"廖雪峰"的官网即可



15.电子邮件:


使用Python也可以实现邮件的收发(现在有没有感受到Python的魔力呢),其最实质的就是SMTP和POP3两个协议的使用:


名词解释:


MUA:Mail User Agent,即邮件用户代理,就是平时使用的QQ邮箱或者网易邮箱等软件

MTA:Mail Transfer Agent,即邮件传输代理,就是网易、腾讯这些提供Email服务的服务商

MDA:Mail Delivery Agent,即邮件投递代理

image.gif

发送邮件的过程:


假设从QQ邮箱给网易邮箱发送一个邮件:


编写完邮件,输入对方的邮件地址,点击"发送邮件"就会通过MUA将电子邮件发送出去,发送出去之后,并不会直达对方的电脑,而是会发送到MTA(由于是从qq.com向163.com发送邮件,所以邮件会首先发送到腾讯提供的MTA然后被投递到网易提供的MTA,中间可能会经历别的MTA),到达对方的MTA之后,网易的MTA会把Email投递到邮件的最终目的地MDA,Email到达MDA之后就静静躺在网易的某个服务器上,或存放在某个文件或特殊的数据库里,所谓的电子邮箱就是这个长期保存邮件的地方.


由于邮件发送过去之后,对方可能电脑未开机或者断网,所以类比生活中的实际例子:必须将邮件保存在邮筒里面,等待用户去取.同样的,电子邮件也有类似的机制,当对方想要取邮件时,必须通过MUA从MDA上把邮件取到自己电脑上.


简单的讲:


发送人-->MUA-->MTA-->若干个MTA-->MDA<--MUA<--收件人


image.gif

这里对于如何使用代码实现不予讲解(网上一搜一大堆),只对原理和两个邮件协议作以简单的说明:


发送邮件时,MUA和MTA使用的是SMTP,简称'Simple Mail Transfer Protocol',即简单邮件传输协议,用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式,SMTP属于TCP/IP协议,帮助每台计算机在发送或中转信件时找到下一个目的地,SMTP是一个"推"的协议,它不允许根据需要从远程服务器上"拉"消息.收邮件时,MTA和MDA使用的是POP3,简称"Post Office Protocol",即邮局协议的第三个版本,是TCP/IP协议中的一员,用于支持使用客户端远程管理在服务器上的电子邮件,允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作不会反馈到服务器上.



屏幕截图 2022-06-09 232843.png屏幕截图 2022-06-09 232843.png

16.sharing


电影是运用照相以及录音的手段,以一定的摄入速度(现代电影是每秒摄入24个画面),把景物活动的影像和声音摄录在胶片上,然后把这些景物各运动阶段的静止画面连续放映到银幕上,借助人的“视觉暂留”现象,在人的视觉中造成再现景物运动影像的效果.这就成了电影.科学研究表明,视觉暂留时间约为1/5秒到1/30秒.当电影画面换幅频率达到每秒15~30幅之间时,人就看不到每幅静止画面之间的停顿,而只看到这些连续放映的画面的活动影像了.电影发明初期,无声电影的标准换幅频率为每秒16幅,后有声电影改为每秒24幅.虽然借助视觉暂留现象,人们看到了连续的活动影像.但胶片上画幅间隔造成影像忽明忽暗使人有闪烁感,让人觉得不舒服.当闪烁频率提高到一定数值如每秒48次时,闪烁感会消失.为了提高闪烁率,人们采用增加放映机遮光器的叶片数的办法.如一个有两个叶片的遮光器,当画面移动一次,遮光器就旋转一次,也就是说叶片遮光两次,这样就使闪烁率从每秒24次提高到48次,从而使闪烁感消失.



微信图片_20220609232941.jpg


项目实战


序言:


  都说兴趣是最好的老师,编程也不例外,如果有了找到了支撑的兴趣点,那么想不成为大佬都难.那么通过游戏来学习编程毫无疑问胜过你一个人吭哧吭哧的试别人封装好的API,更何况是使用这个集万千宠爱于一身的Python语言,我同你讲啊,不亦乐乎.


你要了解的:


  本游戏使用的是Pygame模块,对于某些API(比如初始化、显示大小、名称设置--"pygame.display.set_caption('我是游戏名')")的调用不会进行分享,请直接移步相关网站或后台留言进行学习,除此之外,你必须对于类、继承、封装、模块化思想有一定的了解,OK,话不多说,直入主题吧


从小白到大牛:


  第一次写游戏总会有写激动,一方面是憧憬着游戏写好之后的开心,另一方面是因为不知道该从哪里开始写起.对于本文中的简单例子来说,其就是外星人大战的阉割版.在写游戏之前应该做好规划(包括类的封装、类属性和方法、库的使用、模块的划分甚至是名称的设置),往往游戏之前良好的规划会占用整个项目的绝大部分时间,而真正写代码的时间很少.< 真正一个好的项目花在代码上的时间很少,大部分时间都花在需求分析、文档编写以及维护上>


  对于该游戏:(只对主要部分进行分析)

      游戏的主人翁:飞船、子弹、外星人

     最基本的三个类:ship、bullet、alien(考虑各个类的属性和方法对类进行合适的封装)

     还有一个必不可少的类:alien_invasion(控制游戏的运行)

.........


游戏抢先看:

image.gif


更多思路提供请点击阅读原文进行查看...........


微信图片_20220609232956.png


参考资料:

   Python编程从入门到实践

   Python参考手册

   微信公众号:

   Duing

   CSDN

   Python专栏

   Python爱好者社区

   痴海

   不正经程序员

   廖雪峰官网

相关文章
|
8天前
|
机器学习/深度学习 自然语言处理 API
有一点python基础,想玩大模型,不知从何入手。快速入门。
有一点python基础,想玩大模型,不知从何入手。快速入门。
315 0
|
9月前
|
机器学习/深度学习 算法 数据挖掘
巨详细的一份Python学习路径文档--如何精准的入手Python
巨详细的一份Python学习路径文档--如何精准的入手Python
133 0
|
11月前
|
数据采集 机器学习/深度学习 人工智能
python高效爬虫的实现可以从哪些方面入手
python高效爬虫的实现可以从哪些方面入手
|
数据采集 机器学习/深度学习 数据挖掘
入手一门编程语言,一起初识Python
入手一门编程语言,一起初识Python
|
域名解析 网络协议 Python
Python Flask Web 开发入门与项目实战 ——Flask快速入手
Python Flask Web 开发入门与项目实战 Flask快速入手
914 0
Python Flask Web 开发入门与项目实战 ——Flask快速入手
|
开发者 Python
编程人员必须入手的一些软件 | 手把手教你入门Python之三
XMind是绘制思维导图,也叫“脑图”的一个软件,对于我们学习任何东西都是非常有用的,推荐下载!
编程人员必须入手的一些软件 | 手把手教你入门Python之三
|
2天前
|
存储 算法 安全
Python编程实验六:面向对象应用
Python编程实验六:面向对象应用
18 1
|
2天前
|
Python
Python编程作业五:面向对象编程
Python编程作业五:面向对象编程
16 1
|
2天前
|
存储 人工智能 自然语言处理
Python编程实验五:文件的读写操作
Python编程实验五:文件的读写操作
9 0