1 yield 的使用注意事项
yield必须在迭代器中运行,他的功能下次运行的时候会从当前断点执行
yield还可以保存函数运行过程中过程的信息
2三目运算符
temp=none
if 1>3
temp=‘shabi’
else
temp=‘doubi’
换成三目运算符就是 temp= ‘shabi’ if 1>3 else ‘doubi’
3 lamda表达式
temp=lamda x,y:x+y
4 python 内置函数
(1)dir 能列出所有方法 比如定义了一个a是一个列表 dir(a)就出出现列表的全部方法
(2)var 列出所有的方法,var()返回的是一个字典,带key和value
(3)reload和import
import在导入其他模块的方法时使用,
例如 from haunch import demom,就会把hanshu包中的demon.py导 入到正在写的py中
reload的作用事重新导入,例如导入一个文件了,也执行他里面的函数了 , 此时在import的话,不能执行,但如果有个需求要求你在倒入一次,在执行一次,可以reload()一下
(4)id()是显示内存地址
(5)abs()求绝对值
(6)divmod() 显示除数和余数
例如 divmod(10,3)结果为(3,1)
(7)chr()把数字转化ACCIC的形式
例如print chr(65) 输出 A
(8)hen()十六进制
oct()八进制
bin()2进制
(9)for k,v in enumerate([1,2,3,4]):
print k,v
用途,为某一商品编号
li=[‘手表','相机','电脑']
for item,value in enumerate(li,1):
print item,value
结果为
1 手机
2 相机
3 电脑
默认事从0开始编号,因为我在参数那个地方加了一个1 编号从1开始
(10)过滤器filter
1 print filter(lambda x: x==1,[1,23,4]) #True序列
2 def foo(it):
if it<12:
return True
else:
return False
li=[11,2,1,322,33]
item=filter(foo, li)
print item
结果如下
[11,2,1] 返回一个列表
(11)reduce() 累加累乘
li=[11,22,33,44,55]
print reduce(lambda x,y:x*y,li)
这个方法是首先先把11,22当做x,y,然后再把结果 当做下一个x,然后y是33
random随机数
#_*_ coding:utf-8 _*_
import random
#print random.randint(1,7)
#print random.randrange(1,3) #randrange(x,y) x<=random<y
d=[]
for i in range(6):
if i==random.randint(1,7):
d.append(str(random.randint(1,7)))
else:
d.append(chr(random.randint(65,90)))
print ''.join(d)
MD5加密
#_*_ coding:utf-8 _*_
import hashlib
hash=hashlib.md5()
hash.update('aweewew')
print hash.hexdigest()
根据不同的用户,通过md5会生成不同的md5密码(一个用户通过md5只能生成一个密码),md5密码不能反解,假如登陆验证时,再次执行md5方法,把生成的秘钥和数据库中已经保存的md5秘钥进行比对,一样的话则登陆成功
这样可以防止数据库中存放的明文密码,假如数据库被盗,那么用户的信息也被盗取
网上解释
在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict:
d = dict(name='Bob', age=20, score=88)
可以随时修改变量,比如把name改成’Bill’,但是一旦程序结束,变量所占用的内存就被操作系统全部回收。如果没有把修改后的’Bill’存储到磁盘上,下次重新运行程序,变量又被初始化为’Bob’。
我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。
序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
例如玩游戏时你电脑突然死了,下次开机时还会显示你电脑死机前的状态,因为所有的数据都在内存中,它每隔一段时间(例如10秒)就会从内存中拷贝最新的状态保存到硬盘上 ,就是通过序列化的方式
代码如下
import pickle
li =['mazhongyi',11,22,'tiancai']
pickle.dump(li,open('/Users/mazhongyi/Desktop/demon/day3/xuliehua/xuliehua.pk','w'))
result =pickle.load(open('/Users/mazhongyi/Desktop/demon/day3/xuliehua/xuliehua.pk','r'))
print result
dump代表序列化,load代表反序列化
小注:dumps()是不涉及文件,直接对列表字典等进行序列化,例如 pickle.dumps(li)
同样的例子还有loads,去掉s后就事对文件的操作
json
如果我们要在不同的编程语言之间传递对象(在python与python的传输过程中可以使用pickle),就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下
Python内置的json模块提供了非常完善的Python对象到JSON格式的转换。我们先看看如何把Python对象变成一个JSON:
>>> import json
>>> d = dict(name='Bob', age=20, score=88)
>>> json.dumps(d)
‘{“age”: 20, “score”: 88, “name”: “Bob”}’(是把字典序列化为字符串)
dumps()方法返回一个str,内容就是标准的JSON。类似的,dump()方法可以直接把JSON写入一个file-like Object。
要把JSON反序列化为Python对象,用loads()或者对应的load()方法,前者把JSON的字符串反序列化,后者从file-like Object中读取字符串并反序列化:
>>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'
>>> json.loads(json_str)
{u'age': 20, u'score': 88, u'name': u'Bob'}
有一点需要注意,就是反序列化得到的所有字符串对象默认都是unicode而不是str。由于JSON标准规定JSON编码是UTF-8(所以反序列化出来带着u),所以我们总是能正确地在Python的str或unicode与JSON的字符串之间转换。
正则表达式(re)
正则表达式常用的格式
1 字符 \d (数字) \w (字母,下划线) \t()
.(注意前面的是一个点,表示除了回车意外的所有字符)
2 次数
* (代表大于等于0)
(代表大于等译1)
? (代表0或1)
{m} (代表次数,就如这个地方m为6,则表明6次)
{m,n} (代表一个范围 m<=次数<=n)
s = re.search('a{3,5}','aaaaaa')
print s.group()
结果为
aaaaa
正则表达式常用的有六个函数
1 match(’判断条件’,’执行判断的字符串’),从开头开始匹配,如果开头没有符合判断条件,返回值为none
2 search(’判断条件’,’执行判断的字符串’),放眼整个字符串匹配,即使开头没有字符串,也会继续遍历,假如后边有符合判断条件的字符串,则返回该字符串,如果整个字符串中都没有要满足判断条件的,返回none
demon
import re
result = re.match('\d+','adf1213adf')
if result:
print result.group()
else:
print '不符合匹配条件'
result2 = re.search('\d+','adf1213adf')
if result2:
print result2.group()
else:
print ‘不符合匹配条件’
3 group() 正则表达式中,group()用来提出分组截获的字符串
group()和groups()的区别
group() 会输出正则表达式中的所有内容,而groups()只会生成正则表达式的内容
4 findall(’判断条件’,’执行判断的字符串’)
查找到所有符合判断条件的字符串
result_findall=re.findall('\d+','adf123we21ewr123eqw')
print result_findall
time
import time
print time.gmtime()
输出结果
time.struct_time(tm_year=2015, tm_mon=9, tm_mday=28, tm_hour=12, tm_min=37, tm_sec=19, tm_wday=0, tm_yday=271, tm_isdst=0)
print strftime('%Y-%m-%d %H:%M:%S’)(用的最多)
输出结果
2015-09-28 20:37:19
sys
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.maxunicode 最大的Unicode值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.stdout.write('please:')
val = sys.stdin.readline()[:-1]
print val
os
> os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname")
> 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir
> 获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多层递归目录
> os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
> os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
> os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
> os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove()
> 删除一个文件 os.rename("oldname","newname") 重命名文件/目录
> os.stat('path/filename') 获取文件/目录信息 os.sep
> 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" os.linesep
> 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" os.pathsep 输出用于分割文件路径的字符串
> os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' os.system("bash
> command") 运行shell命令,直接显示 os.environ 获取系统环境变量 os.path.abspath(path)
> 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回
> os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
> os.path.basename(path)
> 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
> os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
> os.path.isabs(path) 如果path是绝对路径,返回True os.path.isfile(path)
> 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path)
> 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]])
> 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path)
> 返回path所指向的文件或者目录的最后存取时间 os.path.getmtime(path)
> 返回path所指向的文件或者目录的最后修改时间