-
正经的知识
def get_table_update_count(table_name): update_count = 100 return update_count if __name__ == "__main__": # 这一行的作用是这个文件被其他文件引用时,该结构内的代码不被引用执行 get_table_update_count("dapp_name")
- 环境安装的选择
- 官方版本
- Anaconda数据科学版本 (避免99%的报错问题)
- IDE编辑器的选择
- sublime text3 (适合单文件脚本)
- vscode
- PyCharm (最舒服的debug模式)
- 虚拟环境与项目环境
- venv
- 每个项目目录里面包含着所需的python环境,迁移方便,毕竟自带环境,缺点项目大
# 创建环境 python -m venv <env_path> # 进入环境: <env_path>\Scripts\activate.bat # windows source <env_path>/bin/activate # linux # 退出环境 deactivate # 部署执行 <项目绝对路径>/<env_path>/bin/python main.py
- 系统环境
- 所有项目共用安装在系统环境的python环境,最终导致环境冲突
- conda
- 最简单的虚拟环境管理器,虚拟环境路径不在项目目录里面
# 创建环境 conda create -n <env_name> python=3.6.5 # 进入环境 conda activate <env_name> # windows source activate <env_name> # linux # 退出环境 conda deactivate # windows deactivate # linux # 部署执行 <anaconda安装路径>/envs/<env_name>/bin/python main.py
-
# 安装工具 pip install virtualenv
- venv
-
项目工程化 (分层架构)
dapp_spider/ # 装着项目的文件夹 ├── dapp_spider # 真正的项目目录 │ ├── __init__.py # package初始化文件 │ ├── config # 配置层 │ │ ├── __init__.py # package初始化文件,每个package文件夹都要有 │ │ ├── fat.py │ │ └── lpt.py │ ├── spider # 爬虫层 │ │ ├── __init__.py │ │ ├── base_spider.py │ │ └── dapp_spider.py │ └── tools # 工具层 │ ├── __init__.py │ └── html_escape.py ├── requirements.txt # 项目依赖的第三方库都应该维护在这个文本 └── setup.py # 项目打包配置文件
- 模块引用与package引用
- python包导入原理
- 按照sys.path列表中的目录顺序来查找导入文件
-
当前路径引用
# . 表示当前.py文件所在目录文件夹下 # 当前视角为dapp_spider/dapp_spider/spider/dapp_spider.py from .base_spider import baseSpider
-
跨目录引用
import sys # 手动把目录加到sys.path sys.path.append("../") # 当前视角为dapp_spider/dapp_spider/spider/dapp_spider.py from spider.base_spider import baseSpider
-
加环境变量引用
# 手动把目录加到系统环境变量PYTHONPATH里面 # 当前视角为dapp_spider/dapp_spider/spider/dapp_spider.py from spider.base_spider import baseSpider
-
IDE内引用
# IDE会把项目跟目录加入sys.path,也就是dapp_spider下面的内容在sys.path # 当前视角为dapp_spider/dapp_spider/spider/dapp_spider.py from dapp_spider.base_spider import baseSpider
-
打包引用
# 使用setup.py打包配置文件,将dapp_spider项目打包,注册到python库目录site-packages # 可以无视所有限制,叫它一声必有回应 # 当前视角为dapp_spider/dapp_spider/spider/dapp_spider.py from dapp_spider.base_spider import baseSpider
- python包导入原理
- 依赖库的安装和维护
- 官方库查询以及库文档地址: pypi.org
- pip install -r requirements.txt手动安装项目依赖
- IDE可以发现项目内requirements.txt文件,一键安装项目依赖
- 编程范式的选择
- 命令行编程
- 函数式编程
- 面向对象编程
- 编码风格的约定
- 变量、函数以下划线风格命名
- 常量以大写命名
- 类以驼峰风格命名
- 缩进以4个空格为单位,IDE会自动以4个空格为Tab键单位
- 变量命名尽量体现含义,不要用a、b、i这种无意义变量名
- 变量命名使用英文,拒绝使用拼音和方言
- 函数,关键代码,算法实现加入必要的注释
- 不要频繁转换变量类型,会增加代码理解难度
- 注释与单元测试
- 注释
def get_table_update_count(table_name): """ 返回指定表的近1小时更新数量 Args: table_name (str): 指定表. Returns: update_count (int): 近1小时更新数量. """ update_count = 100 return update_count
-
单元测试
import doctest def get_table_update_count(table_name): """ >>> get_table_update_count("dapp_rank") 100 """ update_count = 100 return update_count if __name__ == "__main__": doctest.testmod(verbose=1)
- 项目打包部署
-
setup.py
# -*- coding: utf-8 -*- from setuptools import setup, find_packages setup( name="dapp_spider", version="0.0.1", description="dapp_spider", long_description="dapp_spider", author="python", url="", license="", packages=find_packages() )
-
部署
# install部署, 把项目打包进site-packages里面,每次更新代码需要重新执行命令 python setup.py install # develop部署, 把项目映射进site-packages里面,可以随时修改代码,只执行一次命令 python setup.py develop
-
- Python之禅
Python 之禅,蒂姆·彼得斯 (Tim Peters)
美丽总比丑陋好。
显式优于隐式。
简单胜于复杂。
复杂胜于复杂。
平面优于嵌套。
稀疏比密集好。
可读性很重要。
特殊情况不足以打破规则。
虽然实用胜过纯洁。
错误永远不应该悄无声息地过去。
除非明确沉默。
面对模棱两可,拒绝猜测的诱惑。
应该有一种——最好只有一种——明显的方法来做到这一点。
虽然这种方式一开始可能并不明显,除非你是荷兰人。
现在总比没有好。
虽然从来没有现在通常比 *right* 更好。
如果实现很难解释,那是个坏主意。
如果实现很容易解释,那可能是个好主意。
命名空间是一个很棒的想法——让我们做更多的事情!