Python学习之旅

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习之旅相关的知识,希望对你有一定的参考价值。

前言

  偶然看到廖雪峰老师写的《Python教程》被其通俗易懂的语言深深吸引,于是就如饥似渴般沉侵其中。从python简介开始一直到最后完成实战项目差不多半个多月时间,收货颇丰,疑惑也不少,于是希望通过记录的方式梳理一下自己的思路,也算是对自己半个多月学习的总结。以下主要记录自己学习结构,不做详细说明,需要看详细教程可移步(http://www.liaoxuefeng.com)查看原文。

简介

  Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。许多大型网站就是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。龟叔给Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。

Python的缺点:

  1. 运行速度慢。和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。但是大量的应用程序不需要这么快的运行速度,因为用户根本感觉不出来。例如开发一个下载MP3的网络应用程序,C程序的运行时间需要0.001秒,而Python程序的运行时间需要0.1秒,慢了100倍,但由于网络更慢,需要等待1秒,你想,用户能感觉到1.001秒和1.1秒的区别吗?这就好比F1赛车和普通的出租车在北京三环路上行驶的道理一样,虽然F1赛车理论时速高达400公里,但由于三环路堵车的时速只有20公里,因此,作为乘客,你感觉的时速永远是20公里。
  2. 代码不能加密。如果要发布你的Python程序,实际上就是发布源代码。 这个缺点仅限于你要编写的软件需要卖给别人挣钱的时候。好消息是目前的互联网时代,靠卖软件授权的商业模式越来越少了,靠网站和移动应用卖服务的模式越来越多了,后一种模式不需要把源码给别人。再说了,现在如火如荼的开源运动和互联网自由开放的精神是一致的,互联网上有无数非常优秀的像Linux一样的开源代码,我们千万不要高估自己写的代码真的有非常大的“商业价值”。那些大公司的代码不愿开放的更重要的原因是代码写得太烂,一旦开源,就没人敢用他们的产品了。

安装

  因为Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序,放到Linux上也是能够运行的。要开始学习Python编程,首先就得把Python安装到你的电脑里。安装后,你会得到Python解释器(就是负责运行Python程序的),一个命令行交互环境,还有一个简单的集成开发环境。目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的。由于3.x版越来越普及,教程将以最新的Python 3.5版本为基础。

在Mac上安装Python

  如果你正在使用Mac,系统是OS X 10.8~10.10,那么系统自带的Python版本是2.7。要安装最新的Python 3.5,有两个方法:

  方法一:从Python官网下载Python 3.5的安装程序(网速慢的移步国内镜像),双击运行并安装。

  方法二:如果安装了Homebrew,直接通过命令brew install python3安装即可。

在Windows上安装Python

  首先,根据你的Windows版本(64位还是32位)从官网下载Python3.5对应的64位安装程序32位安装程序(网速慢的移步国内镜像),然后运行下载的EXE安装包。

Python语法

  语言的学习总离不开语法,无论是英语,法语,德语,西班牙语等的学习都有一套自己的使用约定。我把Python的使用约定也总结出自己的一套语法,即Python语法核心五要素:

  1. 基本类型:内置常用的基本类型,如int, float, str, list, tuple, dict等
  2. 逻辑运算:如条件判断,循环等
  3. 函数/方法:定义,参数
  4. 面向对象(OOP):一种程序设计思想,核心是继承,封装,多态
  5. 模块:内建模块和第三方模块

五要素关系:语法中的基本数据类型通过一定的逻辑处理构成函数/方法,对函数/方法、基本数据类型套用面向对象的程序设计思想就能构成丰富的模块。

基本类型

整数

  Python可以处理任意大小的整数,包括负整数,在程序中的表示方法和数学上的写法一样,例如:1,100,-8080,0,等等。

浮点数

  浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

字符串

  字符串是以单引号或者双引号括起来的任意文本,比如‘abc’。如果字符串内部包含’又包含“时可以使用转义字符\来标识,如:‘I \’m \”OK\”!’

布尔值

  一个布尔值只有True、False两种值,在Python中可以直接用True、False表示布尔值(请注意大小写)。

空值

  空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

List和Tuple

List

Tuple

切片

迭代

迭代器

生成式

生成器

Dict和Set

Dict

Set

逻辑运算

条件判断

循环/迭代

函数/方法

  在Python中,类中定义的函数(方法)第一个参数永远是实例变量self(不能忘记写上),并且调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以你仍然可以使用默认参数、可变参数、关键字参数和命名关键字参数。

函数定义

函数返回

函数参数

参数检查

参数类型

  定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数可变参数关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。

位置参数
默认参数 
可变参数
关键字参数
命名关键字参数

参数组合

参数小结

  1. 默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!
  2. 要注意定义可变参数和关键字参数的语法:
    • *args是可变参数,args接收的是一个tuple;
    • **kw是关键字参数,kw接收的是一个dict。
  3. 以及调用函数时如何传入可变参数和关键字参数的语法:
    • 可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3))
    • 关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{‘a‘: 1, ‘b‘: 2})
  1. 使用*args**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
  2. 命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。
  3. 定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。

