Python学习笔记2:Python基础
2013-09-09 22:46
246 查看
1.语句和语法
#:后面的表示注释\n:换行
\:继续上一行,用'''也可以跨行,含有小括号、中括号、大括号时也可以多行书写。
;:将两个语句连到一行
::将代码块的头和体分开
代码组有不同的缩进分隔
Python文件以模块的形式组织。
2.变量赋值
= += -= *= /= %= **=<<= >>= &= ^= |=
在C中,=是有返回值的,但是在Python中没有,所以下面的语句是非法的(链式赋值是合法的):
>>> x=1 >>> y = ( x = x+1) ) File "<stdin>", line 1 y = ( x = x+1) ) ^ SyntaxError: invalid syntax >>> y = x = x + 1 >>> print x, y 2 2 >>>多重赋值:
>>> x=y=z=1 >>> print x, y, z 1 1 1 >>> x = 2 >>> print x, y, z 2 1 1 >>>上面的例子中,一个值为1的整数对象首先被创建,该对象的同一个引用被赋值给x,y,z。
多元赋值:
>>> x, y, z = 1, 2, 'string' >>> print x, y, z 1 2 string一般我们会这样写以提高代码的可读性:
>>> (x, y, z) = (1, 2, 'string')在Python中交换变量:
>>> x, y = 1, 2 >>> print x, y 1 2 >>> x, y = y, x >>> print x, y 2 1
3.标识符
标识符的格式和C一样。关键字:
iskeyword() 在keyword模块:
a. 从 Python1.4 开始关键字 access 就被废除了
b. Python2.6 时加入
c. Python1.5 时加入
d. Python2.3 时加入
e. Python2.4 中非关键字常量
>>> import keyword >>> keyword.iskeyword('as') True >>> keyword.iskeyword('access') False >>> keyword.kwlist ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']内建:
除了关键字之外,Python 还有可以在任何一级代码使用的“内建”的名字集合,这些名字可以由解释器设置或使用。虽然 built-in 不是关键字,但是应该把它当作“系统保留字”,不做他用。然而,有些情况要求覆盖(也就是:重定义,替换)它们。Python 不支持重载标识符,所以任何时刻都只有一个名字绑定。
help(__builtins__)专用下划线标识符:
_xxx 不用'from module import *'导入
__xxx__ 系统定义名字
__xxx 类中的私有变量名
核心风格:避免用下划线作为变量名的开始
4.基本风格指南
注释很重要文档:
可以通过__doc__特别变量,动态获得文档字串。通过obj.__doc__访问。
>>> def showname(name): ... '''Show the name.''' ... print name ... >>> print showname.__doc__ Show the name. >>>缩进:四个空格非常流行,tab也可以(如果你的代码会存在或是运行在不同的平台上,不建议用tab)。
选择合适的标识符名称。
Python风格指南:
import this
www.Python.org/doc/essays/styleguide.html
www.Python.org/dev/peps/pep-0007/
www.Python.org/dev/peps/pep-0008/
www.Python.org/dev/peps/pep-0020/
www.Python.org/dev/peps/pep-0257/
模块结构和布局:
# (1) 起始行(Unix)
# (2) 模块文档
# (3) 模块导入
# (4) 变量定义
# (5) 类定义
# (6) 函数定义
# (7) 主程序
时刻记住一个事实,那就是所有的模块都有能力来执行代码。最高级别的 Python 语句--也就是说, 那些没有缩进的代码行在模块被导入时就会执行, 不管是不是真的需要执行。由于有这样一个“特性”,比较安全的写代码的方式就是除了那些真正需要执行的代码以外, 几乎所有的功能代码都在函数当中。再说一遍,通常只有主程序模块中有大量的顶级可执行代码,所有其它被导入的模块只应该有很少的顶级执行代码,所有的功能代码都应该封装在函数或类当中
如果模块是被导入, __name__ 的值为模块名字
如果模块是被直接执行, __name__ 的值为 '__main__'
在主程序中书写测试代码。
if __name__ == '__main__':
test()
5.内存管理:
变量无须事先声明变量无须指定类型
程序员不用关心内存管理
变量名会被“回收”
del 语句能够直接释放资源
变量定义:在 Python 中,无需此类显式变量声明语句,变量在第一次被赋值时自动声明。
动态类型:Python 中不但变量名无需事先声明,而且也无需类型声明。
内存分配:Python 解释器承担了内存管理的复杂任务。你只需要关心你要解决的问题,至于底层的事情放心交给 Python 解释器去做就行了。
引用计数:当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时, 也就是说, 这个对象的引用计数变为 0 时, 它被垃圾回收。(严格来说这不是 100%正确,不过现阶段你可以就这么认为)
增加引用计数:
>>> x = 3.14 >>> y = x >>> func(x)如图:
减少引用计数:
foo = 'xyz' #'xyz'对象的引用计数为1 bar = foo #'xyz'对象的引用计数为2 foo = 123 #'zyz'对象的应用计数为1在以下的情况下会造成引用减少:
一个本地引用离开了其作用范围。比如 foobar()(参见上一下例子)函数结束时。
对象的别名被显式的销毁。
del y # or del x
对象的一个别名被赋值给其它的对象
x = 123
对象被从一个窗口对象中移除
myList.remove(x)
窗口对象本身被销毁
del myList # or goes out-of-scope
Del 语句会删除对象的一个引用,它的语法是:
del obj1[, obj2[,... objN]]
引申一步, 执行 del x 会删除该对象的最后一个引用, 也就是该对象的引用计数会减为 0, 这会导致该对象从此“无法访问”或“无法抵达”。 从此刻起, 该对象就成为垃圾回收机制的回收对象。 注意任何追踪或调试程序会给一个对象增加一个额外的引用, 这会推迟该对象被回收的时间。
垃圾收集(GC):不再被使用的内存会被一种称为垃圾收集的机制释放。不再被使用的内存会被一种称为垃圾收集的机制释放。象上面说的, 虽然解释器跟踪对象的引用计数, 但垃圾收集器负责释放内存。垃圾收集器是一块独立代码, 它用来寻找引用计数为 0 的对象。它也负责检查那些虽然引用计数大于 0 但也应该被销毁的对象。 特定情形会导致循环引用。
6.第一个Python程序
#!/usr/bin/python 'makeTextFile.py -- create text file' import os ls = os.linesep #get the file name while True: fname = raw_input('Enter the new file name:') if os.path.exists(fname): print '%s is already exists.' % fname else: break #get file context line all = [] print "\nEnter lines ('.' by itself to quit).\n" while True: entry = raw_input('> ') if entry == '.': break else: all.append(entry) #write lines to file fobj = open(fname, 'w') fobj.writelines(['%s%s' % (line, ls) for line in all ]) fobj.close() print 'DONE'
第二个程序:
#!/usr/bin/python 'readTextFile.py - read and display the file' #get the file name fname = raw_input('Enter the file name what you want to read:') #open file and read. try: fobj = open(fname, 'r') except IOError, e: print 'open file error.' else: for line in fobj: print line, fobj.close()
7.相关模块和开发工具
Debugger:pdbLogger:logging
Profiler:profile, hotshot, cProfile
调试模块 pdb 允许你设置(条件)断点,代码逐行执行,检查堆栈。它还支持事后调试。
logging 模块是在 Python2.3 中新增的, 它定义了一些函数和类帮助你的程序实现灵活的日志系统。共有五级日志级别: 紧急, 错误,警告,信息和调试。
相关文章推荐
- Python基础知识学习笔记(1)
- python基础教程_学习笔记1:序列-1
- Python基础学习笔记(二)
- Python3学习笔记(1)——基础和数据类型
- python学习笔记(一) - 基础
- Python基础学习笔记(六)
- Python3学习笔记【基础3--list,tuple,if条件判断,for/while循环,dict字典,set集合】
- Python之基础知识学习笔记
- Python 学习笔记(基础语法)
- 【学习笔记】Python基础-For与While循环
- Python-OpenCV学习笔记(一):基础知识汇总
- python基础学习笔记
- 【零基础入门学习Python笔记012】一个打了激素的数组3
- Python学习笔记---基础汇总部分
- python 学习笔记 1 -- 基础篇
- python基础教程_学习笔记10:异常
- Spark (Python版) 零基础学习笔记(二)—— Spark Transformations总结及举例
- python基础学习笔记分享版(1)
- python基础教程_学习笔记6:字典
- python基础学习笔记(三)