pyhton核心编程笔记

比较大小:多个比较操作可以在同一行上进行,求值顺序为从左到右

>>> a=2

>>> 1<a<3

True

>>> 3 < 4 < 7 # same as ( 3 < 4 ) and ( 4 < 7 ) 
True 
>>> 4 > 3 == 3 # same as ( 4 > 3 ) and ( 3 == 3 ) 
True 
>>> 4 < 3 < 5 != 2 < 7 
False 

Python 提供了is 和is not 运算符来测试两个变量是否指向同一个对象

a is b 等价于 id(a) == id(b)
整数对象和字符串对象是不可变对象,所以 Python 会很高效的缓存它们。这会造成我们认为 Python 应该
创建新对象时,它却没有创建新对象的假象。

>>> a = 1;b=1
>>> id(a) ;
 id(b) 
8402824 
8402824 
>>> c = 1.0 ;
d = 1.0 
>>> id(c) ;
 id(d) 
8651220 
8651204 
>>> e="abc";f="abc"
>>> id(e);id(f)
5057136
5057136

enumerate:

foo = 'abc'
for i,s in enumerate(foo):
    print i,s

0 a
1 b
2 c

foo = 'abc'
for i,s in enumerate(foo,11):
    print i,s

11 a
12 b
13 c


列表解析:

>>> [x ** 2 for x in range(8) if not x % 2]
[0, 4, 16, 36]


文件操作:

filename = raw_input('Enter file name: ')
fobj = open(filename, 'r')
for eachLine in fobj:
print eachLine,
fobj.close()


反斜线\

有两种例外情况一个语句不使用反斜线也可以跨行。在使用闭合操作符时,单一语句可以跨多行,例如:在含有小括号、中括号、花括号时可以多行书写。另外就是三引号包括下的字符串也可以跨行书写。


多元赋值:采用这种方式赋值时, 等号两边的对象都是元组
(x, y, z) = (1, 2, 'a string')

变量交换:x, y = y, x

模块结构和布局
# (1) 起始行(Unix)# (2) 模块文档# (3) 模块导入# (4) 变量定义# (5) 类定义# (6) 函数定义# (7) 主程序


注:时刻记住一个事实,那就是所有的模块都有能力来执行代码。最高级别的 Python 语句--也就是说, 那些没有缩进的代码行在模块被导入时就会执行, 不管是不是真的需要执行。由于有这样一个“特性”,比较安全的写代码的方式就是除了那些真正需要执行的代码以外, 几乎所有的功能代码都在函数当中。再说一遍, 通常只有主程序模块中有大量的顶级可执行代码,所有其它被导入的模块只应该有很少的顶级执行代码,所有的功能代码都应该封装在函数或类当中。
 如果模块是被导入, __name__ 的值为模块名字如果模块是被直接执行, __name__ 的值为 '__main__'

使用局部变量替换模块变量
类似 os.linesep 这样的名字需要解释器做两次查询: (1)查找 os 以确认它是一个模块,(2)在这个模块中查找 linesep 变量。因为模块也是全局变量, 我们多消耗了系统资源。如果你在一个函数中类似这样频繁使用一个属性,我们建议你为该属性取一个本地变量别名ls = os.linesep。 变量查找速度将会快很多--在查找全局变量之前, 总是先查找本地变量。 这也是一个让你的程序跑的更快的技巧: 将经常用到的模块属性替换为一个本地引用。代码跑得更快,而也不用老是敲那么长的变量名了。

切片:

在有三个参数的情况下,第一个起始位置,第二个是终止位置,第三个是步长('-'从右往左)。
>>> foostr = 'abcde' 
>>> foostr[::-1] 
'edcba' 
>>> foostr[::-2]
'eca' 
>>> foolist = [123, 'xba', 342.23, 'abc'] 
>>> foolist[::-1] 
['abc', 342.23, 'xba', 123] 

str() repr() ``

