admin管理员组文章数量:1646246
Python 中的列表(大小可变的数组)和字典(哈希表)就是内建于语言本身的。在核心语言中提供这些重要的构建单元,可以鼓励人们使用它们, 缩短开发时间与代码量,产生出可读性更好的代码。C不提供, c++功能不够简洁。
面向对象,
可升级:Python 提倡简洁的代码设计、高级的数据结构和模块化的组件,确保灵活性、
一致性并缩短必要的调试时间
扩展性:兼容扩展c和java
易读写,易维护
健壮性:Python 提供了“安全合理”的退出机制, Python由于错误崩溃,解释程序就会转出一个“堆栈跟踪”,那里面有可用到的全部信息,包括你程序崩溃的原因以及是那段代码(文件名、行数、行数调用等等)出错了。这些错误被称为异常。如果在运行时发生这样的错误,Python能够监控这些错误并进行处理。描述错误的类型和位置,还能指出代码所在模块。
快速原型开发工具:Python 标准库是很完备的,如果你在其中找不到所需,那么第三方模块或包就会为你完成工作提供可能。
内存管理器
内存管理是由 Python 解释器负责。C 或者 C++最大的弊病在于内存管理是由开发者负责的,会分散精力
解释性和(字节)编译性
类似于Java, Python是字节编译的,可以生成一种近似机器语言的中间形式,提升性能。
Python官网:http://python
本书网站:http://corepython
编译Python
Unix 中,可执行文件通常会将 Python 安装到/usr/local/bin 子目录下,而库文件则通常安装在/usr/local/lib/python2.x 子目录下
运行Python
命令行和脚本模式(解释器执行)
命令行选项:
-d 提供调试输出
-O 生成优化的字节码(生成 .pyo 文件)
-S 不导入 site 模块以在启动时查找 Python 路径
-v 冗余输出(导入语句详细追踪)
-m mod 将一个模块以脚本形式运行
-Q opt 除法选项(参阅文档)
-c cmd 运行以命令行字符串形式提交的 Python脚本
file 从给定的文件运行 Python 脚本(参阅后文)
脚本头部添加“#!/usr/local/bin/python”正确的安装位置,可以找到python,否则给出错误提示。或者借用unix下env环境变量设置
#!/usr/bin/envpython
设置好后,不用显式的调用Python 解释器,直接输入脚本名,脚本首行书写的启动指令会自动执行。
Python集成开发环境
Eclipse,pycharm,idle等等,自己搜下.
Python语言使用细节总结
1、下划线(_)在解释器中有特别的含义
表示最后一个表达式的值。 所以上面的代码执行之后,下划线变量会包含字符串:
Python 用下划线作为变量前缀和后缀指定特殊变量
_xxx 保护变量不能用’from module import *’导入
__xxx__ 系统定义名字的专用方法
__xxx 类中的私有变量名
程序员避免用下划线作为变量名的开始。
“单下划线” 开头的成员变量叫做保护变量,是只有类对象和子类对象自己能访问到这些变量。这种变量不能直接访问,需通过类提供的接口进行访问,不能用“from xxx import *”而导入。
只以“双下划线”开头的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
以双下划线开头和结尾的如__foo__,是特殊方法标识,如 __init__()代表类的构造函数。
2、print 语句,与字符串格式运算符( % )结合使用,
可实现字符串替换功能,类似C语言:
>>> print "%s is number %d!" % ("Python",1)
Python is number 1!
3、Print 语句也支持将输出重定向到文件:
符号 >> 用来重定向输出,将输出重定向到标准错误输出:
import sys
print >> sys.stderr, 'Fatal error: invalid input!'
import sys
print >> sys.stderr, 'Fatal error: invalid input!'
将输出重定向到日志文件的例子:
logfile =open('/tmp/mylog.txt', 'a')
print>> logfile, 'Fatal error: invalid input!'
logfile.close()
4、交互式解释器中获得帮助
内建函数help()得到一个生疏函数的帮助,用函数名得到相应的帮助信息
>>>help(raw_input)
Help onbuilt-in function raw_input in module __builtin__:
raw_input(...)
raw_input([prompt])-> string
5、注释用#
注意,文档字符串的特别注释,是运行时访问,用来自动生成文档,如def foo():
"This isa doc string."
return True
函数名下一行,如果内容多,用三个单引号“’”,就可以跨行了
6、运算符
+ - * / // % **
两种除法运算符,单斜杠用作传统除法,双斜杠用作浮点除法(对结果进行四舍五入)
双星号(**)为乘方运算符,如3 ** 2结果为9
7、比较运算(返回布尔值True、False)
< <= > >= == != <>
8、逻辑运算符(and、or、not,返回布尔值)
9、变量和赋值
不许类型关键字,直接复制
>>>miles = 1000.0
>>>name = 'Bob'
>>>counter = counter + 1
支持增量赋值
n = n * 10
n *= 10
不支持自增 1 和自减 1 运算符,--n 解释为-(-n) 从而得到 n , 同样 ++n 的结果也是 n.
10、五种基本数字类型
int (有符号整数)
long (长整数) : 长整数后缀 “L”如 2001L
bool (布尔值)
float (浮点值)
complex (复数)
Python 的长整数所能表达的范围远远超过 C 语言的长整数,事实上,Python 长整数仅受限于用户计算机的虚拟内存总数。如果你熟悉 Java, Python 的长整数类似于 Java 中的 BigInteger 类型。
True 会被当成整数值 1, 而 False则会被当成整数值 0
复数(包括-1 的平方根, 即所谓的虚数)在其它语言中通常不被直接支持(一般通过类来实现)。
decimal用于十进制浮点数。不是内建类型,需要导入decimal 模块,使用如字 1.1 无法用二进制浮点数精确表示
>>>1.1
1.1000000000000001
>>>print decimal.Decimal('1.1')
1.1
11、元组
可以看成是只读的列表。通过切片运算( [ ] 和 [ : ] )可以得到子集,这一点与字符串的使用方法一样。但切片得到的结果也是元组(不能被修改)
>>> aTuple = ('robots', 77, 93, 'try')
>>> aTuple
('robots', 77, 93, 'try')
>>> aTuple[:3]
('robots', 77, 93)
>>> aTuple[1] = 5
Traceback (innermost last):
File "<stdin>", line 1, in ?
TypeError: object doesn't support item assignment
12、循环中,for用法特殊
接受可迭代对象(例如序列或迭代器)作为其参数,每次迭代其中一个元素。如
for item in ['e-mail', 'net-surfing', 'homework','chat']:
print item
Python 提供了一个 range()内建函数来生成这种列表,满足for的需要,接受一个数值范围,生成一个列表:
>>>for eachNum in range(3):
print eachNum
也可以用len()配合for i in range(len(foo))
同时循环两个,enumerate()同时循环 索引和元素
for i, ch in enumerate(foo):
print ch, '(%d)' % i
13、列表解析
在一行中使用一个 for 循环将所有值放到一个列表当中
>>>squared = [x ** 2 for x in range(4)]
>>>for i in squared:
print i
输出结果:
0
1
4
9
更复杂如挑选出符合要求的值放入列表
sqdEvens = [x ** 2 for xin range(8) if not x % 2]
for i in sqdEvens:
print i
输出结果
0
4
16
36
14、列表、字符串、字典,自动对齐(统一用空格不容易出错)、if、while、文件的open()和file()功能简单,省略。
注意,file()内建函数,功能等同于 open(),这个名字可以更确切的表明它是一个工厂函数
15、属性
可以是简单的数据值,也可以是可执行对象,如函数和方法。
使用“.”访问对象属性,如object.attribute。
代码
filename = raw_input('Enter file name: ')
fobj = open(filename,'r')
for eachLine in fobj:
print eachLine,
fobj.close()
其中,使用逗号来抑制自动生成的换行符号。文件中的每行文本已经自带了换行字符, 如果我们不抑制 print 语句产生的换行符号, 文本在显示时就会有额外的空行产生。
但对于很大的文件来说, 上面的代码会占用太多的内存, 这时你最好一次读一行。
16、错误和异常
遇到错误抛出的信息,迅速定位问题并进行调试
代码添加错误检测及异常处理,封装在 try-except 语句当中。except 之后是处理错误的代码。可以用raise直接抛出一个异常。
try:
filename = raw_input('Enter file name: ')
fobj = open(filename, 'r')
for eachLine in fobj:
print eachLine, fobj.close()
except IOError, e:
print 'fileopen error:', e
17、类
class 关键字定义,提供一个可选的父类或者说基类; 如果没有合适的基类,
那就使用 object 作为基类。class 行之后是可选的文档字符串, 静态成员定义, 及方法定
义。
classFooClass(object):
"""my very first class: FooClass"""
version = 0.1 # class (data)attribute
def __init__(self, nm='John Doe'):
"""constructor"""
self.name = nm # class instance(data) attribute
print 'Created a class instance for', nm
defshowname(self):
"""display instance attribute and classname"""
print 'Yourname is', self.name
print 'My name is', self.__class__.__name__
defshowver(self):
"""display class(static) attribute"""
print self.version #references FooClass.version
defaddMe2Me(self, x): # does not use 'self'
"""apply + operation to argument"""
return x + x
其中定义了一个静态变量 version, 它将被所有实例及四个方法共享,__init__(), showname(), showver(), 及熟悉的addMe2Me(). 这些 show*()方法并没有做什么有用的事情,仅仅输出对应的信息。
__init__()方法,名字开始和结束都有两个下划线的方法都是特殊方法。这个方法用于类实例初始化时首先调用,类似构建函数。不过不象其它语言中的构建函数, 它并不创建实例--它仅仅是你的对象创建后执行的第一个方法。它的目的是执行一些该对象的必要的初始化工作。默认的__init__()方法什么都不做,可以覆盖重写。
每个方法都有的一个参数, self. 是类实例自身的引用。类似其他语言使用的this
18、模块导入用import
19、“PEP”(网站:http://python/dev/peps)
PEP就是一个 Python 增强提案(Python Enhancement Proposal), 这也是在新版Python 中增加新特性的方式。不但提供了新特性的完整描述, 还有添加这些新特性的理由,如果需要的话, 还会提供新的语法、 技术实现细节、向后兼容信息等等。
20、实用的内建函数
dir([obj]) 显示对象的属性,如果没有提供参数, 则显示全局变量的名字
type(obj) 返回对象的类型(返回值本身是一个 type 对象!)
int()
str()
help()
21、继续“\”
代码跨行写用反斜线 ( \ ),继续上一行
而分号 ( ; )将两个语句连接在一行中
22、缩进
使用四个空格宽度,避免使用制表符
23、赋值“=”
赋值并不是直接将一个值赋给一个变量,尽管其它语言编程如此。但Python中,对象是通过引用传递的。在赋值时,不管这个对象是新创建的,还是一个已经存在的,都是将该对象的引用(并不是值)赋值给变量。
c语言中,赋值语句其实是被当成一个表达式(可以返回值),但python中不行,Python 的赋值语句不会返回值,非法语句如
>>> x = 1
>>> y = (x = x + 1) # assignments not expressions! File"<stdin>", line 1
报错
y = (x = x + 1)
^
SyntaxError: invalid syntax
Python 不支持类似 x++ 或 --x 这样的前置/后置自增/自减运算
但支持增量赋值,运算符如下
+= -= *= /= %= **=
<<= >>= &= ^= |=
24、“多元”赋值
多个变量同时赋值,如x, y, z = 1, 2, 'a string'
交换两个变量值想x和y
x, y = 1, 2
x, y = y, x
25、python标示符:
关键字
专用下划线标识符
_xxx 不用'from module import *'导入
__xxx__系统定义名字
__xxx 类中的私有变量名
避免用下划线作为变量名的开始,下划线对解释器有特殊的意义。
变量名_xxx被看作是“私有的”,在模块或类外不可以使用。当变量是私有的时候,用_xxx 来表示变量是很好的习惯。因为变量名__xxx__对Python 来说有特殊含义。
26、文档
通过obj.__doc__动态获得文档字串。在模块,类声明,或函数声明中第一个没有赋值的字符串可以用属性 obj.__doc__来进行访问,其中 obj是一个模块,类,或函数的名字。
27、代码风格
模块结构和布局,推荐的标准风格,如下
使用main()函数,检查__name__ 变量的值
28、__name__ 指示模块应如何被加载
如果模块是被导入, __name__ 的值为模块名字
如果模块是被直接执行, __name__ 的值为 '__main__'
29、内存管理
变量无须事先声明
变量无须指定类型
程序员不用关心内存管理
变量名会被“回收”
del 语句能够直接释放资源
(1)动态类型
Python 语言中,对象的类型和内存占用都是运行时确定的。尽管代码被编译成字节码,Python 仍然是一种解释型语言。在创建事,也就是赋值时,解释器会根据语法和右侧的操作数来决定新对象的类型。
(2)内存分配
Python 解释器承担了内存管理的复杂任务,底层的事情放心交给 Python 解释器
30、引用计数
Python创建对象,是作为引用来使用(赋值的),创建时在申请一个内存空间,同时为这个内存空间生成一个 引用计数器,来记录该对象的引用传递给了多少对象(也是,多少新对象指向它)。所以,x=2,在python中先生成一个值为2的内存空间,并生成对应的引用计数器值为0,再将其的引用传给对象x,内存空间2的引用计数器加1(为1),x=y时,y同样指向内存空间2,其计数器继续加1(为0)。
书上说:Python 内部记录着所有使用中的对象各有多少引用。一个内部跟踪变量,称为一个引用计数器。当对象被创建时,就创建了一个引用计数,当不再需要时,引用计数变为0时,它被垃圾回收。
引用计数器增加情况
(1)对象被创建
x = 3.14
(2)或另外的别名被创建
y = x
(3)或被作为参数传递给函数(新的本地引用)
foobar(x)
(4)成为容器对象的一个元素
myList = [123, x, 'xyz']
引用计数器减少情况
(1)一个本地引用离开了其作用范围。如传入函数的fun(x),x在fun()结束后销毁,对应减1
(2)对象的别名被显式的销毁。
del y # or del x
(3)对象的一个别名被赋值给其它的对象
x = 123
(4)对象被从一个窗口对象中移除
myList.remove(x)
(5)窗口对象本身被销毁
del myList # or goes out-of-scope
版权声明:本文标题:pthon核心编程-读书笔记:知识点摘录与总结(方便理解和快速记忆) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1729422980a1200682.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论