核心编程笔记2.md

关于int(),floor(),round()的说明

函数int()直接截去小数部分。(返回值为整数)

函数floor()得到最接近原数但小于原数的整数。(返回值为浮点数)

函数round()得到最接近原数的整数。(返回值为浮点数)



>>> int(2.323)

2

>>> import math

>>> round(2.623)

3.0

>>> math.floor(2.623)

2.0

hex,oct,ord,unichr

hex(num) 将数字转换成十六进制数并以字符串形式返回

oct(num) 将数字转换成八进制数并以字符串形式返回

chr(num) 将ASCII值的数字转换成ASCII字符,范围只能是0 <= num <= 255。

ord(chr) 接受一个 ASCII 或 Unicode 字符(长度为1的字符串),返回相应的ASCII或Unicode 值。

unichr(num) 接受Unicode码值,返回 其对应的Unicode字符。所接受的码值范围依赖于 你的Python是构建于UCS‐2还是UCS‐4。


>>> hex(2323)

'0x913'

>>> hex(2.32)

Traceback (most recent call last):

File "", line 1, in

TypeError: hex() argument can't be converted to hex

>>> oct(2323)

'04423'

>>> ord('H')

72

>>> chr(72)

'H'

>>> unichr(72)

u'H'

核心模块: random

当你的程序需要随机数功能时,random 模块就能派上用场。该模块包含多个伪随机数发生 器,它们均以当前的时间戳为随机数种子。这样只要载入这个模块就能随时开始工作。下面列 出了该模块中最常用的函数:

两个整数参数,返回二者之间的随机整数

randrange() 它接受和 range()函数一样的参数, 随机返回 range([start,]stop[,step])结果的一项


>>> for i in range(10):

...     print random.randrange(1,100)

...

19

78

79

25

56

42

30

25

64

84

uniform() 几乎和 randint()一样,不过它返回的是二者之间的一个浮点数(不包括范围 上限)。


>>> random.uniform(1,200)

99.49992973419876

>>> random.uniform(1,200)

31.397479296429413

>>> random.uniform(1,200)

62.16024352925623

>>> random.uniform(1,200)

14.23821717081191

>>> random.uniform(1,200)

5.162732675350789

random()类似 uniform() 只不过下限恒等于 0.0,上限恒等于 1.0

choice()随机返回给定序列(关于序列,见第六章)的一个元素


>>> random.random()

0.44415727533326277

>>> random.choice([1,2,3,3,4,2])

3

>>> random.choice([1,2,3,3,4,2])

3

>>> random.choice([1,2,3,3,4,2])

3

>>> random.choice([1,2,3,3,4,2])

3

>>> random.choice([1,2,3,3,4,2])

3

>>> random.choice([1,2,3,3,4,2])

1

>>> random.choice([1,2,3,3,4,2])

2

序列操作符

seq[ind] seq[ind1:ind2] 获得下标为 ind 的元素

seq * expr seq1 + seq2 获得下标从ind1到ind2间的元素集合 序列重复 expr 次

obj in seq 判断 obj 元素是否包含在 seq 中

obj not in seq 判断 obj 元素是否不包含在 seq 中

s[::-1] # 可以视作"翻转"操作


>>> str='1234567'

>>> str[::-1]

'7654321'

>>> for i,j in enumerate(str):

...     print i,j

...

0 1

1 2

2 3

3 4

4 5

5 6

6 7

函数名 enumerate(iter)

zip([it0, it1,... itN])d 返回一个列表,其第一个元素是 it0,it1,...这些元素的第 一个元素组成的一个元组,第二个...,类推.

一般来说,从性能的的角度来考虑,把重复操作作为参数放到循环里面进行是非常低效的.

循环的一个注意事项


while i < len(myString):

print 'character %d is:', myString[i]

上面的循环操作把大把的时间都浪费到了重复计算字符串 myString 的长度上了.每次循环

迭代都要运行一次这个函数.如果把这个值做一次保存,我们就可以用更为高效的方式重写我们 的循环操作.


length = len(myString)

while i < length:

print 'character %d is:', myString[i] 这个方法同样适用于上面的例 6.1

for otherChar in myInput[1:]:

if otherChar not in alphas + nums:

for 循环包含了一个 if 语句,在这个 if 里面执行了合并两个字符串的操作。

被合并的这两个字符串从始至终就没变过,而每次都会重新进行一次计算.如果先把这两个字 符串存为一个新字符串,我们就可以直接引用这个字符串而不用进行重复计算了。


alphnums = alphas + nums

for otherChar in myInput[1:]:

if otherChar not in alphnums:

编译时字符串连接

在xpath里面用过,为了保证不超过80个字符

格式化字符

%c 转换成字符(ASCII 码值,或者长度为一的字符串)

%r 优先用 repr()函数进行字符串转换

%s 优先用 str()函数进行字符串转换

%d / %i 转成有符号八进制数

%u 转成无符号十进制数

%o 转成无符号八进制数

