「Python爬虫系列讲解」2. Python基础知识大全初学

半世苍凉 提交于 2020-12-29 07:02:05

作者 :荣仔!最靓的仔!
专栏地址
http://suo.im/5Rh1z1

注意:本文涉及到的知识点太多,建议初学者耐心看完!

本文目录

1 Python简介

1.1 Python的特点

Python是Guido Van Rossum在1989年开发的一种脚本解释语言,是ABC语言的一种继承。由于作者是Monty Python喜剧团的一名爱好者,故将其命名为Python(蟒蛇)

Python作为当下一种热门语言,具有以下特点

  • 语法清晰,代码友好,易读。
  • 应用广泛,具有大量的第三方库(尤其是机器学习、人工智能相关库)支持。
  • Python可移植性强,易于操作各种存储数据的文本文件和数据库。
  • Python是一种面向对象语言,支持开源思想。

根据Tiobe编程语言最新排行榜(部分),其中Python排名第三,并且随着大数据、数据分析、深度学习、人工智能的迅速发展,Python收到的关注程度越来越高。

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

利用Python编程之前,首先需要安装Python软件:包括搭建Python环境、学会安装Python第三方库等。

搭建好Python环境之后是这个样子的(同时可以打印输出进行进一步的测试)。

当编写大段代码或自定义函数时,在command命令行中编写是不太现实的,因此可以进一步选择合适的编译器进行编译,我在这里用的是JetBrains PyCharm2018.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中已经被使用的一些关键词不能用于声明变量,如下图所示。

2.3 输入与输出

1 输入

Python的输入函数主要是:input()

str1 = input('input:')
print(str1)

结果如下:

再来看一个例子:

number = input('input:')
print(number)

结果如下:

2 输出

Python的输入函数主要是:print()

print(3)

结果如下:

再来看一个例子:

print('Hello World!')

结果如下:

同时,Python 还支持格式化输出数据,这是调用format()函数来实现。

# 输出6位数值的浮点数,小数点后精确到2位
print(format(12.3456'6.2f'))

结果如下:

2.4 赋值与表达式

1 赋值

Python中赋值语句是使用等号(=)直接给变量赋值,如a=10,如果需要同时给多个变量进行赋值,则表达式如下。

a, b, c = 1020, (10+20)/2
print(a, b, c)
# 先运算右侧3个表达式,然后同时将表达式结果赋给左侧变量

结果如下 :

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)

结果如下:

注:Python中的数字类型是可以相互转换的。

  • 浮点数转整数: int()
  • 整数转小数: float()
  • 浮点数转复数: complex()

3.2 字符串类型

在Python中,字符串类型是指需要用单引号或双引号括起来的一个字符或字符串。

字符串表示一个字符的序列,其最左端表示字符串的起始位置,下标为0,然后依次递增。

# 字符串格式化输出需要引入百分号(%)实现
print('My name is %s' % ('ZZR'))

结果如下:

再来看字符串类型的一些其他用法。

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))

结果如下:

3.3 列表类型

在Python中,列表是一个非常重要的数据类型,它是中括号[ ]中用逗号分隔的元素集合。

list = [12'a''Python']
print(list)
print(list[3])
print(type(list))

结果如下:

列表中也可以用加号(+)拼接,用乘号(*)重复显示,也可以进行切片等操作。

list1 = [1234]
list2 = [567]
print(list1 + list2)
print(list2 * 3)
print(list1[1:3])

结果如下:

下表列举了一些列表中的常用方法,假设有列表list1 = [4, 2, 1, 5, 3]。

3.4 元组类型

元组是与列表类似的一种数据类型,它采用括号定义一个或多个元素的集合,其返回类型为tuple。

tuple1 = (12'Python')
print(tuple1)
print(type(tuple1))
print(tuple1[2])

结果如下:

注:当元组定义后就不能进行更改,也不能删除,这不同于列表,由于其有不变性,因为它的代码更加安全。

3.5 字典类型

在Python中,字典是针对非序列集合提供的,由键值对<Key> <Value>组成,其类型是dict。

键是字典的索引,一个键对应一个值,通过键值可查找字典中的信息,这个过程叫做映射

dict = {"1":"Python""2":"Java""3":"C++"}
print(dict)
print(dict["2"])

结果如下:

字典与列表主要存在以下几点不同:

  • 列表中的元素是顺序排列的,字典中的数据时无序排列的。
  • 映射方式不同,列表通过地址映射到值,字典通过键值对映射到值。
  • 列表只能通过数字下表或索引进行访问,字典可以用各种对象类型作为键进行访问。

4 条件语句

4.1 单分支

if <condition>:
    <statement>
    <statement>

判断为真就执行 语句,如果为假就跳过 语句,执行下一条语句。

i =1
if i == 1:
    print(True)

结果如下:

4.2 二分支

if <condition>:
    <statement>
    <statement>
else:
    <statement>
    <statement>

如果条件语句 为真,执行if语句块,如果 为假,执行else语句块。

i = 2
if i == 1:
    print(True)
else:
    print(False)

结果如下:

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!')

结果如下:

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)

结果如下:

② 第二个案例

# 本例中代码是调用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')

结果如下:

5.2 for循环

for <var> in <sequence>:
    <statement>
    <statement>

自定义循环变量var遍历sequence序列中的每一个值,每个值都执行一次循环的语句块。sequence表示序列,常见类型有list(列表)、tuple(元组)、strings(字符串)、files(文件)。

# 输出星号三角形
for i in range(10):
    print('*' * i)

结果如下:

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)

结果如下:

2 continue语句

continue跳出本次循环,下一次继续判断执行。

# 当为偶数时continue跳出当前循环,所以for循环中只输出偶数
for num in range(10):
    if num % 2 == 0:
        print('even number', num)
        continue
    print('odd number', num)

结果如下:

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(34)

结果如下:

再来看下一个例子:

def fun(a, b, c=10):
    print(a, b)
    sum = a + b + c
    print('sum:', sum)
fun(34)
fun(345)

结果如下:

6.2 常见内部库函数

Python系统内部提供了一些库函数供大家使用,常用的有:str字符串库函数、math数学库函数、os操作系统库函数、socket网络套接字库函数。

6.3第三方库函数

Python作为一门开源语言,他支持各种第三方提供的开源库供用户使用。

常用格式:module_name.method(parametes)表示第三方库函数名.方法(参数)使用第三方库之前需要安装,如果没有安装就会报错。

7 文件操作

文件是指存储在外部介质上数据的集合,文本文件的编码方式包括ASCII码格式、Unicode码、UTF-8码和GBK码等。

文件操作流程为打开文件——>读/写文件——>关闭文件。

7.1 打开文件

打开文件是通过调用 open() 函数实现的,函数原型如下:

<variable> = open(<name>, <mode>)

其中,<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()

结果如下:

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(45)
rect.detail()
area = rect.showArea()
cir = rect.showCir()
print('面积:', area)
print('周长:', cir)

结果如下:

未完,待续......

如果你觉得本文写得好,可以扫描下方二维码,关注作者的CSDN博客,更多精彩文章抢先看。

     

关注微信公众号『数据分析与统计学之美』,添加作者微信号,拉你入群哦,气氛杠杠的!看到这里,麻烦您点个再看,让更多朋友看到哦!

喜欢本文点个在看

本文分享自微信公众号 - 数据分析与统计学之美(gh_21c25c7e71d0)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!