静态类型语言一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保 证这一点的。Java 和 C 是静态类型语言。
动态类型语言一种在运行期间才去确定数据类型的语言,与静态类型相反。VBScript 和 Python 是动态类型的,因为它们确定一个变量的类型是在您第一次给它赋值的时候。
强类型语言一种总是强制类型定义的语言。Java 和 Python 是强制类型定义的。您有一个整数,如果不明确地进行转换 ,不能将把它当成一个字符串。
弱类型语言一种类型可以被忽略的语言,与强类型相反。VBScript 是弱类型的。在 VBScript 中,您可以将字符串 '12' 和整数 3 进行连接得到字符串'123',然后可以把它看成整数 123 ,所有这些都不需要任何的显示转换。
raw_input len def help str del
组织行 ——源文件的头两个字符是#!,后面跟着一个程序。这行告诉你的Linux/Unix系统当你 执行 你的程序的时候,它应该运行哪个解释器。
字面意义上的产量
1 2 3 'this is a string'
数字
整数、长整数、浮点数和复数。
字符串
‘ “ ''' """
转义符
自然字符串 r或者R开头 r"Newlines are indicated by \n"
标识符
标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’)。
标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(0-9)组成。
标识符名称是对大小写敏感的。
对象
Python把在程序中用到的任何东西都称为 对象 。
就每一个东西包括数、字符串甚至函数都是对象这一点来说,Python是极其完全地面向对象的。
逻辑行和物理行
物理行是你在编写程序时所 看见 的。逻辑行是Python 看见 的单个语句。Python假定每个 物理行 对应一个 逻辑行 。
多个物理行,一个逻辑行用\来连接
缩进
控制流
if for while都可以有else分支
else 部分是可选的。如果包含else,它总是在 for 循环结束后执行一次,除非遇到break语句
如果你从 for 或 while 循环中 终止 ,任何对应的循环 else 块将不 执行。
局部变量
当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的。
所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。
全局变量
Global
函数默认参数值
def say(message, times = 1):
默认参数值应该是一个参数。更加准确的说,默认参数值应该是不可变的 .
只有在形参表末尾的那些参数可以有默认参数值,这是因为赋给形参的值是根据位置而赋值的
关键参数
关键参数 —— 我们使用名字(关键字)而不是位置( 我们前面所一直使用的方法)来给函数指定参数值
使用关键参数不必担心参数的顺序。
文档字符串 DOCStrings
在函数的第一个逻辑行 的字符串是这个函数的 文档字符串 。
文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。
printMax.__doc__
模块
from..import
import..as..
模块的__name__
每个 Python 模块都有它的 __name__ ,如果它是 '__main__' ,这说明这个模块被用户单独运行,否则就是被其他模块调用
dir 函数
列出模块定义的标识符。标识符有函数、类和变量。参数为空时列出当前模块的标识符
函数声明
关键字:def
Python 不需要指定返回值的数据类型;甚至不需要指定是否有返回值。
实际上,每个 Python 函数都返回一个值;如果函数执行过 return 语句,它将返回指定的值,否则将返回 None (Python 的空值)
在 Python 中参数,params 不需要指定数据类型。Python 会会根据赋给它的值来判定一个变量是什么类型,并在内部将其记录下来
数据结构
列表list[]
元组tuple():不可变的序列
列表之中的列表不会失去它的身份,即列表不会像Perl中那样被打散。同样元组中的元组,或列表中的元组,或元组中的列表等等都是如此。只要是Python, 它们就只是使用另一个对象存储的对象。
含有0个或1个项目的元组。 一个空的元组由一对空的圆括号组成,如 myempty = () 。然而,含有单个元素的元组就不那么简单了。你必须在第一个(唯一一个)项目后跟一个逗号, 这样Python才能区分元组和表达式中一个带圆括号的对象 。即如果你想要的是一个包含项目 2 的元组的时候,你应该指明 singleton = (2 , ) 。
元组最通常的用法是用在打印语句中
字典dict{}:键值对
序列:列表、元组和字符串都是序列
序列的两个主要特点是索引 操作符和切片 操作符。索引操作符让我们可以从序列中抓取一个特定项目。切片操作符让我们能够获取序列的一个切片,即一部分序列。
索引同样可以是负数,在那样的情况下,位置是从序列尾开始计算的。
# Indexing or 'Subscription' operation
print 'Item -1 is', shoplist[-1]
# Slicing on a list(切片生成一新对象,clone操作)
print 'Item start to end is', shoplist[:] #print all
# Slicing on a string
实用Python脚本
模块os(os.system,os.sep),time( time.sleep ),sys(sys.exit)
windows目录: 'C:\\Documents' 或 r'C:\Documents'
py2exe www.py2exe.org(生成独立于python环境的exe文件 免费工具)
1,download [py2exe-0.6.9.win32-py2.7.exe] from http://sourceforge.net/projects/py2exe/files/
2,install py2exe
3,create setup.py
from distutils.core import setup
import py2exe
setup(console=['osCmd.py'])
4,Run setup script: python setup.py py2exe
5,Run dist directory executable software
Inno Setup http://www.jrsoftware.org/isinfo.php (生成独立于python环境的Install安装文件 免费工具)
Inno Setup is a free installer for Windows programs. First introduced in 1997, Inno Setup today rivals and even surpasses many commercial installers in feature set and stability.
面向对象的编程:class
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不 为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是 self 。
Python中的 self 等价于C++中的 self 指针和Java、C#中的 this 参考。
Python的类中有很多方法的名字有特殊的重要意义:
__init__ 方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。(构造函数)
__del__ (析构函数)
self后面跟的是实例变量,类中直接使用的变量是类变量
Python中所有的类成员(包括数据成员)都是 公共的 ,所有的方法都是 有效的 。
只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如 __privatevar ,Python的名称管理体系会有效地把它作为私有变量。
惯例:如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。
继承:
Python不会自动调用基本类的constructor,你得亲自专门调用它
输入输出
你可以通过创建一个 file 类的对象来打开一个文件,分别使用 file 类的 read 、 readline 或 write 方法来恰当地读写文件。对文件的读写能力依赖于你在打开文件时指定的模式。最后,当你完成对文件的操作的时候,你调用 close 方法来告诉Python我们完成了对文件的使用。
文件模式:默认r 读模式( 'r' )、写模式( 'w' )或追加模式( 'a' )
print line,
# Notice comma to avoid automatic newline added by Python
存储器 pickle 使用它你可以在一个文件中储存任何 Python对象,之后你又可以把它完整无缺地取出来。这被称为 持久地 储存对象
cPickle ,它的功能和 pickle 模块完全相同,只不过它是用C语言编写的,因此要快得多(比 pickle 快1000倍)
异常
except 可以有多个处理不同类型的分支,每次最多会进入其中某个分支。
用raise可以把原有异常直接丢出,也可以用 raise IndexError(e)构造一个新的异常丢出去
可以用except Exception,e的方式,e中包含异常的类型和内容
traceback.format_exc()可以输出异常信息
try..except 语句来处理异常。我们把通常的语句放在try-块中,而把我们的错误处理语句放在except-块中
如果某个错误或异常没有被处理,默认的Python处理器就会被调用。它会终止程序的运行,并且打印一个消息,我们已经看到了这样的处理。
try..except 块关联上一个 else 从句。当没有异常发生的时候, else 从句将被执行。
raise
try..finally
如果你要同时使用 try..except try..finally 的话,需要把一个嵌入另外一个
python标准库
Python标准库是随Python附带安装的,它包含大量极其有用的模块。
sys 模块包含系统对应的功能。 sys.argv 列表,它包含命令行参数。 sys.version 字符串给你提供安装的Python的版本信息。
sys.stdin 、 sys.stdout 和 sys.stderr 它们分别对应你的程序的标准输入、标准输出和标准错误流。
在Python程序运行的时候,即不是在交互模式下,在 sys.argv 列表中总是至少有一个项目。它就是当前运行的程序名称,作为 sys.argv[0] (由于Python从 0 开始计数)。其他的命令行参数在这个项目之后。
built-in:内置
os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。
即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行。一个例子就是使用 os.sep 可以取代操作系统特定的路径分割符。
os.name 字符串指示你正在使用的平台。比如对于Windows,它是 'nt' ,而对于Linux/Unix用户,它是 'posix' 。
os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径。
os.getenv() 和 os.putenv() 函数分别用来读取和设置环境变量。
os.listdir() 返回指定目录下的所有文件和目录名。
os.remove() 函数用来删除一个文件。
os.system() 函数用来运行shell命令。
os.linesep 字符串给出当前平台使用的行终止符。例如,Windows使用 '\r\n' ,Linux使用 '\n' 而Mac使用 '\r' 。
os.path.split() 函数返回一个路径的目录名和文件名。
<!-- [if !supportLists]-->· <!-- [endif]-->os.path.isfile() 和 os.path.isdir() 函数分别检验给出的路径是一个文件还是目录。类似地, os.path.existe() 函数用来检验给出的路径是否真地存在。
特殊的方法
特殊的方法都被用来模仿某个行为。
__init__(self,...):构造函数
__del__(self):析构函数
__str__(self):在我们对对象使用 print 语句或是使用 str() 的时候调用。
__lt__(self,other):当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。
__getitem__(self,key):使用 x[key] 索引操作符的时候调用。
__len__(self):对序列对象使用内建的 len() 函数的时候调用。
单语句快
列表综合 :通过列表综合,可以从一个已有的列表导出一个新的列表。
listone = [2, 3, 4]
listtwo = [2*i for i in listone if i > 2]
print listtwo
在函数中接收元组和列表
由于在 args 变量前有 * 前缀,所有多余的函数参数都会作为一个元组存储在 args 中。如果使用的是 ** 前缀,多余的参数则会被认为是一个字典的键/值对。
lambda形式
lambda 语句被用来创建新的函数对象,并且在运行时返回它们。
exec和eval语句
exec 语句用来执行储存在字符串或文件中的Python语句。
eval 语句用来计算存储在字符串中的有效Python表达式。
assert语句
assert 语句用来声明某个条件是真的。
repr函数
repr 函数用来取得对象的规范字符串表示。反引号(也称转换符)可以完成相同的功能。注意,在大多数时候有 eval(repr(object)) == object 。
repr 函数和反引号用来获取对象的可打印的表示形式。你可以通过定义类的 __repr__ 方法来控制你的对象在被 repr 函数调用的时候返回的内容。
GUI工具概括
不幸的是,并没有单一的标准Python GUI工具。
首要考虑的因素是你是否愿意为GUI工具付费。
其次考虑的是你是想让你的程序运行在Linux 下、Windows下还是两者都要。
第三个考虑因素根据你是Linux下的KDE用户还是GNOME用户而定。
Jython 是用Java语言实现的Python解释器。这意味着你可以用Python语言编写程序而同时使用Java库!Jython是一个稳定成熟的软件。如果你也是一个Java程序员,我强烈建议你尝试一下Jython