星海's Blog

老头初学编程
Python学习笔记(2)

Python学习笔记(1)

星海 posted @ 2010年10月02日 02:32 in Python学习 , 1844 阅读

转义符

假设你想要在一个字符串中包含一个单引号('),那么你该怎么指示这个字符串?例如,这个字符串是What's your name?。你肯定不会用'What's your name?'来指示它,因为Python会弄不明白这个字符串从何处开始,何处结束。所以,你需要指明单引号而不是字符串的结尾。可以通过 转义符 来完成这个任务。你用\'来指示单引号——注意这个反斜杠。现在你可以把字符串表示为'What\'s your name?'

另一个表示这个特别的字符串的方法是"What's your name?",即用双引号。类似地,要在双引号字符串中使用双引号本身的时候,也可以借助于转义符。另外,你可以用转义符\\来指示反斜杠本身。

值得注意的一件事是,在一个字符串中,行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。

 

自然字符串

如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要指定一个自然字符串。自然字符串通过给字符串加上前缀rR来指定。例如r"Newlines are indicated by \n"

nicode字符串

Unicode是书写国际文本的标准方法。如果你想要用你的母语如北印度语或阿拉伯语写文本,那么你需要有一个支持Unicode的编辑器。类似地,Python允许你处理Unicode文本——你只需要在字符串前加上前缀uU。例如,u"This is a Unicode string."

一定要用自然字符串处理正则表达式。否则会需要使用很多的反斜杠。例如,后向引用符可以写成'\\1'或r'\1'。

运算符
//     取整除     返回商的整数部分     4 // 3.0得到1.0
%     取模     返回除法的余数     8%3得到2。-25.5%2.25得到1.5
<<     左移     把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即0和1)     2 << 2得到8。——2按比特表示为10
>>     右移     把一个数的比特向右移一定数目     11 >> 1得到5。——11按比特表示为1011,向右移动1比特后得到101,即十进制的5。
&     按位与     数的按位与     5 & 3得到1。
|     按位或     数的按位或     5 | 3得到7。
^     按位异或     数的按位异或     5 ^ 3得到6

表5.2 运算符优先级
运算符     描述
lambda     Lambda表达式
or     布尔“或”
and     布尔“与”
not x     布尔“非”
in,not in     成员测试
is,is not     同一性测试
<,<=,>,>=,!=,==     比较
|     按位或
^     按位异或
&     按位与
<<,>>     移位
+,-     加法与减法
*,/,%     乘法、除法与取余
+x,-x     正负号
~x     按位翻转
**     指数
x.attribute     属性参考
x[index]     下标
x[index:index]     寻址段
f(arguments...)     函数调用
(experession,...)     绑定或元组显示
[expression,...]     列表显示
{key:datum,...}     字典显示
'expression,...'     字符串转换

运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算。例如,2 + 3 + 4被计算成(2 + 3) + 4。一些如赋值运算符那样的运算符是由右向左结合的,即a = b = c被处理为a = (b = c)。

含 有0个或1个项目的元组。一个空的元组由一对空的圆括号组成,如myempty = ()。然而,含有单个元素的元组就不那么简单了。你必须在第一个(唯一一个)项目后跟一个逗号,这样Python才能区分元组和表达式中一个带圆括号的对 象。即如果你想要的是一个包含项目2的元组的时候,你应该指明singleton = (2 , )。

当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 参考 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑定。

当 你创建一个对象并给它赋一个变量的时候,这个变量仅仅 参考 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑定。如果你想要复制一个列表或者类似的序 列或者其他复杂的对象(不是如整数那样的简单 对象 ),那么你必须使用切片操作符来取得拷贝。如果你只是想要使用另一个变量名,两个名称都 参考 同一个对象,那么如果你不小心的话,可能会引来各种麻烦。

>>>S.find('pa')
1
>>>S
'Spam'
>>>S.replace('pa','XYZ')
'sXYZm'
>>>S
'Spam'

>>S.upper()
'SPAM'

列表解析,方括号,表示创建了一个列表
>>>M
[1,2,3],[4,5,6],[7,8,9]
>>>[row(1)+1 for row in M]
[3,6,9]
>>>diag = [M[i][i] for i in [0,1,2]]
>>>diag
[1,5,9]

嵌套字典
>>>rec={'name':{'first':'bob','last':'Smith'},
        'job':['dev','mgr']
        'age': 40.5}
>>> rec['name']
{'last':'Smith','first':'bob'}
>>>rec['name']['last']
Smith

在Python中,当最后一次引用对象后,这个对向所有占用的内存空间将会自动清理掉
>>>rec=0

集合,是其他对象的集合,并不包括位置顺序,序列却包括
>>> X = set('spam')                 # Make a set out of a sequence in 2.6 and 3.0
>>> Y = set('h', 'a', 'm'}             # Make a set with new 3.0 set literals
>>> X, Y
({'a', 'p', 's', 'm'}, {'a', 'h', 'm'})
>>> X & Y                           # Intersection
{'a', 'm'}
>>> X | Y                           # Union
{'a', 'p', 's', 'h', 'm'}
>>> X – Y                           # Difference
{'p', 's'}

一般的Python整数在内部是以C语言的“长整型”来实现的(也就是说,至少有32位),而Python的浮点数是以C语言的“双精度浮点型”来实现的。因此Python数字的精度和建立Python解释器的C语言的编译器使用的长整型和双精度浮点型的精度是一样的。这是Cpython的标准实现。而在以java为基础的Jpython的实现当中,Python的类型实际上就是Java的类
然而,如果整数常量以1或L结尾(整数值超过32位时,Python自动将它变幻为长整型数),那么它就变成了!!Python!!的长整型数。

Python中,不要使用以0开头的数字字符串,除非你真正想编写的是一个8进制数%x %X均表示无符号十六进制,%o表示无符号八进制
 

“%o %x %X“ % (64,64,255)
‘100 40 FF'

import random
random.random() 返回0-1之间的浮点数
random.randint(1,10) 1-10之间任取值

小数对象就像浮点数,有固定的小数位数,因此有固定的精度,因此我们能够定义如何省略和截短额外的小叔叔子。对表现固定精度的特性(例如钱的总和)以及对实现更好地数字精度是个理想的工具。

>>>0.1+0.1+0.1-0.3
5.5511151231257e-017

“%o %x %X“ % (64,64,255)
‘100 40 FF'

import random
random.random() 返回0-1之间的浮点数
random.randint(1,10) 1-10之间任取值

小数对象就像浮点数,有固定的小数位数,因此有固定的精度,因此我们能够定义如何省略和截短额外的小叔叔子。对表现固定精度的特性(例如钱的总和)以及对实现更好地数字精度是个理想的工具。

>>>0.1+0.1+0.1-0.3
5.5511151231257e-017

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter