python3.x 学习路线
2018-11-27 14:43:18 17 举报
AI智能生成
python3.x学习路线
作者其他创作
大纲/内容
交互式应用程序开发
web
网站、管理系统
开发流程
需求分析
系统架构设计
总体设计
功能模块设计
数据库设计
数据库的选择
SQL
mysql
sqlite
sql server
oracle
NoSQL
键值对
MongoDB
Redis
图数据库
Neo4j
NewSQL
分布式文件系统
Hadoop
Spark
开发
测试
按是否使用web框架开发分类
web框架开发
Django
Models
Templetes
Views
Flask
Tornado
非web框架开发
套接字编程
按渲染方式分类
服务端渲染
模版页面html渲染,后台负责视图层
客户端渲染
前后端分离
restful服务接口
管理系统
数据可视化
生成图表、打印图表
数据导出excel、csv、word、txt等
数据检索
数据导入
生成报表
GUI可视化应用程序
游戏开发
pygame
GUI
PyQt
数据分析、挖掘
数据分析
数据可视化
词频统计、词云
数据挖掘十大算法
C4.5
k-means
Svm
Apriori
EM
PageRank
AdaBoost
kNN
Naive Baye
CART
机器学习
深度学习
tensorflow
keras
自然语言处理
语法、标准库、数据结构
语法
I/O
输入
键盘输入
input()
e.g
>>> name=input('请输入你的姓名:')
请输入你的姓名:jack
>>> print(name)
jack
请输入你的姓名:jack
>>> print(name)
jack
文件输入
open()
e.g
with open('/Users/vccccccc/desktop/file/teacher_photo/000000.jpg','wb') as photo:
输出
表达式语句
str()
>>> s = 'Hello, Runoob'
>>> str(s)
'Hello, Runoob'
>>> str(s)
'Hello, Runoob'
repr()
>>> repr(s)
"'Hello, Runoob'"
"'Hello, Runoob'"
print函数
print()
e.g
>>> print('hello world')
hello world
hello world
注释
单行
e.g
# 这是一个注释
多行
e.g
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号
这是多行注释,用三个双引号
"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号
这是多行注释,用三个双引号
"""
包的引入
from bs4 import BeautifulSoup
import requests
import pandas as pd
数据类型
数据类型分类
不可变类型
描述
对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,
并将原来的变量重新指向新创建的对象
(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收)。
并将原来的变量重新指向新创建的对象
(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收)。
标准数据类型
数字
数值运算
加
>>>5 + 4 # 加法
9
9
减
>>> 4.3 - 2 # 减法
2.3
2.3
乘
>>> 3 * 7 # 乘法
21
21
除
>>> 2 / 4 # 除法,得到一个浮点数
0.5
0.5
整除
>>> 2 // 4 # 除法,得到一个整数
0
0
求余
>>> 17 % 3 # 取余
2
2
乘方
>>> 2 ** 5 # 乘方
32
32
不支持自增i++
类型
int
e.g
student_number=24
float
e.g
student_score=59.5
bool
e.g
is_male=True
complex
描述
复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型
e.g
4+3j
字符串
string
e.g
>>> print('Ru\noob')
Ru
oob
Ru
oob
>>> print(r'Ru\noob')
Ru\noob
>>>
Ru\noob
>>>
字符串处理
strip()
描述
去除字符串收尾带参数的字符(串),默认参数为空格、回车和制表符。
e.g
>>> A='abc '
>>> A.strip()
'abc'
>>> A.strip()
'abc'
split()
描述
将字符串以参数为切割线切割,返回一个列表
e.g
>>> A='a,b,c'
>>> A.split(',')
['a', 'b', 'c']
>>> A.split(',')
['a', 'b', 'c']
replace()
描述
将字符串里的所有第一个参数替换成第二个参数
e.g
>>> a='1112'
>>> a.replace('1','2')
'2222'
>>> a.replace('1','2')
'2222'
切片
描述
从字符串截取规定范围内的字符串
e.g
>>> a='abcdefg'
>>> a[3:-1]
'def'
>>> a[3:-1]
'def'
元组
tuple
可变类型
描述
变量修改后,指向同一个内存地址
标准数据类型
列表
list
字典
dict
集合
set
运算符
分类
算数运算符
+
-
*
/
%
//
**
比较运算符
=
!=
>
<
>=
<=
赋值运算符
=
+=
-=
*=
/=
%=
//=
**=
逻辑运算符
and
or
not
位运算符
&
描述
按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
|
描述
按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。
^
描述
按位异或运算符:当两对应的二进位相异时,结果为1
~
描述
按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1
<<
描述
左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。
>>
描述
右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数
成员运算符
in
描述
如果在指定的序列中找到值返回 True,否则返回 False。
not in
描述
如果在指定的序列中没有找到值返回 True,否则返回 False。
身份运算符
is
描述
is 是判断两个标识符是不是引用自一个对象
is not
描述
is not 是判断两个标识符是不是引用自不同对象
优先级
**
~ + -
* / % //
+ -
>> <<
&
^ |
<= < > >=
<> == !=
= %= /= //= -= += *= **=
is is not
in not in
and or not
条件控制
if
循环结构
while
for in
异常处理
try: except: finally:
del语句
描述
删除对象引用
e.g
>>> a,b,c=1,2,3
>>> del a,b
>>> print(a,b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> print(c)
3
>>> del a,b
>>> print(a,b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> print(c)
3
面向对象
基本概念
class是定义类关键字
类名开头字母大写
如果类名后面圆括号,如class Jxnu(Jwc):,表示Jxnu类继承与Jwc
属性
私有属性
以双下划线开头命名,如__id
只允许类中的方法调用
公有属性
符合基本命名规范即可
允许对象调用
方法
初始化方法(构造方法)
def __init__(self):
开头结尾均为双下划线
python里,所有类的方法,第一个参数,必须是self
构造方法可以带参数,参数在创建对象时,在类的圆括号中传入,如jxnu=Jxnu('201626703079','hhh2333')
构造方法在创建对象时就被自动调用执行
构造方法中定义属性,必须以self.的形式,如self.id=student_id
类中的其他方法调用构造方法中的属性,也必须使用self.id的形式
公有方法
命名、调用和公用属性一致
私有方法
命名、调用和私有属性一致
面向对象的五大特点
抽象
封装
继承
多态
消息通讯
标准库
re
描述
正则表达式相关库
e.g
>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'
os
描述
os模块提供了不少与操作系统相关联的函数。
建议使用 "import os" 风格而非 "from os import *"。
这样可以保证随操作系统不同而有所变化的 os.open() 不会覆盖内置函数 open()。
这样可以保证随操作系统不同而有所变化的 os.open() 不会覆盖内置函数 open()。
在使用 os 这样的大型模块时内置的 dir() 和 help() 函数非常有用:
e.g
>>> import os
>>> os.getcwd() # 返回当前的工作目录
'C:\\Python34'
>>> os.chdir('/server/accesslogs') # 修改当前的工作目录
>>> os.system('mkdir today') # 执行系统命令 mkdir
0
>>> os.getcwd() # 返回当前的工作目录
'C:\\Python34'
>>> os.chdir('/server/accesslogs') # 修改当前的工作目录
>>> os.system('mkdir today') # 执行系统命令 mkdir
0
>>> import os
>>> dir(os)
<returns a list of all module functions>
>>> help(os)
<returns an extensive manual page created from the module's docstrings>
>>> dir(os)
<returns a list of all module functions>
>>> help(os)
<returns an extensive manual page created from the module's docstrings>
shutil
描述
针对日常的文件和目录管理任务,:mod:shutil 模块提供了一个易于使用的高级接口:
e.g
>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
>>> shutil.move('/build/executables', 'installdir')
>>> shutil.copyfile('data.db', 'archive.db')
>>> shutil.move('/build/executables', 'installdir')
glob
描述
glob模块提供了一个函数用于从目录通配符搜索中生成文件列表:
e.g
>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']
sys
描述
通用工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 sys 模块的 argv 变量。
例如在命令行中执行 "python demo.py one two three" 后可以得到以下输出结果:
例如在命令行中执行 "python demo.py one two three" 后可以得到以下输出结果:
sys 还有 stdin,stdout 和 stderr 属性,即使在 stdout 被重定向时,后者也可以用于显示警告和错误信息。
e.g
>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']
>>> sys.stderr.write('Warning, log file not found starting a new one\n')
Warning, log file not found starting a new one
Warning, log file not found starting a new one
random
描述
生成随机数
e.g
>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10) # sampling without replacement
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random() # random float
0.17970987693706186
>>> random.randrange(6) # random integer chosen from range(6)
4
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10) # sampling without replacement
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random() # random float
0.17970987693706186
>>> random.randrange(6) # random integer chosen from range(6)
4
math
描述
math模块为浮点运算提供了对底层C函数库的访问
e.g
>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0
urllib
描述
访问互联网相关库
e.g
>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
... line = line.decode('utf-8') # Decoding the binary data to text.
... if 'EST' in line or 'EDT' in line: # look for Eastern Time
... print(line)
<BR>Nov. 25, 09:43:32 PM EST
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
... line = line.decode('utf-8') # Decoding the binary data to text.
... if 'EST' in line or 'EDT' in line: # look for Eastern Time
... print(line)
<BR>Nov. 25, 09:43:32 PM EST
smtplib
描述
发送电子邮件
e.g
>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
... """To: jcaesar@example.org
... From: soothsayer@example.org
...
... Beware the Ides of March.
... """)
>>> server.quit()
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
... """To: jcaesar@example.org
... From: soothsayer@example.org
...
... Beware the Ides of March.
... """)
>>> server.quit()
datetime
描述
日期
e.g
>>> # dates are easily constructed and formatted
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'
>>> # dates support calendar arithmetic
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'
>>> # dates support calendar arithmetic
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368
zlib
描述
模块直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 tarfile。
e.g
>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979
timeit
描述
有些用户对了解解决同一问题的不同方法之间的性能差异很感兴趣。Python 提供了一个度量工具,为这些问题提供了直接答案。
例如,使用元组封装和拆封来交换元素看起来要比使用传统的方法要诱人的多,timeit 证明了现代的方法更快一些。
例如,使用元组封装和拆封来交换元素看起来要比使用传统的方法要诱人的多,timeit 证明了现代的方法更快一些。
相对于 timeit 的细粒度,:mod:profile 和 pstats 模块提供了针对更大代码块的时间度量工具。
e.g
>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791
doctest
描述
开发高质量软件的方法之一是为每一个函数开发测试代码,并且在开发过程中经常进行测试
doctest模块提供了一个工具,扫描模块并根据程序中内嵌的文档字符串执行测试。
测试构造如同简单的将它的输出结果剪切并粘贴到文档字符串中。
通过用户提供的例子,它强化了文档,允许 doctest 模块确认代码的结果是否与文档一致:
doctest模块提供了一个工具,扫描模块并根据程序中内嵌的文档字符串执行测试。
测试构造如同简单的将它的输出结果剪切并粘贴到文档字符串中。
通过用户提供的例子,它强化了文档,允许 doctest 模块确认代码的结果是否与文档一致:
unittest模块不像 doctest模块那么容易使用,不过它可以在一个独立的文件里提供一个更全面的测试集:
e.g
def average(values):
"""Computes the arithmetic mean of a list of numbers.
>>> print(average([20, 30, 70]))
40.0
"""
return sum(values) / len(values)
import doctest
doctest.testmod() # 自动验证嵌入测试
"""Computes the arithmetic mean of a list of numbers.
>>> print(average([20, 30, 70]))
40.0
"""
return sum(values) / len(values)
import doctest
doctest.testmod() # 自动验证嵌入测试
import unittest
class TestStatisticalFunctions(unittest.TestCase):
def test_average(self):
self.assertEqual(average([20, 30, 70]), 40.0)
self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
self.assertRaises(ZeroDivisionError, average, [])
self.assertRaises(TypeError, average, 20, 30, 70)
unittest.main() # Calling from the command line invokes all tests
class TestStatisticalFunctions(unittest.TestCase):
def test_average(self):
self.assertEqual(average([20, 30, 70]), 40.0)
self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
self.assertRaises(ZeroDivisionError, average, [])
self.assertRaises(TypeError, average, 20, 30, 70)
unittest.main() # Calling from the command line invokes all tests
数据结构
基本数据结构
列表
元组
集合
字典
高级数据结构
堆栈
队列
树
二叉树
多叉树
图
网络爬虫
按页面的渲染方式不同爬取
服务端渲染
描述
数据基本都包含在网页里
流程
抓包
请求url
解析网页
客户端渲染:前后端分离,数据在接口里
爬虫类型
分布式爬虫
爬虫框架Scrapy
非分布式爬虫
请求
requests
解析
网页
BeautifulSoup
爬取端口
web端
移动app端
反反爬处理
验证码识别
滑块拖动识别
0 条评论
下一页
为你推荐
查看更多