编程零基础应当如何开始学习 Python?

209 阅读14分钟
对于python这块有任何不懂的问题可以随时来问我,我对于学习方法,系统学习规划,还有学习效率这些知道一些,希望可以帮助大家少走弯路。当然也会送给大家一份系统性的python资料,文末附有资料链接
以下本文全是干货

1 Python简介

1.1 Python的特点

Python是Guido Van Rossum在1989年开发的一种脚本解释语言,是ABC语言的一种继承。由于作者是Monty Python喜剧团的一名爱好者,故将其命名为Python(蟒蛇)
Python作为当下一种热门语言,具有以下特点:
  • 语法清晰,代码友好,易读。
  • 应用广泛,具有大量的第三方库(尤其是机器学习、人工智能相关库)支持。
  • Python可移植性强,易于操作各种存储数据的文本文件和数据库。
  • Python是一种面向对象语言,支持开源思想。
根据Tiobe编程语言最新排行榜(部分),其中Python排名第三,并且随着大数据、数据分析、深度学习、人工智能的迅速发展,Python收到的关注程度越来越高。
![](https://pic2.zhimg.com/50/v2-27512b39f90e41e423d306c17539c67a_b.jpg)

1.2 安装及第三方库导入过程

利用Python编程之前,首先需要安装Python软件:包括搭建Python环境、学会安装Python第三方库等。
搭建好Python环境之后是这个样子的(同时可以打印输出进行进一步的测试)。
![](https://pic3.zhimg.com/50/v2-fb86640e26fc8b22c5994c300e490476_b.jpg)
当编写大段代码或自定义函数时,在command命令行中编写是不太现实的,因此可以进一步选择合适的编译器进行编译,我在这里用的是JetBrainsPyCharm2018.1.2 x64,下面提供一个百度云盘地址。
百度云盘地址:https://pan.baidu.com/s/1zunmfSfHVDF9VP1qVDQ8Gg
提取码:4558

2 基本语法

2.1 缩进与注释

1 缩进

不同于其他语言,Python 是通过缩进来标明代码的层次关系的。其中,1个缩进等于4个空格,它是 Python 语言中标明程序框架的唯一手段。前面提到的的 PyCharm 提供了快捷键 Tab 用于快速缩进,Shift + Tab用于返回缩进的上一部操作。

2 注释

注释是用于说明代码信息的,注释代码不执行。Python 注释主要包括两种:
  • 行注释:采用“#”开头进行单行注释,如:“# 这里是单行注释”。
  • 块注释:即多行注释,常用“ ''' ”或“ """ ”开头和结尾。''' 这里是多行注释 …… 这里是多行注释 '''
这里需要注意的是:
① python 中“ ”与‘ ’在表示字符串时是没有区别的。 在输出时,输出内容有“ ”(双引号)则在单引号内使用双引号,即‘ “要输出内容” ’。输出内容有‘ ’(单引号)则在双引号内使用单引号,即“ ‘要输出内容‘ “。
②''' ''' (三引号)用法 1、用作多行注释;2、用作表示一个字符串; ★python中并没有提供专门的多行注释的符号,当一串字符被三引号引用时,但它不作为字符串被操作时,这个三引号内引用的内容就被视为注释。

2.2 常量与变量

1 常量

常量是指程序中值不发生改变的元素,一旦初始化后就不能对其进行修改的固定值,它是内存中用来保存固定值的单元。
事实上,Python并未提供如C/C++/Java一样的const修饰符,换言之,python中没有常量,python程序一般通过约定俗成的变量名全大写的形式表示这是一个常量。然而这种方式并没有真正实现常量,其对应的值仍然可以被改变。后来,python提供了新的方法实现常量:即通过自定义类实现常量。这要求符合命名全部为大写和值一旦被绑定便不可再修改这两个条件。
下面给出一个例子(.py文件),该文件定义了一个方法__setattr(),和一个异常ConstError, ConstError类继承类TypeError。通过调用类自带的字典__dict, 判断定义的常量是否包含在字典中。如果字典中包含此变量,将抛出异常,否则,给新创建的常量赋值。最后两行代码的作用是把const类注册到sys.modules这个全局字典中。
class _const:
    class ConstError(TypeError): pass
    def __setattr__(self, name, value):
        if name in self.__dict__:
            raise self.ConstError("Can't rebind const (%s)" % name)
        self.__dict__[name] = value

import sys
sys.modules[__name__] = _const()
如果上面对应的模块名为const,使用的时候只要 import const,便可以直接定义常量了。
import const
const.PI=3.14
print(const.PI)
我们运行test.py,就可打印出常量的值,如果再次修改const.PI=4.13,则会抛出const.constError异常。
python常量:内存中用于保存固定值的单元、在程序中、常量的值不能发生改变的。
python常量命名规范:通常是以大写字母开头进行区分-Chy常量 chy变量。
python常量的赋值:数字 字符串 布尔值 空值。
python常量举例:Aa=123、Ab='chy'、Ac=True和False、Ad=' '。

2 变量

python变量:占用内存中一块空间、用来存放变量的值(或地址)、存放的值是可以发生改变的。
python变量命名规范:变量名是由大小写字符、数字和下划线()组合而成的;第一个字符必须是字母或下划线开始()不可用数字开头,不要用中文开头;Python中的变量是区分大小写的;在赋值时单引号、双引号的效果是一样的。
注意:Python中已经被使用的一些关键词不能用于声明变量,如下图所示。
![](https://pic3.zhimg.com/50/v2-4ec17476305c6eb815b45ffcd9a4c64e_b.jpg)

2.3 输入与输出

1 输入

Python的输入函数主要是:input()
 str1 = input('input:')
print(str1)
结果如下:
![](https://pic4.zhimg.com/50/v2-f25bb77f8b62c63db533dfec3063f63e_b.jpg)
再来看一个例子:
number = input('input:')
print(number)
结果如下:
![](https://pic2.zhimg.com/50/v2-99057c22b7374886bd6b9a1ac4a209e4_b.jpg)

2 输出

Python的输入函数主要是:print()
print(3)
结果如下:
![](https://pic3.zhimg.com/50/v2-5a03d0c22b2b57ad14f973ace6ab791a_b.jpg)
再来看一个例子:
print('Hello World!')
结果如下:
![](https://pic3.zhimg.com/50/v2-970ee49d20d61233a4617081cd9564bc_b.jpg)
同时,Python 还支持格式化输出数据,这是调用format()函数来实现。
# 输出6位数值的浮点数,小数点后精确到2位
print(format(12.3456, '6.2f'))
结果如下:
![](https://pic4.zhimg.com/50/v2-78015c8f367eb5ecc7f14df9f8c677a2_b.jpg)

2.4 赋值与表达式

1 赋值

Python中赋值语句是使用等号(=)直接给变量赋值,如a=10,如果需要同时给多个变量进行赋值,则表达式如下。
a, b, c = 10, 20, (10+20)/2
print(a, b, c)
# 先运算右侧3个表达式,然后同时将表达式结果赋给左侧变量
结果如下 :
![](https://pic4.zhimg.com/50/v2-b9ef21950f5b3c59dac79fe2aa78ffb9_b.jpg)

2 表达式

表达式是程序中产生或计算新数据值的一行代码,通常由变量、常量或操作符号产生,赋值表达式如 a = 10。

3 数据类型

3.1 数字类型

Python中常见的数字类型包括整数类型、浮点数类型、复数类型。
  • 整数类型:对应数学中的整数,其返回值类型为int型,如10, 25等。
  • 浮点数类型:带有小数点的数字,其返回类型为float型,如3.14, 2.1e2等。
  • 复数类型:Python复数分为两部分,例如a+bj,其中a是实部,b是虚部,其返回类型为complex。其中,复数可通过.real获得实部数据,通过.imag获得虚部数据。

    z = -12.3 + 8j print('复数:', z, '类型:', type(z)) print('实部:', z.real) print('虚部:', z.imag)

结果如下:
![](https://pic2.zhimg.com/50/v2-9565d64f4b04fed3ef361653accfa2d1_b.jpg)
注:Python中的数字类型是可以相互转换的。
  • 浮点数转整数:int()
  • 整数转小数:float()
  • 浮点数转复数:complex()

3.2 字符串类型

在Python中,字符串类型是指需要用单引号或双引号括起来的一个字符或字符串。
字符串表示一个字符的序列,其最左端表示字符串的起始位置,下标为0,然后依次递增。
# 字符串格式化输出需要引入百分号(%)实现
print('My name is %s' % ('ZZR'))
结果如下:
![](https://pic4.zhimg.com/50/v2-2997bba4d3f3e84efade9526c894d6ba_b.jpg)
再来看字符串类型的一些其他用法。
str1 = 'abcdefg'
str2 = 'Hello World!'
str3 = '1+2+3'
str4 = '    I love Python   '
str5 = ['Thank', 'you']
# 字符串求长度
print(len(str1))
# 字符串切片
print(str1[3:6])
# 字符串反向切片
print(str1[-1:-4:-1])
# 字符串查找子字符串,若未找到返回-1
print(str1.find('def'))
print(str1.find('opq'))
# 字符串分割成序列,亦可设置分隔符
print(str2.split())
print(str3.split('+'))
# strip()函数用于去除开头结尾空格,lstrip()函数去除左侧空格,rstrip()函数去除右侧空格
print(str4.strip())
print(str4.lstrip())
print(str4.rstrip())
# join()函数用于拼接字符串
sep = " "  # 采用空格拼接
print(sep.join(str5))
结果如下:
![](https://pic2.zhimg.com/50/v2-502b649e1bc5b1983c5c7b61e9737810_b.jpg)

3.3 列表类型

在Python中,列表是一个非常重要的数据类型,它是中括号[ ]中用逗号分隔的元素集合。
list = [1, 2, 'a', 'Python']
print(list)
print(list[3])
print(type(list))
结果如下:
![](https://pic1.zhimg.com/50/v2-ff041886c1dca5f94ec98873478c9777_b.jpg)
列表中也可以用加号(+)拼接,用乘号(*)重复显示,也可以进行切片等操作。
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7]
print(list1 + list2)
print(list2 * 3)
print(list1[1:3])
结果如下:
![](https://pic3.zhimg.com/50/v2-93b4d39b668d9de5a4c7387b9c1d990f_b.jpg)
下表列举了一些列表中的常用方法,假设有列表list1 = [4, 2, 1, 5, 3]。
![](https://pic3.zhimg.com/50/v2-9746d15807d35d9800530bf3c0a34497_b.jpg)

3.4 元组类型

元组是与列表类似的一种数据类型,它采用括号定义一个或多个元素的集合,其返回类型为tuple。
tuple1 = (1, 2, 'Python')
print(tuple1)
print(type(tuple1))
print(tuple1[2])
结果如下:
![](https://pic3.zhimg.com/50/v2-19885e8a4fb8ece5ffd57c6b1c6434f2_b.jpg)
注:当元组定义后就不能进行更改,也不能删除,这不同于列表,由于其有不变性,因为它的代码更加安全。

3.5 字典类型

在Python中,字典是针对非序列集合提供的,由键值对 组成,其类型是dict。
键是字典的索引,一个键对应一个值,通过键值可查找字典中的信息,这个过程叫做映射。
dict = {"1":"Python", "2":"Java", "3":"C++"}
print(dict)
print(dict["2"])
结果如下:
![](https://pic3.zhimg.com/50/v2-52fa866d8c32ede23da84b17fc73520d_b.jpg)
字典与列表主要存在以下几点不同:
  • 列表中的元素是顺序排列的,字典中的数据时无序排列的。
  • 映射方式不同,列表通过地址映射到值,字典通过键值对映射到值。
  • 列表只能通过数字下表或索引进行访问,字典可以用各种对象类型作为键进行访问。

4 条件语句

4.1 单分支

if <condition>:
    <statement>
    <statement>
判断为真就执行语句,如果为假就跳过语句,执行下一条语句。
i =1
if i == 1:
    print(True)
结果如下:
![](https://pic4.zhimg.com/50/v2-e3c27dba51742731db536d85ced9884d_b.jpg)
4.2 二分支
if <condition>:
    <statement>
    <statement>
else:
    <statement>
    <statement>
如果条件语句为真,执行if语句块,如果为假,执行else语句块。
i = 2
if i == 1:
    print(True)
else:
    print(False)
结果如下:
![](https://pic1.zhimg.com/50/v2-56f9d4a070ab919773687d64565a4744_b.jpg)

4.3 多分支

if多分支由 if-elif-else 组成,其中 elif 相当于 else if。
if <condition1>:
    <case1 statements>
elif <condition2>:
    <case2 statements>
elif<condition3>:
    <case3 statements>
……
else:
    <defult statements>
演示如下:
course = 88
if course >= 90:
    print('A')
elif course >= 80:
    print('B')
elif course >= 70:
    print('C')
elif course >= 60:
    print('D')
else:
    print('No Pass!')
结果如下:
![](https://pic2.zhimg.com/50/v2-4becb1a8ce4b38ccc91ca40d274bf490_b.jpg)

5 循环语句

5.1 While循环
while <condition>:
    <statement>
else:
    <statement>
如果条件表达式为真,则重复执行循环体,直到条件判断为假,循环体终止;如果第一次判断条件就为假,则直接跳出训话执行else中的语句(注意else语句可以省略)。
① 第一个案例
i = 1
s = 0
while i <= 100:
    s = s + i
    i = i + 1
else:
    print('over')
print('sum=', s)
结果如下:
![](https://pic2.zhimg.com/50/v2-7ffbbf228d570798f65ef7ca9966f49e_b.jpg)
② 第二个案例
# 本例中代码是调用webbrowser库中的open_new_tab函数打开百度网页5次
# 本段代码可用于循环增加刷阅读量等
import webbrowser as web
import time
import os
i = 0
while i<5:
    web.open_new_tab('http://www.baidu.com')
    i = i + 1
    time.sleep(0.8)
else:
    # /F 表示强行终止程序;/IM 表示图像
    os.system('taskkill /F /IM iexplore.exe')
print('close IE')
结果如下:
![](https://pic3.zhimg.com/50/v2-8a01adf0ad4d1e8452285440c4edf5d4_b.jpg)

5.2 for循环

for <var> in <sequence>:
    <statement>
    <statement>
自定义循环变量var遍历sequence序列中的每一个值,每个值都执行一次循环的语句块。sequence表示序列,常见类型有list(列表)、tuple(元组)、strings(字符串)、files(文件)。
# 输出星号三角形
for i in range(10):
    print('*' * i)
结果如下:
![](https://pic4.zhimg.com/50/v2-63b84cd12483e4d00b3ee5d28ff84bbd_b.jpg)

5.3 break和continue语句

break和continue语句是两个常用的跳出循环的语句。

1 break语句

break语句跳出整个循环。
# 当求和变量s大于100时,进入if判断语句,执行break语句跳出循环,最后输出和
s = 0
num = 0
while num < 20:
    num += 1
    s  += num
    if s> 100:
        break
print('The sum is', s)
结果如下:
![](https://pic1.zhimg.com/50/v2-d548d8c65b3022bb662e938f22b85fd0_b.jpg)

2 continue语句

continue跳出本次循环,下一次继续判断执行。
# 当为偶数时continue跳出当前循环,所以for循环中只输出偶数
for num in range(10):
    if num % 2 == 0:
        print('even number', num)
        continue
    print('odd number', num)
结果如下:
![](https://pic1.zhimg.com/50/v2-ac5ddb3d72507a855bed5af2d086f0e2_b.jpg)

6 函数

当我们要完成特定功能的语句块时,就需要调用函数来完成相应的功能。

6.1 自定义函数

为了简化编程,提高代码的复用性,可以自定义函数。
def funtion_name([para1, para2,……, paraN]):
    statement1
        statement2
    …
    [return value1, value2, ……, valueN]
函数调用时,新参被赋予真实的参数,然后执行函数体,并在函数结束调用时返回结果。return语句表示退出函数并返回到函数被调用的地方,返回值传递给调用程序。
def fun(a, b):
    print(a, b)
    c = a + b
    print('sum:', c)
fun(3, 4)
结果如下:
![](https://pic3.zhimg.com/50/v2-080a01af1cbc4f571569dabd6c241012_b.jpg)
再来看下一个例子:
def fun(a, b, c=10):
    print(a, b)
    sum = a + b + c
    print('sum:', sum)
fun(3, 4)
fun(3, 4, 5)
结果如下:
![](https://pic1.zhimg.com/50/v2-5c0bc8270c5b9675e90d0022af45aaa6_b.jpg)

6.2 常见内部库函数

Python系统内部提供了一些库函数供大家使用,常用的有:str字符串库函数、math数学库函数、os操作系统库函数、socket网络套接字库函数。
![](https://pic4.zhimg.com/50/v2-44aa06767fc29940a4c2f9874c7b56a9_b.jpg)

6.3第三方库函数

Python作为一门开源语言,他支持各种第三方提供的开源库供用户使用。
常用格式:module_name.method(parametes)表示第三方库函数名.方法(参数)使用第三方库之前需要安装,如果没有安装就会报错。

7 文件操作

文件是指存储在外部介质上数据的集合,文本文件的编码方式包括ASCII码格式、Unicode码、UTF-8码和GBK码等。
文件操作流程为打开文件——>读/写文件——>关闭文件。

7.1 打开文件

打开文件是通过调用 open() 函数实现的,函数原型如下:
<variable> = open(<name>, <mode>)
其中,表示打开文件名称;表示文件打开模式,参数有r(只读)、w(只写)、a(最佳末尾)、rb(只读二进制文件)、wb(只写二进制文件)、ab(附加到二进制文件末尾)、w+(追加写文件),返回结果为一个文件对象。
infile = open('test.txt', 'r')

7.2 读/写文件

读文件常用方法:
  • read()的返回值为包含整个文件内容的一个字符串。
  • readline()的返回值为文件内容的下一行内容的字符串。
  • reallines()的返回值是整个文件内容的列表,列表中的每一项都为一行字符串。
写文件常用方法:
  • write()用于把含有文本数据或二进制数据集的字符串写入文件中。
  • writelines()针对列表操作,接收一个字符串列表参数,并写入文件。

7.3 关闭文件

文件读/写结束后,一定要记住使用close()方法关闭文件。为了安全起见,常用try-except-finally异常捕获语句,并在finally子句中关闭文件。
try:
    # 文件操作
except:
    # 异常处理
finally:
    file.close()

7.4 循环遍历文件

在数据爬取或数据分析中,常常会用到文件遍历(常常采用for循环遍历文件内容)。
#!/usr/bin/env python
fd = open('F:/test1.txt', 'r', encoding='UTF-8')
for line in fd:
    print(line)
fd.close()
结果如下:
![](https://pic4.zhimg.com/50/v2-97a584de1984f6df221f7587d97bdffa_b.jpg)

8 面向对象

不同于面向过程编程,面向对象编程需要使用“类”和“对象”来实现,将函数进行封装,是更接近真实生活的一种编程方式。
面向对象的3个基本特征:
  • 封装:把客观事物封装成抽象的类,类中的数据和方法让类或对象进行操作;
  • 继承:子类继承父类后,可以使用父类的所有功能,而无需重新编写原有的类,并且可以对功能进行扩展;
  • 多态:类中定义的属性或行为被特殊类继承后,可以具有不同的数据类型或表现不同的行为。各个类能表现不同的语义,其实现的方法有两种,分别为覆盖和重载。
在Python中类就是一个模板,模板里可以包含多个函数,函数可实现一些功能,对象则是根据模板创建的实例,通过实例对象可以执行类中的函数。
class Rect:
    def __init__(self, length, width):
        self.length = length
        self.width = width

    def detail(self):
        print(self.length, self.width)

    def showArea(self):
        area = self.length * self.width
        return area

    def showCir(self):
        cir = (self.length + self.width) * 2
        return cir

rect = Rect(4, 5)
rect.detail()
area = rect.showArea()
cir = rect.showCir()
print('面积:', area)
print('周长:', cir)
结果如下:
![](https://pic1.zhimg.com/50/v2-c533891b60324d3dda3d6f9ecb03cee9_b.jpg)
**未完,待续......**