您的位置:首页 > 编程语言 > Python开发

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:pdb

Logger:logging

Profiler:profile, hotshot, cProfile

调试模块 pdb 允许你设置(条件)断点,代码逐行执行,检查堆栈。它还支持事后调试。

logging 模块是在 Python2.3 中新增的, 它定义了一些函数和类帮助你的程序实现灵活的日志系统。共有五级日志级别: 紧急, 错误,警告,信息和调试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: