我的python第三天

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(["雷诺",‘[email protected]‘])

msg[‘To‘] = formataddr(["走人",‘[email protected]‘])

msg[‘Subject‘] = "主题"

 

server = smtplib.SMTP("smtp.126.com", 25)

server.login("[email protected]", "邮箱密码")

server.sendmail(‘[email protected]‘, [‘[email protected]‘,], 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动作)

时间: 2024-10-27 19:24:47

我的python第三天的相关文章

Python进阶(三十五)-Fiddler命令行和HTTP断点调试

Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令 ??上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的session不是同一个概念,这里的每条HTTP请求都称为一个session).界面中能够看到Fiddler抓取的全部HTTP请求.而为了更加方便的管理全部的session, Fiddler提供了一系列内置的函数用于筛选和操作这些session(习惯命令行操作Linux的童鞋应该能够感受到这会有多么方便

Python进阶(三十四)-Python3多线程解读

Python进阶(三十四)-Python3多线程解读 线程讲解 ??多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度. 程序的运行速度可能加快. 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. ??线程在执行过程中与进程还是有区别的.每个独立

Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据

Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据 ??matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. ??它的文档相当完备,并且 Gallery页面 中有上百幅缩略图,打开之后都有源程序.因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定. ??在Linux下比较著名的数据图工具还有gnuplot

Python进阶(三十六)-Web框架Django项目搭建全过程

Python进阶(三十六)-Web框架Django项目搭建全过程 ??IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 ??Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! Django 特点 强大的数据库功能 用python的类继承,几行代码就可以拥有一个丰富,动态的数据库操作接口(API),如果需要你也能执行SQL语句. 自带的强大的后台功能 几行简单的代码就让你的网

初学Python(三)——字典

初学Python(三)——字典 初学Python,主要整理一些学习到的知识点,这次是字典. #-*- coding:utf-8 -*- d = {1:"name",2:"age",3:"sex"} #d[1]中的1代表的不是下标值,而是key值 print d[1] #添加值 d[4]="addres" print d #更新值 d[4]="address" print d #当key值不存在时,这个时候用

怒学Python——第三篇——结构控制

众所周知,程序语句运行的结构无非是顺序结构.分支结构和循环结构,Python也是如此,顺序结构过于简单不提,简单记录一下分支和循环与C++的异同点,顺便提一下,对于已经会C++的人来说,学Python应该注意的是语句块通过缩进来控制. 分支结构:都使用if.else,多出了一个elif代替C++的else if,本质相同,就不给出例子 循环结构:和C++对比,没有了do..until语句,有while和for,里面同样使用break来结束循环,使用continue来进入下一个循环,但for出现了

python基础三(列表和元组)

数据结构:数据结构是以某种方式(如通过编号)组合起来的数据元素集合.在python中,最基本的数据结构为序列,序列中每个元素都有编号从0开始. 1.序列概述:?python内置了许多种序列,列表.元组.字符串等.?列表和元组的不同在于,列表是可以修改的,而元组不可以,这意味着列表用于需要中途添加元素的情形,而元组适用于禁止修改元素的情形. 1.1.创建列表 假设你现在需要一个东西来储存多个名字,那么用列表正合适 list_name = ["王晓明","李二"] #所

python中三引号的作用(逗号的两点总结)

三引号 1.三引号注释: 程序中我使用#来做单行注释,可以使用三引号可以做多行注释. 三个引号能包含多行字符串,同时常常出现在函数的声明的下一行,来注释函数的功能,与众不同的地方在于,这个注释作为函数的一个默认属性,可以通过 函数名.__doc__ 来访问 2.三引号格式化输出:用print打印字符串时,三引号包含多行字符串,则原格式输出 In [2]: print """    ...:     hello world    ...:     my name is dayu

python爬虫(三)--Python的set()

如果你已经掌握了爬虫基础,看了我前面三个基础再来继续看这一篇文章.这篇文章主要讲解爬虫程序中必须要用到的python集合,如果你对集合很了解.那可以不用看. 在爬虫程序中,为了不重复爬取已经爬过的页面,我们需要把已经爬过的页面的url放进集合中,在每一次要爬取某一个url之前,先看看集合里面是否已经存在,如果已经存在跳过这个url,如果不存在我们把ur放进聚合中,然后再去爬取这个页面 python提供了set这种数据结构,set是一种无序的,不包含重复元素的结构,一般用来测试是否已经包含了某元素

初识Python(三)

一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在后续的代码中使用: 外层变量,可以被内层变量使用:内层变量,也可以被外层变量使用: 如下示例: #!/usr/bin/env python # -*- coding: UTF-8 -*- if 1==1:     name1 = 'user1'      name2 = name1 print name2 执行结果如下: 二.各种进制的表示方法 二进制,01 八进制,01234567 十进制,0123456789 十六进制,01