常用函数

类型转换

递归函数

匿名函数 

高阶函数

变量可以指向函数

结论:函数本身也可以赋值给变量,即:变量可以指向函数。 

函数名也是变量

传入函数

偏函数
装饰器
Filter函数
Sorted函数

返回函数

面向对象

  说到面向对象,就不得不提面向过程。从字面上理解,面向对象针对的是一个事物(比如桌子,椅子,动物等)的研究偏静态,而面向过程则是针对流程或者动作的研究,偏动态。无论是面向过程还是面向对象核心是一种设计思想,指导我们如何进行程序设计。

  计算机世界只是我们现实世界的映射,如何实现这种映射就是我们广大程序猿的工作。举个简单例子,“小明骑车去上学”,这是现实世界中小明的一项日常活动,如何把这一日常活动映射到计算机呢?很简单——编程(写代码)。

  用面向过程的思想实现上述场景:

# 面向过程设计:小明骑车去上学
def Go2School(name, vehicle):

    print(%s%s去上学!% (name, vehicle))

if __name__ == __main__:

    Go2School(小明,骑车)

  用面向对象思想实现上述场景:

# 面向对象设计:小明骑车去上学

class Student(object):

    """定义一个学生类"""

    def __init__(self, name):

        super(Student, self).__init__()

        self.__name = name

    def ByVehicle(self,vehicle):

        return (self.__name + vehicle)

    def Todo(self,thing):  # 参数self必须写,不写会报错

        return thing

xiaoMing=Student(小明)

print(%s%s! % (xiaoMing.ByVehicle(骑车),xiaoMing.Todo(上学)))

  现在,该死的产品狗告诉我要实现“小明骑车回家”或者“小明坐车去上学”,那么按照面向过程设计思想,就得再写一个GoHome(name, vehicle)函数;而按照面向对象设计思想,不用做任何更改,直接把传入的参数“骑车”换成“坐车”,把“上学”换成“回家”即可。如果下次产品狗告诉你要实现“小花坐火箭去月球”,你使用面向对象设计的程序根本不用做任何修改,直接使用就行。很明显,面向对象设计提供了更强大的扩展,是一种非常好的设计指导思路。

类和实例 

三大特性

继承

封装

多态

模块

使用模块 

安装模块

常用模块

内建模块

  常用内建模块包括:datetime, collections, base64, struct, hashlib, itertools, contextlib, XML, HTMLParser, Urllib等。在此不做详述。

第三方模块

  常用第三方模块有:PIL, Tkinter等。在此不做详述。

Python用法

IO编程

进程和线程

多进程

多线程

进程VS线程

分布式进程

协程

同步IO

文件读写

操作文件和目录

序列化

异步IO

asyncio

async/wait

aiohttp

网络编程

TCP编程

UDP编程

电子邮件

SMTP发送邮件

POP3收取邮件

访问数据库

使用SQLite

使用MySQL

使用SQLAlchemy

Web开发

WSGI接口

使用Web框架

使用模板

 

以上是关于Python学习之旅的主要内容,如果未能解决你的问题,请参考以下文章

我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段

我的OpenGL学习进阶之旅NDK开发中find_library查找的系统动态库在哪里?

我的OpenGL学习进阶之旅NDK开发中find_library查找的系统动态库在哪里?

python学习之旅-06 之小数据池,编码

仅以此博开启我的python学习之旅~~~~~~~

Unity Shader入门精要学习笔记 - 第5章 开始 Unity Shader 学习之旅