本系列文章以《Python核心编程》第二版、第三版为基础,记录python学习。
基础篇:
1. 搭建开发调试环境&基本代码编写
2. 基本语法定义&内建数据类型概览
3. 数值对象及其使用
4. 容器对象及其使用
5. 字符串的使用
6. 分支和循环结构
7. 函数与函数式编程
8. 异常处理机制
9. 面向对象编程
10. 模块
关于Python
什么是Python
相比于传统的C语言等编译型语言,python为解释型语言,更加简洁、可读性更高。
- 编译型语言C、C++、Objective-C(http://c.biancheng.net/view/4136.html):一次性翻译为可被平台硬件执行的机器语言),编译生成的程序可以脱离开发环境,在特定的平台上独立运行,所以通常运行效率较高。如果需要移植,则需要针对特定平台进行修改。
- 解释型语言:使用专门的解释器,将源程序逐行解释成特定平台的机器码并立即执行。相比于编译型语言,跨平台更容易,可以方便地实现源程序级的移植,但这是以牺牲程序执行效率为代价。
与Unix操作系统下的shell script相比,shell脚本可以用来处理简单的任务,但功能不足。并且shell脚本的代码重复度很低,因此无法进行大规模的开发。而python提倡简洁的代码设计、高级的数据结构和模块化的组件。
python的标准实现是由C语言完成的,由于C的可移植性,所以python可以运行在任何带有ANSI C编译器的平台上。
python的健壮性针对错误异常,python程序由于错误崩溃时,解释程序就会转出一个“堆栈跟踪”,里面会包括程序崩溃的原因以及该段代码。
Python的安装:
- windows平台直接前往python官网(https://www.python.org/)下载,在安装过程中勾选添加环境变量选项,将会自动设置好环境变量。
- mac、linux平台通常自带python2.7,可以通过终端python指令查看版本,之后更新或安装在此不多讨论。
第一个Helloworld
python的运行通常有三种方式:
- 交互式启动解释器:即python shell,每次输入一行python代码后执行。
- 运行python脚本。
- 通过pycharm(推荐),vscode等开发工具运行,在此推荐pycharm,免费版教程百度都有。
pycharm创建新project后,创建.py文件,输入代码并在上方run菜单中run运行代码
print("hello world")
Python快速入门
程序输入输出
- 程序输出:print
- 与C语言中的printf相似,python中的print同样可以使用字符串格式运算符(%),可实现字符串替换的功能
- 程序输入:raw_input
- user = raw_input('enter login name: ')
- 需要注意的是在python3中raw_input函数已经被替换为input
在对于函数有疑问时,可以在shell中使用help()函数得到相应的函数信息。
运算符
与其他大多数编程语言相似,只是新增了乘方运算符**。
对于逻辑运算符,python直接支持and、or、not。
数字类型
int
long
bool
float
complex
对于目前python,整形与长整型逐步统一为一种数据类型,从python2.3开始就不再有整形溢出的错误
字符串
python中字符串被定义为引号之间的字符集合,python支持使用单引号与双引号、三引号(三个连续的单引号或双引号)。使用索引运算符[]和切片运算符[:]可以得到子串,字符串中第一个字符索引是0,最后一个是1。
+可以用于字符串连接,*可以用于字符串重复
pystr = 'python'
print(pystr[2:5]) #tho
列表和元组
这两者都可以被当做普通的数组,能保存任意数量任意类型的python对象,两者之间重要的区别包括:
- 列表元素使用中括号([ ])包裹,元素的个数以及元素的值可以改变。
- 元组使用括号(())包裹,不可更改。元组可以看做是只读的列表,可以通过切片运算得到子集,与字符串类似。
字典
字典是Python中的映射数据类型,工作原理类似哈希表,有key-value组成,字典元素有大括号包括{‘NAME’: Tao}
条件语句与循环
if expression:
expression
if exp1:
...
else:
...
if exp1:
...
elif exp2:
...
while exp:
...
for i in l:
...
for i in range():
...
#列表解析:可以用一行将for循环的所有值放入一个列表中
squared = [x**2 for x in range(0,4)]
文件和内建函数open()、file()
- 打开文件open():第一个参数表示锁要打开的文件名称,第二位设置打开模式r、w、a。如果open成功,一个文件对象的句柄将会被返回,所有后续的文件操作都必须通过这个句柄。
handle = open(file_name, access_mode='r')
for line in handle:
print(line)
handle.close()
错误与异常
python在编译时会检查语法错误,但有些错误需要在运行过程中检测。当检测到一个错误时,python解释器会引发一个异常,并显示出异常的详细信息。异常处理操作被封装在try-except语句中,try中的代码是需要检测的代码,except中的代码则是处理错误的代码。
函数与类
python中函数调用与其他语言相同,函数在调用之前需要先定义,如果函数中没有return语句,则会返回None对象。
函数的参数可以有默认值,如果提供有默认值,在函数定义中,参数以赋值语句的形式提供。
def func(debug=True):
class ClassName(base_class):
类是面向对象编程的核心,他扮演相关数据及逻辑的容器角色。
如果没有合适的基类,可以用object作为基类。
class foo(object):
version=0.1
def __init__(self,nm='john snow'):
self.name=nm
print('create a class instance for '+nm)
def showname(self):
print('your name is '+ self.name)
print('my name is'+ self.__class__.__name__)
def showver(self):
print(self.version)
def addMe2Me(self,x):
return x+x
# 创建类实例对象
fool=foo()
fool.showname()
在上面的类中,首先定义了静态变量version,它将被类的所有实例以及四个函数方法共享。
init()函数是一个特殊函数,当一个类实例被创建时,该函数会自动执行,在类实例创建完毕后执行,但与C++中的构造函数不同的是,init不会创建实例,它是实例对象创建后执行的第一个函数。
上述的函数参数中都有一个默认参数self,它是类实例自身的引用,类似于C++中的this指针。
模块
模块是一种组织形式,它将彼此有关系的python代码组织到一个个独立文件当中。
模块可以包含可执行代码,函数,类。一个模块创建后,就可以在另一个模块中使用import引入。
import module_name
module.function()
module.variable
PEP:Python增强提案(Python Enhancement Proposal),在新版python中增加新特性的方式,后续章节详细讨论。
一些常用基础函数
int(obj) # 转int
len(obj)
range(start,stop)
str(obj) #转string
type(obj) #返回对象obj的类型(返回值本身是一个type对象)
下一章节将讨论python中的基本语法定义以及内建数据类型,链接:第二章