python 1
2021年8月14日16:45:48 星期六
core python programming
Python 核心编程
Wesley J.chun
宋吉广
什么是 Python?
编程语言。
软件开发行业由来? 编程语言的产生。
起源
Guido van Rossum 在 1989 年底创造了 Python。 1991 年初发布第 1 版,它来自于 1 个项目。
van Rossum 对解释型语言 ABC 有着丰富经验。
特点
-
高级:列表(大小可变的数组)和字典(哈希表)是它的数据结构,用它可以缩短开发时间和代码量,产生可读性更好的代码。
-
面向对象: 数据和逻辑相结合(不分离)
-
可升级: 重用您脑海中的代码,简洁的代码设计、高级的数据结构和模块化组件,确保灵活性、一致性,缩短必要的调试时间。
-
可扩展
-
可移植
-
易学 关键词少、结构简单、语法清晰。
-
易读 没有分神的符号,定义清晰,易于阅读。
-
易维护
-
健壮 堆栈跟踪,异常。
-
高效的快速原型开发工具
-
内存管理器
-
解释性和(字节)编译性
文档结构
"this is a test modules"
import sys # Module imports
import os
debug = True # (Global) Variable declarations
Class FooClass (object):
'Foo class'
pass
def test():
'test function'
foo = FooClass()
if debug"
print 'ran test()'
if __name__ == '__main__':
test()
推荐代码风格:主程序调用 main() 函数。
__name__ 系统变量用来指示 module 应如何被加载。
如果 module 是被导入, __name__ 的值为模块名字,
如果 module 是被直接执行, __name__ 的值为 __main__,
在主程序中写测试代码
优秀的程序员和软件工程师,总是会为我们提供一组测试代码或者简单教程。
内存管理
变量不用事先声明,变量不用指定类型,不用关心内存管理,变量名会被“回收”,del 语句能够直接释放资源。
变量定义,变量要在创建和赋值后才能被使用。
动态类型,
内存分配,引用计数,内部跟踪变量。
第 1 个 python 程序
'makeTextFile.py -- create text file'
import os
ls = os.linesep
# get filename
while True:
fname = raw_input('Enter filename:')
if os.path.exists(fname):
print "ERROR: '%s' already exists" % fname
else:
break
# get file content (text) lines
all = []
print "\nEnter lines ('.' by itself to quit).\n"
# loop until user terminates input
while True:
entry = raw_input('>')
if entry == '.':
break
else:
all.append(entry)
# write lines to file with proper line-ending
fobj = open(fname, 'w')
fobj.writelines(['%s%s' % (x, ls) for x in all])
fobj.close()
print 'DONE!'
技巧:使用局部变量替换模块变量 ls = os.linesep
cat readTextFile.py
'readTextFile.py -- read and display text file'
# get filename
fname = raw_input('Enter filename: ')
print
# attempt to open file for reading
try:
fobj = open(fname, 'r')
except IOError, e:
print "*** file open error:", e
else:
# display contents to the screen
for eachLine in fobj:
print eachLine,
fobj.close()
try-except-else 语句
使用 os.path.exists() 和异常处理:一般程序员倾向使用前者,因为有一个现成的函数可以检查错误条件 -- 并且很简单,这是个布尔函数,它会告诉你“是”还是“不是”。(注意,这个函数内可能已经有异常处理代码)。那你为什么还要重新发明一个轮子来干同样一件事?异常处理最适合的场合,是在没合适的函数处理异常状况的时候。
这时程序员必须识别这些正常的错误,并做出相应的处理。
对这个例子来说,能通过检查文件是否存在来避免异常发生,不过因为有可能因为其它原因造成文件打开失败,比如缺少权限,网络驱动器突然连接失败等等。从更安全的角度来说,就不应该用类似 os.path.exists() 之类的函数而是使用异常处理,尤其是在没有合适函数的情况下更应该如此。
# cat readTextFile2.py
'readTextFile2.py -- read and display text file'
import os
fname = raw_input('Enter filename: ')
print
if os.path.exists(fname):
fobj = open(fname, 'r')
for eachLine in fobj:
print eachLine,
fobj.close()
else:
print "*** file open error: '%s' " % fname
相关模块
Python 快速参考和 Python 常见问答都是开发者很重要的“工具”。另外,还有一些模块会帮助你成为一个优秀的 Python 程序员。
- Debugger: pdb
- Loggoer: logging
- Profilers: profile, hotshot, cProfile
调试模块 pdb 允许设置(条件)断点,代码逐行执行, 检查堆栈。它还支持事后调试。
logging 模块是在 Python2.3 中新增的,它定义了一些函数和类帮助你的程序实现灵活的日志系统。共有五级日志级别:紧急,错误,警告,信息和调试。
性能测试模块profile,测试函数的执行的时间,和每次脚本执行的总时间,hotshot 重点解决性能测试过载的问题,但却需要更多的时间来生成结果。
python 对象
什么是 Python 对象?
Python 对像有三个特性: 身份,类型和值。
标准类型
- 数字
- 整型
- 布尔
- 长整
- 浮点
- 复数
- 字符串
- 列表 []
- 元组 ()
- 字典 {}
其它内建类型
- 类型
- Null 对象(None)
- 文件
- 集合/固定集合
- 函数/方法
- 模块
- 类
内部类型
- 代码
- 帧
- 跟踪记录
- 切片
- 省略
- Xrange
表1 以访问模型为标准的类型分类
访问模型 | |
---|---|
分类 | Python 类型 |
直接访问 | 数字 |
顺序访问 | 字符串、列表、元组 |
映射访问 | 字典 |
表2 标准类型分类
数据类型 | 存储类型 | 更新类型 | 访问模型 |
---|---|---|---|
数字 | Scalar | 不可更改 | 直接访问 |
字符串 | Scalar | 不可更改 | 顺序访问 |
列表 | Container | 可更改 | 顺序访问 |
元组 | Container | 不可更改 | 顺序访问 |
字典 | Container | 可更改 | 映射访问 |
网友评论