内建函数 str() 和 repr() 或反引号运算符(``) 可以方便的以字符串的方式获取对象的内容、类型、数值属性等信息。repr() 输出对 Python 比较友好, 而 str()的输出对人比较友好。虽然如此,很多情况下这三者的输出仍然都是完全一样的。 


类型比较:

原始比较:if type(num) == type(0)

减少函数调用的次数:import types  if type(num) == types.IntType

对象身份比代替对象值比较:if type(num) is types.IntType

用对象身份的比较来替代对象值的比较有意义吗?如果对象是不同的,那意味着原来的变量一定是不同类型的。(因为每一个类型只有一个类型对象),我们就没有必要去检查(值)了。 一次这样的调用可能无关紧要,不过当很多类似的代码遍布在你的应用程序中的时候,就有影响了。

减少查询次数:from types import IntType    if type(num) is IntType


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

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

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

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

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

import string
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

>>> string.digits
'0123456789'

编译时字符串连接

Python 的语法允许你在源码中把几个字符串连在一起写,以此来构建新字符串:
>>> foo = "Hello" 'world!'
>>> foo
'Helloworld!'


处理 Unicode编码:

程序中出现字符串时一定要加个前缀 u.
不要用 str()函数,用 unicode()代替.
不要用过时的 string 模块 -- 如果传给它的是非 ASCII 字符,它会把一切搞砸。
不到必须时不要在你的程序里面编解码 Unicode 字符.只在你要写入文件或数据库或者网络时,才调用 encode()函数;相应地,只在你需要把数据读回来的时候才调用 decode()函数.

迭代器:

序列:for 循环会自动调用迭代器的 next()方法(以及监视StopIteration 异常). 

for i in seq: 
do_something_to(i)

实际上等价于:

fetch = iter(seq) 
while True: 
    try: 
        i = fetch.next() 
    except StopIteration: 

        break 
    do_something_to(i) 


字典:字典的迭代器会遍历它的键(keys). 
语句 for eachKey in myDict.keys() 可以缩写为 for eachKey in myDict

myDict.has_key(anyKey) 可以被简写为 anyKey in myDict


文件:文件对象生成的迭代器会自动调用 readline()方法,

for  eachLine  in  myFile  替 换  for  eachLine  in myFile.readlines() : 

myFile = open('config-win.txt') 
for eachLine in myFile: 
... print eachLine,  # comma suppresses extra \


列表解析:[expr for iter_var in iterable if cond_expr]

>>> [x ** 2 for x in range(6) if x%2]
[1, 9, 25]

矩阵样例:

>>> [(x+1,y+1) for x in range(3) for y in range(5)] 
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 
3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)] 

磁盘文件样例:

统计单词个数:

>>> f = open('hhga.txt', 'r') 
>>> len([word for line in f for word in line.split()])
计算文件大小:os.stat('test.txt').st_size

计算文件非空字符总和:

>>> f.seek(0) 
>>> sum([len(word) for line in f for word in line.split()]) 


生成器:(expr for iter_var in iterable if cond_expr)

sum(len(word) for line in data for word in line.split())

返回字节数最多行:return max(len(x.strip()) for x in open('/etc/motd')) 


os.path:

分隔 
basename()  去掉目录路径, 返回文件名 
dirname()  去掉文件名, 返回目录路径 
join()   将分离的各部分组合成一个路径名 
split()   返回 (dirname(), basename()) 元组 
splitdrive()  返回 (drivename, pathname) 元组 
splitext()  返回 (filename, extension) 元组 
信息 
getatime()   返回最近访问时间 
getctime()   返回文件创建时间 
getmtime()   返回最近文件修改时间 
getsize()   返回文件大小(以字节为单位) 
查询 
exists()   指定路径(文件或目录)是否存在 
isabs()   指定路径是否为绝对路径 
isdir()   指定路径是否存在且为一个目录 
isfile()  指定路径是否存在且为一个文件 
islink()  指定路径是否存在且为一个符号链接 
ismount()   指定路径是否存在且为一个挂载点 
samefile()   两个路径名是否指向同个文件 


统计单词个数:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值