码迷,mamicode.com
首页 > 编程语言 > 详细

我的python第三天

时间:2015-11-20 06:56:44      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:

collection系列  (关于字典的统计系列)
 
1.计数器(counter)功能
import collections
a = collections.Counter("sfsaf")  #统计字符出现次数(也可以放入字典的值values)
a[‘a‘]                                             #输出一个元素出现的数量
a.elements()查看所有内容            #只能通过循环的方式读出所有值,返回迭代器,内存地址     
dica.update(dicb)                        #可以将字典b中的内容更新到字典a中
dica.clear()                                   #清空字典
dica.most_common(2)                #排序之后输出前2位
 
2.有序字典(orderedDict ) 排序功能 orderdDict是对字典类型的补充,它记住了字典元素添加的顺序
a = collections.OrderedDict(list)
 
3.默认字典(defaultdict)  功能 是对字典的类型的补充,他默认给字典的值设置了一个类型。
#1
my_dict = collections.defaultdict(list) #字典里的value设置默认类型
dic[‘k1‘].append(1)
有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {‘k1‘: 大于66 , ‘k2‘: 小于66}
方法1
#!/usr/bin/env python
# -*- coding:utf-8 -*-
a = [11,22,33,44]
b = defaultdict(list)
for i in a:
        if i>22:
                b[‘k2‘].append(i)
        else:
                b[‘k1‘].append(i)
print b
#2(楼上省去一个步骤而已)
dic= {}
dic[‘k1‘] = []
dic[‘k1‘].append(1)
方法2
#!/usr/bin/env python
# -*- coding:utf-8 -*-
a = [11,22,33,44,55]
b_dic = {}
for i in a:
        if i > 33:
                if ‘k2‘ in b_dic.keys():
                        b_dic[‘k2‘].append(i)
                else:
                        b_dic[‘k2‘] = [i,]
        else:
                if ‘k1‘ in b_dic.keys():
                        b_dic[‘k1‘].append(i)
                else:
                        b_dic[‘k1‘] = [i,]
print b_dic
 
4.可命名元组(namedtuple)
根据nametuple可以创建一个包含tuple所有功能以及其他功能的类型。
1.创建类
2.使用类创建对象
3.使用对象
import collections
Mytuple = collections.namedtuple(‘Mytuple‘,[‘x‘, ‘y‘, ‘z‘])
new = Mytuple(1,2,3)
new.x
help(Mytuple )子类继承父类所有拓展功能
 
1.直接使用类创建对象
2.使用对象
Li = list(1,2,3,4)
print Li
 
 
5、双向队列(deque)
一个线程安全的 双向队列 左右开弓两头可取
import collections
q = collections.deque()
q.append(1)
q.append(2)
q (直接查看)
q.pop():默认右侧取出 打印出最后一个并删除
q.popleft():左侧取出
q 就没有了最后一个
help(collections.deque)使用help进行查询
 
5.1单向队列 别称为叫生产者消费者模型 栈:后进先出 结构被称为弹夹
import Queue 模块调用
import Queue
q = Queue.Queue(10) 10为存放的长度
q.put(1)            存入
q.get()              取出
 
6.迭代器
d1 = cl.elements()    d1就为一个迭代器
只有迭代的时候才能去拿值
迭代器内部每一次都会执行next()方法
 
6.1生成器
range不是生成器 和 xrange 是生成器
readlines不是生成器 和 xreadlines 是生成器
 
数值左移
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
li = [13, 22, 6, 99, 11]
for m in range(len(li)-1):
    print m
    for n in range(m+1, len(li)):
        print n
        if li[m]> li[n]:
            temp = li[n]
            li[n] = li[m]
            li[m] = temp
print li
 
Python之路【第三篇】:Python基础(二)参考于
1.内置函数(常用函数部分介绍注释)
vars() = 当前模块的所有变量
为了使用方便,相当于快捷方式
print vars()             取出当前模块的所有变量
print __file__
print ___doc__
print __name__
file()                        取文件的路径
doc()                       打印注释
name()                    被执行的脚本 name=main、package()
abs()                        函数返回()内数字的绝对值 
print "abs(-45) : ", abs(-45)
print "abs(119L) : ", abs(119L)
help(list)                 详细列出所有详细功能
help(类型名,功能名) 详细列出单个内容的详细功能
dir(list)                    查看类中提供的所有功能
import sys
reload(sys)              重新加载模块用于调试使用
id([a])                      查看变量内存地址用于相互比较地址
cmp(2,3)                 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。
max()                      返回给定参数的最大值,参数可以为序列
min()                       返回给定参数的最小值,参数可以为序列
print "max(80, 100, 1000) : ", max(80, 100, 1000)
 
