前言
本文是笔者作为一个java程序员,对《python基础教程》的笔记。
python是类似linux shell的解释型语言,只不过使用shell操作多是为了操作计算机,使用python则是为了实现业务逻辑。感觉上的不同在于,如果要创建一个文件夹
- linux,
mkdir dirname
- python,
import os
,os.mkdir(path,mode)
java是面向对象的,所以对象是第一元素,对任何实例方法的应用都必须通过对象。python不是面向对象的,对于非复杂业务,python代码基本就是函数 + 函数调用
。
基本类型和复合类型
对于任何一门编程语言来说,数据都分为基本类型和复合类型。语言自带的复合类型一般是为数据的存取方便,主要有两种形式:根据索引存取(数组和list)和根据键值存取
。
- 对于java,基本类型是int,float等,复合类型是list、set等
-
对于python,类型不用声明,基本类型和一般语言差不多。对于复合类型,有以下不同点
- 有可修改和不可修改两种。类似于java的数组和list
- 一般不要求元素是同一类型
类型转换
- 对于java,
String a = 1 + ""
,float a = (float)1
- 对于python,
a = str(1)
,注意此处str是一个类型,不是一个函数。
解释型语言一般写起来比较简便,(),[],{}
就可以创建元组、列表和字典。
异常
异常推出的一个巨大意义就是
- 将正常流程的代码和处理异常的代码分开,对于java代码就是,
try{}catch(){}
,正常流程代码全在try中,异常处理代码全在catch中。 -
为方法添加了新的返回方式。比如一个登陆的操作,有多种情况(注册的情况更多)。
- 用户名和密码正确
- 用户名不存在
- 用户名或密码不正确
- 验证码不正确
使用java的话就是
try{
login
// 登陆之后的操作
}catch(用户名不存在异常){
// 处理
}catch(用户名或密码不正确异常){
// 处理
}catch(验证码不正确异常){
// 处理
}
// 当然,更聪明的做法是
try{
login
// 登陆之后的操作
}catch(登陆异常){
// 获取描述信息
// 处理
}
一般一个编程语言的异常知识分为两大块:
- 自己定义异常,抛出异常,python中是raise,java中是throw
- 捕捉并处理抛出的异常(有时候,发生异常时自己不管,让更上层调用方处理它)
模块
不可能所有java代码都写到一个xx.java
文件里,自然也不可能所有的python代码都写到xx.py
里,所以要分模块。
作为解释型语言,模块在被import时会被执行(仅仅定义一个方法,而没有调用一个方法是不算的)。但模块(xx.py)中总会包含一些执行代码(比如测试代码),在运行该模块时,执行代码,在该模块被导入到另外一个模块时,不执行这些代码。因此,python提供一个_name_
变量来标记,模块目前是被当做主模块执行(此时_name_ == _main_
),还是一个被导入的模块(此时_name_ == _模块本身的名字_
)。
so,我们可以将一个模块的执行代码放在if语句中,if _name_ == _main_:
a模块引用b模块,那么系统到哪里去找b模块呢?两个办法
- 将b模块放在合适的位置
- 告诉解释器去哪里找
为了组织好模块,可以将它们分组为包。
- java中类和文件一般是一一对应关系,类由package组织在一起(在一个package下,一个class文件也可以直接由另一个class文件引用),最终形成一个jar(要专门执行一个打jar的程序),供其他项目使用。
- python是解释型语言,有对象的概念,但对于初级开发者来说,对象不是主要的。一个模块是一个文件,包含几个函数,可以直接由另一个模块引用(
import 模块名
),也可以作为包的一部分被其它模块引用(import 包名
)。包就是模块所在的目录,为了让python将其作为包对待,它必须包含一个命名为_init_py的文件(模块)。包也是一个模块,其内容就是_init_py的文件的内容。
了解了模块,我们就可以知道一个大的python项目如何组织。类似于笔者关于java的学习轨迹:
- 一个大类分为多个小类
- 不同功能的类写在不同的包中
- 不同业务的类写在不同的项目中
- 不同服务的类部署在不同的机器中
给python文件xx.py起名时,尽量不要用一些公共的包名,比如json等。假设有一个json.py,那么同一个包下的另一个python文件import json
时就会找到自己写的json.py。(类似java classpath的搜索优先级问题)
安装第三方包
现在变成语言,大都会有一些对应的库,比如java可以使用第三方jar(通过配置maven依赖),go可以引入第三方包(go get xx
),python安装第三方包有以下方法:
- 使用pip工具(
pip install xx
) - 下载第三方包文件,执行其对应的安装脚本,
python setup.py install
(跟python安装pip的方式一样)
其本质都是将第三方包文件放在约定目录。