%x/%X (Unsigned)转成无符号十六进制数(x/X 代表转换后的十六进制字符的大小写)

%e/%E 转成科学计数法(e/E 控制输出 e/E)

%f/%F 转成浮点数(小数部分自然截断)

%% 输出%

字符串模板


>>> from string import Template

>>> s = Template('There are ${howmany} ${lang} Quotation Symbols')

>>> print s.substitute(lang='Python', howmany=3)

There are 3 Python Quotation Symbols

>>>  print s.substitute(lang='Python')

File "", line 1

print s.substitute(lang='Python')

^

IndentationError: unexpected indent

>>> print s.safe_substitute(lang='Python')

There are ${howmany} Python Quotation Symbols

输入


raw_input('enter somthing')

不到必须时不要在你的程序里面编解码 Unicod 字符.只在你要写入文件或数据库或者

网络时,才调用 encode()函数;相应地,只在你需要把数据读回来的时候才调用 decode() 函数.

list函数的一些注意

list.count(obj) 返回一个对象 obj 在列表中出现的次数

list.extend(seq) 把序列 seq 的内容添加到列表中

sort()方法,它默认的排序算法是归并排序(或者说"timsort")的衍生算法,时间复杂 度是 O(lg(n!)).

python 队列

import copy


>>> person = ['name', ['savings', 100.00]]

>>> hubby = person

>>> import copy

>>> wifey = copy.deepcopy(person)

>>> [id(x) for x in person, hubby, wifey]

[4533863560, 4533863560, 4533806792]

>>> hubby[0] = 'joe'

>>> wifey[0] = 'jane'

>>> hubby, wifey

(['joe', ['savings', 100.0]], ['jane', ['savings', 100.0]])

删除字典


del dict2['name'] # 删除键为“name”的条目

dict2.clear() # 删除 dict2 中所有的条目

del dict2 # 删除整个 dict2 字典

dict2.pop('name') # 删除并返回键为“name”的条目

字典的几个重要函数:

dict.clear()

dict.fromkey(seq,val=None)

创建并返回一个新字典,以 seq 中的元素做该字典的键,val 做该字 典中所有键对应的初始值(如果不提供此值,则默认为 None)

dict.get(key,default=None)

对字典 dict 中的键 key,返回它对应的值 value,如果字典中不存在此 键,则返回 default 的值(注意,参数 default 的默认值为 None)

dict.items()

返回一个包含字典中(键, 值)对元组的列表

dict.keys()

返回一个包含字典中键的列表

dict.iter()

方法 iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法 一样,不同的是它们返回一个迭代子,而不是一个列表

dict.pop(key[, default])

和方法 get()相似,如果字典中 key 键存在,删除并返回 dict[key], 如果 key 键不存在,且没有给出 default 的值,引发 KeyError 异常

dict.setdefault(key,default=None)

和方法 set()相似,如果字典中不存在 key 键,由 dict[key]=default 为它赋值。

集合运算

等价/不等价被用于在相同或不同的集合之间做比较。两个集合相等是指,对每个集合而言,当 且仅当其中一个集合中的每个成员同时也是另一个集合中的成员。

联合(union)操作和集合的 OR(又称可兼析取(inclusive disjunction))

其实是等价的,两个集 合的联合是一个新集合,该集合中的每个元素都至少是其中一个集合的成员,即,属于两个集合其 中之一的成员。联合符号有一个等价的方法,union().

和其他的布尔集合操作相似,对称差分是集合的 XOR(又称”异或“ (exclusive disjunction)).

两个集合(s 和 t)的对称差分是指另外一个集合C,该集合中的元素,只能是属于集合s或者集合t的成员,不能同时属于两个集合。对称差分有一个等价的方法,

两个集合(s 和 t)的差补或相对补集是指一个集合 C,该集合中的元素,只属于集合 s,而不属 于集合 t。差符号有一个等价的方法,difference().

你可以把交集操作比做集合的 AND(或合取)操作。两个集合的交集是一个新集合,该集合中的每 个元素同时是两个集合中的成员,即,属于两个集合的成员。交集符号有一个等价的方法, intersection().


>>> s = set('cheeseshop')

>>> t = frozenset('bookshop')

>>> print s

set(['c', 'e', 'h', 'o', 'p', 's'])

>>> 'c' in t

False

>>> 'c' in s

True

>>> t

frozenset(['b', 'h', 'k', 'o', 'p', 's'])

>>> s==t

False

>>> s|t

set(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])

>>> s&t

set(['h', 's', 'o', 'p'])

>>> s or t

set(['c', 'e', 'h', 'o', 'p', 's'])

>>> s and t

frozenset(['b', 'h', 'k', 'o', 'p', 's'])

>>> s xor t

File "", line 1

s xor t

^

SyntaxError: invalid syntax

>>> s -t

set(['c', 'e'])

>>> s XOR t

File "", line 1

s XOR t

^

SyntaxError: invalid syntax

>>> s ^ t

set(['b', 'e', 'k', 'c'])

你可能感兴趣的:(核心编程笔记2.md)