sum()                      求和功能参数
sum([1,2,3])
sum(range(1,11))
还有一个比较有意思的用法
a = range(1,11)
b = range(1,10)
c =  sum([item for item in a if item in b])
print c
 
divmod(10,3)           方法返回的是a//b(除法取整)以及a对b的余数
pow(100,2)               幂返回 xy(x的y次方) 的值。 pow()是不能直接访问的,需要导入 math 模块
all([‘a‘, ‘b‘, ‘c‘, ‘d‘])     接收一个序列进行判断,若所有值为真,则返回真,否则返回假 相当于 and逻辑与的关于
any([‘a‘, ‘‘] )               接受一个序列,判断,只有有一个值为真 则就为真 or逻辑或的关系
len(a)                        显示字符长度
 
chr()                         接收一个数字返回字符  取值范围[0, 255]之间的正数
ord()                        接收一个字符返回数字
通过chr()和ord()联合起来使用,我们就可以对字符串进行相关运算的转换
比如一个字符串str1,转化成另一个字符串str2, 使得 str2[i] = str1[i] - i
str1 = "eb;3ej8h"
>>> for i in range(0, len(str1)):
...     print chr((ord(str1[i])-i)),
...
e a 9 0 a e 2 a
 
oct(12)                      八进制转换
bin(9)                        二进制转换
hex(2)                       十六进制转换
range(10)                 造数功能,像shell下的seq
xrange()                   是一个类,返回的是一个xrange对象。使用xrange()进行遍历,每次遍历只返回一个值。range()返回的是一个列表,一次性计算并返回所有的值。因此,xrange()的执行效率要高于range()enumerate(li,1)执行数字起始值
 
map(None,list1)      对可迭代函数‘iterable‘中的每一个元素应用‘function’方法,将结果作为list返回
deduce()                 计算和
sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7))  
print sum 
 
apply()                   apply(func [, args [, kwargs ]]) 函数用于当函数参数已经存在于一个元组或字典中时,间接地调用函数。args是一个包含将要提供给函数的按位置传递的参数的元组。如果省略了args,任何参数都不会被传递,kwargs是一个包含关键字参数的字典
 
filter()                     filter()函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤。最终一次性返回过滤后的结果。
 
