UNIX env查找技巧
在一些UNIX系统上,可以用这样一种方法避免硬编码Python解释器的路径,在文件的特定的第一行注释中写上这样一句话。
#! usr/bin/env/ python
...script goes here
这样写之后,env程序可以通过系统搜索路径的搜索设置(例如,在绝大多数的UNIX Shell中,通过搜索PATH环境变量中罗列的所有目录)定位Python解释器。这种方法可以使得代码具有更高的可移植性,因为没有必要在所有代码的第一行都硬编码Python解释器的安装位置。
import 和 reload的使用注意事项
你需要记住当调用reload时候需要使用括号,并且要记住让最新的代码运行时候,首先要使用reload。此外,reload是不可传递的,重载一个模块的话只会重载该模块,而不能够重载该模块导入的任何模块,因此有时候必须reload多个文件。由于这些复杂的地方,从现在开始就要避免使用import和reload启动程序,这是一个好主意。import和reload是Python中常用的测试方法,然而最好还是不要滥用。
Python的核心数据类型
对象类型
数字类型 整型,长整型,浮点型,复数类型
字符串 类似C语言的字符序列
列表 [1,[2,'three'],4]
字典 {'food':'Spam','taste':'yum'}
元组 (1,'Spam',4,'U')
文件 myfile = open('eggs', 'r')
集合 set('abc'),{'a','b','c'}
其他类型 None,bool
编程单元类型 函数,模块,类,
与实现相关的类型 编译的代码堆栈跟踪
Python的数字类型包含:整数(无限精度),浮点数,十六进制、八进制、二进制,复数,集合,分数类型以及布尔类型和常亮类型。复数类型的虚部由j或J表示,八进制由0o或者0O前缀表示(第一个为zero,第二个为字母O)。
关于字符串类型见:http://sebug.net/paper/python/ch04s03.html
元组(tulpe)的不同之处在于,它一旦创建就无法改变。也就是说,元组是不可以改变的序列。与字典和列表一样,元组支持混合类型和嵌套。只有字典和列表是可变的类型。
与C/C++不同的地方是,Python中没有switch语句,你可以使用if..elif..else
语句来完成同样的工作(在某些场合,使用字典会更加快捷。)而且,Python在while语句中,你可以加入一个else语句!!!这一点跟C/C++也不同。
Python的for循环从根本上不同于C/C++的for循环。C#程序员会注意到Python的for循环与C#中的foreach循环十分类似。Java程序员会注意到它与Java 1.5中的for (int i : IntArray)相似。
在C/C++中,如果你想要写for (int i = 0; i < 5; i++),那么用Python,你写成for i in range(0,5)。你会注意到,Python的for循环更加简单、明白、不易出错。
C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)。然而,在Python语言中,运算符重载也可以适用于类。
在Python中,变量的特点有:1变量在它第一次赋值时候被创建。2变量在表达式中使用时将会被替换为他们的值。3变量在表达式使用以前必须已赋值。变量像对象一样不需要再一开始进行声明(这完全不同于C/C++)。
从技术上来说,默认的交互式回显和打印的区别就相当于内置的repr和str函数的区别:这两个函数都可以把任意对象变换层它们的字符串模式。repr(也就是默认的交互模式回显)产生的结构就好像它们是代码。str(也就是打印语句)转变为一种通常对用户更加友好的格式。
Python的除法:在Python3.0和Python2.6中除法略有差异,X/Y在Python2.6或之前的版本中,这对操作整数会省掉小数部分,对于浮点数会保持小数部分。在Python3.0版本中,将会变成真除法(一直保留小数部分)。X//Y是 Floor除法,这个操作不用考虑对象的类型,总会省掉结果的小数部分而得到整数部分。
在Python3.0中,任然使用内置函数来创建集合对象,但是也添加了新的集合常量形式,使用为字典所保留的花括号表示。在Python3.0中 set([1,2,3,4])和{1,2,3,4}是等同的。不管如何创建集合,Python3.0都使用新的常量格式来显示它。在Python3.0中,要创建的空集合或从已有的可迭代对象构建集合,都还是需要用到内置的set函数,但是新的常量便于初始化具有已知结构的集合。
集合set是强大而灵活的对象,但是在Python3.0和Python2.6之中都有一个限制,我们要铭记,很大程度上市由于其实现,集合只能包含不可变(即可散列)的对象类型。因此,列表和字典不能嵌入到集合当中,但是如果你需要存储复合值的话,元组是一个可嵌入的。在集合操作中使用元组的时候,元组比较完整的值。集合本事也是不可改变的因此不能直接嵌入到其他集合当中。如果需要在另个集合中存储一个集合,可以像调用set一样来调用frozenset。但是它创建一个不可变集合,该集合不可修改并且可以嵌套在其他集合当中。Python3.0中引入集合解析构造,类似于列表解析构造。但是,编写在花括号中而不是方括号中,并且作用于集合而不是列表。另外Python字符串还支持分片和索引。。。
Python字符串的特点,Python字符串与C语言不同,没有单个字符这种类型,取而代之的是可以使用一个字符的字符串。严格来说,Python的字符串被划分为不可变序列这一类别,意味着这些字符串包含的字符从左到右的位置顺序,而且它们不可以在原处被修改。除了核心的字符串工具外,Python通过标准库re模块(正则表达式)还支持更高级的基于模式的字符串处理,甚至是xml解析器等。
一个Python新手有时候会像这样使用文件名去尝试打开一个文件: myfile = open('C: ew ext.dat','w')他们认为这将打开一个在C: ew目录下名字为text.dat的文件。问题是这里有" "和" ",它们会被识别为一个换行符号并且" "会被一个制表符所替代。解决这个问题的方法是,使用raw字符串。为了避免犯错,记得在Windows中增加字幕r在字符串前面。
Python列表特点:
列表的append方法和 "+"的结构类似,不同的是前者会原地修改列表而后者会生产型的列表。要注意,append和sort会在原地修改列表但是不会返回相关的列表对象,这两者返回值均为None。现在Python也可使用内置函数sorted它可以返回一个新的任何集合,并不只是列表。内置函数sorted有时候sort方法更有效。
Python字典用法:
使用字典的时候,有几点要注意:(1)序列运算无效。字典是映射机制不是序列。字典元素没有顺序概念,类似串联(有序合并)和分片(提取相邻片段)这样的运算是不能用的。(2)对新的索引赋值会添该新的加项。(3)键不一定总是字符串,任何不可变对象(也就是说不是列表)也是可以作为键值的。字典适合用作稀疏的数据结构!
Python元组的用法:
元组和列表非常类似,只不过元组不能再原处修改。虽然元组不支持任何方法调用,但是具有列表的大多数属性。元组是有序对象的集合,与列表相同可以嵌入到任何别的对象中。和列表字符串一样元组通过偏移(而不是键值)来访问。它支持所有基于偏移的操作。类似字符串,元组是不可变的。由于元组是不可变的,在不生成拷贝的情况下不能增长或者缩短,元组可以包含其他复杂类型,因此支持嵌套。