Python笔记
1. python可以嵌入或被嵌入C++/C中。
2. 退出Python提示符:Linux/BSD shell,按Ctrl-d退出提示符;Windows命令行中,按Ctrl-z再按Enter。
3. Python是大小写敏感的。
4. 在Python中有4种类型的数—整数、长整数、浮点数和复数。
字符串可以用单引号、双引号、三引号。字符串是不可变的。在Python中没有专门的char数据类型。自然字符串通过给字符串加上前缀r或R来指定。例如r"Newlines are indicated by \n"。
5. 如果你想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号(;)来特别地标明这种用法,分号表示一个逻辑行语句的结束。记住我们可以使用物理行尾的反斜杠来“\”表示逻辑行在下一物理行继续。
6. 空白在Python中是重要的,同一层次的语句必须有相同的缩进。
7. 运算符优先级
8. 在Python中没有switch语句,可以使用if..elif..else语句来完成同样的工作。while、for语句有一个可选的else从句。
9. 函数通过def关键字定义。def关键字后跟一个函数的 标识符 名称,然后跟一对圆括号。圆括号之中可以包括一些变量名,该行以冒号结尾。接下来是一块语句,它们是函数体。
10. 如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是全局的。我们使用global语句完成这一功能。
11. 如果你的某个函数有许多参数,而你只想指定其中的一部分,那么你可以通过命名来为这些参数赋值——这被称作 关键参数 ——我们使用名字(关键字)而不是位置(我们前面所一直使用的方法)给函数指定实参。
#!/usr/bin/python # Filename: func_key.py def func(a, b=5, c=10): print 'a is', a, 'and b is', b, 'and c is', c func(3, 7) func(25, c=24) func(c=50, a=100)
输出:
$ python func_key.py
a is 3 and b is 7 and c is 10
a is 25 and b is 5 and c is 24
a is 100 and b is 5 and c is 50
12. 文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。 强烈建议 你在你的函数中使用文档字符串时遵循这个惯例。
可以使用__doc__(注意双下划线)调用printMax函数的文档字符串属性(属于函数的名称)。请记住Python把 每一样东西 都作为对象,包括这个函数。我们会在后面的类一章学习更多关于对象的知识.
13. 每个Python模块都有它的__name__属性。
14. 内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。我们不给dir函数传递参数而使用它——默认地,它返回当前模块的属性列表。注意,输入的模块同样是列表的一部分。
15. 列表:列表中的项目应该包括在方括号中,这样Python就知道在指明一个列表。一旦创建了一个列表,可以添加、删除、排序或是搜索列表中的项目。由于你可以增加或删除项目,我们说列表是可变的数据类型,即这种类型是可以被改变的。如:shoplist.append('rice') shoplist.sort() del shoplist[0]。
16. 元组: 元组和列表十分类似,只不过元组和字符串一样是 不可变的 即你不能修改元组。元组通过圆括号中用逗号分割的项目定义。元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候,即被使用的元组的值不会改变。
print语句可以使用跟着%符号的项目元组的字符串。这些字符串具备定制的功能。定制让输出满足某种特定的格式。定制可以是%s表示字符串或%d表示整数。元组必须按照相同的顺序来对应这些定制。如:print '%s is %d years old' % (name, age)。
17. 字典:
只能使用不可变的对象(比如字符串)来作为字典的键,但是可以把不可变或可变的对象作为字典的值。基本说来就是,应该只使用简单的对象作为键。
键值对在字典中以这样的方式标记:d = {key1 : value1, key2 : value2 }。注意它们的键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。
记住字典中的键/值对是没有顺序的。如果你想要一个特定的顺序,那么你应该在使用前自己对它们排序。
实例:
#!/usr/bin/python # Filename: using_dict.py # 'ab' is short for 'a'ddress'b'ook ab = { 'Swaroop' : 'swaroopch@byteofpython.info', 'Larry' : 'larry@wall.org', 'Matsumoto' : 'matz@ruby-lang.org', 'Spammer' : 'spammer@hotmail.com' } print "Swaroop's address is %s" % ab['Swaroop'] # Adding a key/value pair ab['Guido'] = 'guido@python.org' # Deleting a key/value pair del ab['Spammer'] print '\nThere are %d contacts in the address-book\n' % len(ab) for name, address in ab.items(): print 'Contact %s at %s' % (name, address) if 'Guido' in ab: # OR ab.has_key('Guido') print "\nGuido's address is %s" % ab['Guido']
输出:
$ python using_dict.py
Swaroop's address is swaroopch@byteofpython.info
There are 4 contacts in the address-book
Contact Swaroop at swaroopch@byteofpython.info
Contact Matsumoto at matz@ruby-lang.org
Contact Larry at larry@wall.org
Contact Guido at guido@python.org
Guido's address is guido@python.org
我们可以使用in操作符来检验一个键/值对是否存在,或者使用dict类的has_key方法。
18. 序列:列表、元组和字符串都是序列。序列的两个主要特点是索引操作符和切片操作符。索引操作符让我们可以从序列中抓取一个特定项目。切片操作符让我们能够获取序列的一个切片,即一部分序列。
索引同样可以是负数,在那样的情况下,位置是从序列尾开始计算的。
切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割,包含第一个数,不包含最后一个数。
记住:列表的赋值语句不创建拷贝,得使用切片操作符来建立序列的拷贝。
19. 字符串方法:startwith方法是用来测试字符串是否以给定字符串开始。in操作符用来检验一个给定字符串是否为另一个字符串的一部分。
find方法用来找出给定字符串在另一个字符串中的位置,或者返回-1以表示找不到子字符串。
str类也有以一个作为分隔符的字符串join序列的项目的整洁的方法,它返回一个生成的大字符串。
20. join方法可以把列表转换成字符串,如:
delimiter = '_*_' mylist = ['Brazil', 'Russia', 'India', 'China'] print delimiter.join(mylist)
输出:Brazil_*_Russia_*_India_*_China
21. linux下zip命令有一些选项和参数。-q选项用来表示zip命令安静地工作。-r选项表示zip命令对目录递归地工作,即它包括子目录以及子目录中的文件。两个选项可以组合成缩写形式-qr。选项后面跟着待创建的zip归档的名称,然后再是待备份的文件和目录列表。
22. os.exists函数检验在主备份目录中是否有某名称的目录,os.mkdir函数创建目录。
23. os.sep变量的用法——这会根据你的操作系统给出目录分隔符,即在Linux、Unix下它是'/',在Windows下它是'\\',而在Mac OS下它是':'。使用os.sep而非直接使用字符,会使我们的程序具有移植性,可以在上述这些系统下工作。
24. 如comment=raw_input(input('Enter a comment --> ')可获得用户输入。
25. 域和方法可以合称为类的属性。pass语句表示空白的语句块。
26. 类:
类/对象可以拥有像函数一样的方法,这些方法与函数的区别只是一个额外的self变量。
__init__方法在类的一个对象被建立时,马上运行,这个名称的开始和结尾都是双下划线。
__del__,它在对象消逝的时候自动被调用。
有两种类型的域 ——类的变量和对象的变量,它们根据是类还是对象拥有这个变量而区分。
类的变量 由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映 到所有其他的实例上。
对象的变量 由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝,即它们不是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称,但是是互不相关的。
Python中所有的类成员(包括数据成员)都是公共的,所有的方法都是有效的。只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。
Python不会自动调用基本类的constructor,需要亲自专门调用它。
Python总是首先查找对应类型的方法,如果它不能在导出类中找到对应的方法,它才开始到基本类中逐个查找。
27. Python提供一个标准的模块,称为pickle。使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为 持久地 储存对象。还有另一个模块称为cPickle,它的功能和pickle模块完全相同,只不过它是用C语言编写的,因此要快得多(比pickle快1000倍)。
28. os模块:
● 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()函数返回一个路径的目录名和文件名。
>>> os.path.split('/home/swaroop/byte/code/poem.txt')
('/home/swaroop/byte/code', 'poem.txt')
● os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。类似地,os.
path.exists()函数用来检验给出的路径是否真地存在
29. lambda语句被用来创建新的函数对象,并且在运行时返回它们。
#!/usr/bin/python # Filename: lambda.py def make_repeater(n): return lambda s: s*n twice = make_repeater(2) print twice('word') print twice(5)
输出:
$ python lambda.py
wordword
10
30. exec语句用来执行储存在字符串或文件中的Python语句。例如,我们可以在运行时生成一个包含Python代码的字符串,然后使用exec语句执行这些语句:
>>> exec 'print "Hello World"'
Hello World
31. eval语句用来计算存储在字符串中的有效Python表达式:
>>> eval('2*3')
6
32. epr函数用来取得对象的规范字符串表示。反引号(也称转换符)可以完成相同的功能。