zip()                         zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表
x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
xyz = zip(x, y, z)
u = zip(*xyz)
print u
运行的结果是:
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
一般认为这是一个unzip的过程,它的运行机制是这样的:
在运行zip(*xyz)之前,xyz的值是:[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
那么,zip(*xyz) 等价于 zip((1, 4, 7), (2, 5, 8), (3, 6, 9))
所以,运行结果是:[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
 
 
2.自定义函数
2.1def 定义函数的关键字
面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是复制粘贴,也就是将之前的代码复制到现在需要的功能处,这个是比较笨的方式。
while True:
     if cpu使用率 > 90%:
          #发送报警提醒
          发邮件短信
     if cpu使用率 > 90%:
          #发送报警提醒
          发邮件短信
函数式编程:将某功能代码封装到函数中function,日后便无需重复编写,仅仅是调用函数即可,后者必然比第一种的重用性和可读性要优秀很多。
def 发送邮件(内容)
          #发送报警提醒
          发邮件短信
while True:
     if cpu使用率 >90%:
          发送邮件(‘cpu报警‘)
 
2.2函数名,函数的使用和定义,日后通过函数名调用该函数
函数声明,不自动执行  调用后才执行
函数式编程最重要的是增强代码的重用性和可读性
def 函数名(参数):
     ...
     函数体
     ...
函数定义主要有如下要点
def:表示函数的关键字
函数名:函数的名称,日后根据函数名调用函数
函数体:函数中进行一系列的逻辑运算,比如,发送邮件,计算出[11,22,33,44]中的最大数等...
参数:为函数体提供数据
返回值:当函数执行完毕后,可以给调用者返回数据。
以上阐述介绍中,比较重要的有参数和返回值:
2.1.1返回值
函数式一个功能块,该功能到底执行是否成功,需要通过返回值来告知调用者。
def 发送短信():
     发送短信的代码...
     if 发送成功:
          return True
     else:
          return Fales
while True:
     #每次执行发送短信函数,都会将返回值自动赋值给result
     #之后,可以根据result来写日志,或重发等操作
     result = 发送短信()
     if result == False:
          记录日志,短信发送失败....
2.1.2函数的返回值 retun True
     1.如果未明确指定返回值 则返回 None
     2.如果返回值可以赋值给某个变量
 
2.1.3函数的参数
为什么要有参数?
无参数实现方式
def cpu报警邮件()
     #发送邮件提醒
     连接邮箱服务器
     发送邮件
def 硬盘报警邮件()
     #发送邮件提醒
     连接邮箱服务器
     发送邮件
while True:
     if cpu利用率 > 90%:
          cpu报警邮件 ()
     if 硬盘使用空间 > 90%:
          硬盘报警邮件()
有参数实现方式
def 发送邮件(邮件内容)
     #发送邮件提醒
     连接邮箱服务器
     发送邮件
while True:
     if cpu利用率 > 90%:
          发送邮件("cpu报警了")
     if 硬盘使用空间 > 90%:
          发送邮件("硬盘报警了")
 
函数中有三种不同的参数
3.1普通参数
形式参数
实际参数
参数可以有n个,传人指定个数的参数
# ######### 定义函数 #########
# name 叫做函数func的形式参数,简称:形参
def func(name):
    print name
# ######### 执行函数 #########
#  ‘leyno‘ 叫做函数func的实际参数,简称:实参
func(‘leyno‘)
 
3.2默认参数
不传则使用默认值
必须放在参数列表的最后
可以指定所传参数
def func(name, age = 18):
    print "%s:%s" %(name,age)
# 指定参数
func(‘leyno‘, 19)
# 使用默认参数
func(‘lili‘)
注:默认参数需要放在参数列表最后
 
3.3动态参数
单值可以多个
def func(*args):               #*args(默认构造元祖)
     print args[0]               #可以指定返回几个参数,不指定就全都返回
# 执行方式一
#func(11,33,4,4454,5)
# 执行方式二
li = [‘1‘,‘2‘]
func(*li)
 
双值
def func(**kwargs):        #**kwargs(默认构造字典)
     print kwargs
# 执行方式一
func(K1=123,K2=‘SSS‘)
# 执行方式二
li = {‘name‘:‘leyno‘, ‘age‘:18, ‘gender‘:‘male‘}
func(**li)
 
两者结合体,自动分类
可以接受多个参数
内部自动构造元组
序列,*,避免内部构造元组
def func(*args, **kwargs):
    print args
    print kwargs
a = [11,22,33]
li = {‘name‘:‘wupeiqi‘,‘age‘:18, ‘gender‘:‘male‘}
func(*a,**li)
 
扩展:发送邮件实例
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
 
msg = MIMEText(‘邮件内容‘, ‘plain‘, ‘utf-8‘)
msg[‘From‘] = formataddr(["雷诺",‘wptawy@126.com‘])
msg[‘To‘] = formataddr(["走人",‘42463333@qq.com‘])
msg[‘Subject‘] = "主题"
 
server = smtplib.SMTP("smtp.126.com", 25)
server.login("wptawy@126.com", "邮箱密码")
server.sendmail(‘wptawy@126.com‘, [‘42463333@qq.com‘,], msg.as_string())
server.quit()
 
文件操作详细
 
1.打开文件
obj = file(‘文件路径‘,‘打开方式‘)
obj = open(‘文件路径‘,‘打开方式‘)
打开文件方式: r只读,w写入,a追加
2.操作文件
obj.seek()               #指定起始读写位置
obj.tell                    #输出指针位置
obj.read()               #读取文件(只有r+能用,rU:\r转成\n)
obj.write()              #写文件
obj.truncate()          #截断,根据当前指针的位置(若接参数,就只保留参数个数的字节)
obj.fileno()              #文件描述符
obj.flush()               #刷新文件内部缓冲区到内存
obj.isatty()               #判读文件是否是泳衣tty设备
obj.next()                #读取下一行数据,不存在,则报错
obj.redinto()            #读取文件到缓冲区,不建议使用,将被遗弃
obj.readline()          #只读取一行数据,用于for循环读出
obj.readlines()        #读取所有数据,并根据换行保存至列表
obj.writelines()       #将一个字符串写入到文件
obj.xwritelines()      #可用于逐写入文件,非全部
3.关闭文件   
obj.close()               #关闭文件,当打开一个文件就必须有关闭操作
 
with open(‘log‘,‘r‘) as obj:     #(with可以同时打开多个文件)
     obj.write()                          # (并且文件可以自动关闭不需要close动作)

我的python第三天

标签:

原文地址:http://www.cnblogs.com/leyno/p/4976449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!