Python基础第三篇

一、collections系列

Counter是对字典类型的补充,用于追踪值的出现次数,具备字典的所有功能 + 自己的功能

1.计数器Counter

import collections
a=‘abababsbsbhh‘
c=collections.Counter(a) #直接列出每个元素出现了几次,传入列表和元组也一样
print(c)
#输出:Counter({‘b‘: 5, ‘a‘: 3, ‘h‘: 2, ‘s‘: 2})

#most_common 列出Counter内的前几个
print c.most_common()
print c.most_common(1)
print c.most_common(3)
‘‘‘
输出:
[(‘b‘, 5), (‘a‘, 3), (‘h‘, 2), (‘s‘, 2)]
[(‘b‘, 5)]
[(‘b‘, 5), (‘a‘, 3), (‘h‘, 2)]
‘‘‘

#update 相加
c=collections.Counter(a)
c1=collections.Counter(a)
c.update(c1)
print(c)
#输出:Counter({‘b‘: 10, ‘a‘: 6, ‘h‘: 4, ‘s‘: 4})

#subtract 减
aa=collections.Counter("as")
bb=collections.Counter("htw")
aa.subtract(bb) #c-c1
print(aa)
#输出:Counter({‘a‘: 1, ‘s‘: 1, ‘h‘: -1, ‘t‘: -1, ‘w‘: -1})

#elements  返回包含所有元素集合的迭代器
for item in c.elements():
    print item

Counter

2、有序字典(orderedDict )

import collections
#有序字典,是对字典类型的补充,他记住了字典元素添加的顺序
#具备字典的所有功能 + 自己的功能
dic=collections.OrderedDict()   #定义有序字典
dic["a1"]=1
dic["a2"]=2
dic["a3"]=3
di={}
di["a1"]=1
di["a2"]=2
di["a3"]=3
print(dic)
print(di)
#输出:
# OrderedDict([(‘a1‘, 1), (‘a2‘, 2), (‘a3‘, 3)]) #有序
#{‘a1‘: 1, ‘a3‘: 3, ‘a2‘: 2}    #无序

3、默认字典(defaultdict)

import collections
#默认字典
#defaultdict    是对字典的类型的补充,他默认给字典的值设置了一个类型。
dic=collections.defaultdict(list) #默认字典的value,也可以是元组(tuple)或字典(dict)
#相当于
dic={}
dic["k1"]=[]

4、可命名元组

#tupled的扩展
#可命名元组
import collections
t=(1,2)
#创建一个扩展tuple的类,Mytuple
Mytuple=collections.namedtuple(‘Mytuple‘,[‘x‘,‘y‘])
tu=Mytuple(1,2) #相当于给原来的值赋了一个key
print(t)
print(tu)
print tu.x,tu.y
‘‘‘
输出:
(1, 2)
Mytuple(x=1, y=2)
1 2
‘‘‘

5、双向队列、单向队列

#双向队列,两头都可以取可以插
#线程安全
import collections
q=collections.deque() #创建队列
q.append(1)
q.append(2)
q.append(3)
print(q)

#单向队列,一个方向拿
#线程安全
import Queue
q=Queue.Queue(10) #创建队列,指定最多放10个数据
q.put(1)    #进
q.put(2)
q.put(3)
print q.get()   #取
print q.get()
‘‘‘
队列和栈的结构:
    队列:先进先出
    栈:弹夹,后加先出
‘‘‘

二、迭代器和生成器

1.迭代器

‘‘‘
    只能通过循环从迭代器里拿数据
    next方法:返回迭代器的下一个元素
    __iter__方法:返回迭代器
‘‘‘

2.生成器

#生成器:
‘‘‘
    range不是生成器 和 xrange 是生成器
    readlines不是生成器 和 xreadlines 是生成器
     带有 yield 的函数在 Python 中被称之为 generator(生成器)
‘‘‘

for i in range(100): #返回100个元素的列表
    print(i)
for i in xrange(100):#每次迭代中返回一个元素
    print(i)
#生成器只有使用时才创建,从而避免内存浪费

#练习
#下标式循环
‘‘‘
有列表li=[13, 22, 6, 99, 11]
按照以下规则计算:
13 和 22 比较,将大的值放在右侧,即:[13, 22, 6, 99, 11]
22 和 6 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11]
22 和 99 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11]
99 和 42 比较,将大的值放在右侧,即:[13, 6, 22, 11, 99,]
13 和 6 比较,将大的值放在右侧,即:[6, 13, 22, 11, 99,]
‘‘‘
#冒泡算法 依次用下标对应的两个数字进行比较,大的放右边,从而进行排列
li=[13, 22, 6, 99, 11]
aa=(len(li)-1)
while aa>0:
    for m in range(aa):
        if li[m]>li[m+1]:
            temp=li[m]
            li[m]=li[m+1]
            li[m+1]=temp
    aa=aa-1
print(li)
#输出:[6, 11, 13, 22, 99]

三、函数

1.内置函数

常用内置函数

#常用内置函数
‘‘‘
基础
    help()
    dir()
    print vars()  当前模块的所有变量
    type()
    reload(temp) 真正的在导入一次一个模块
    id()
    is()
    range
    xrange
计算
    cmp(2,3)
    abs()
    boll()
    divmod()
    max()
    min()
    sum()
    pow(2,11)  2.11次方
    len()
    all() 接受一个序列,如果所有都是真返回真,否则返回假
    any()  只有有一个真就是真
assic码转换
    chr() 接收数字返回字符
    ord() 接收字符返回数字
进制转换
    hex()  10转16
    oct()  10转8
    bin()  10转2
‘‘‘
#enumerate  自动生成一列数字对应列表里的值,从0开始
li=[11,22,33,44]
for k,v in enumerate(li,1):#从1开始
    print(k,v)
‘‘‘
输出:
(1, 11)
(2, 22)
(3, 33)
(4, 44)
‘‘‘

每个文件模块自己的变量

#__file__
print __file__  #当前文件路径

#__doc__
import index
print index.__doc__ #index是模块名,可查看一个文件模块的顶部注释

#__name__  用来判断是不是程序的主文件
#当主程序执行时__name__="__main__"
if __name__=="__main__":
    pass

2.自定义函数

  def 函数名(参数):

      函数体

1.return 当函数执行完毕后,可以给调用者返回数据

2.参数

  普通参数:参数可以有n个,但必须传入指定个数的参数

  默认参数:如果默认参数不传值,则使用默认值,并且默认参数只能放在最后

  动态参数:

    动态参数一:*args

#接受多个参数,内部自动构造元组
#传入序列要加*,避免内部构造元组
li=[11,22,33]
def func(*args):
    print(args)
func(li)    #把传的列表当成元组的元素
func(*li)   #加*把传的列表内的每个元素当成元组的元素
#输出:
#([11, 22, 33],)
#(11, 22, 33)

    动态参数二:**kwargs

#构造字典(两*)
dic={"a":1,"b":2}
def func1(**kwargs):
    print(kwargs)
func1(a=11)
func1(**dic)
#输出:
#{‘a‘: 11}
#{‘a‘: 1, ‘b‘: 2}

结合上面两种:

def func2(*args,**kwargs):
    print(args)
    print(kwargs)
func2(1,2,3,a=1,b=2)
#输出:
#(1, 2, 3)
#{‘a‘: 1, ‘b‘: 2}

四、文件操作

1.打开文件

文件句柄 = file(‘文件路径‘‘模式‘)

模式:

‘‘‘
r   只读模式
w   只写模式(不可读,不存在则创建,存在则删除内容)
a   追加模式(可读,不存在则创建,存在则只追加内容)
"+" 表示可以同时读写某个文件

r+  可读写文件(可读,可写,可追加)
w+  写读
a+  同a

rU  表示在读取时,可以将 \r \n \r\n自动转换成 \n (只能与r或r+模式一起使用)

"b" 表示处理二进制文件
rb  以2进制方式去读取文件
wb
ab
‘‘‘

2.操作文件

‘‘‘
close()     关闭文件
fileno()    文件描述符
flush()     刷新文件内部缓冲区
isatty()    判断文件是否是同意tty设备
next()      获取下一行数据,不存在,则报错
read()      读取指定字节数据
readline()  仅读取一行数据
readlines() 读取所有数据,并根据换行保存到列表
xreadlines()可用于逐行读取文件,非全部
seek()      指定文件中指针位置
tell()      获取当前指针位置
truncate()  截断指针后面的内容只留前面的
write()     写
writelines()将一个字符串列表写入文件
‘‘‘

with

  为了避免打开文件后忘记关闭,当with代码块执行完毕时,内部会自动关闭并释放文件资源

with open(‘‘,‘r‘) as obj:
    obj.read()

Python 2.7后with还支持多个文件管理

with open(‘‘,‘r‘) as obj1,open(‘‘) as obj2:
    pass
时间: 2024-10-15 23:11:26

Python基础第三篇的相关文章

python 基础第三篇

一. 编码1. 最早的计算机编码是ASCII. 美国人创建的. 包含了英文字母(大写字母, 小写字母). 数字, 标点等特殊字符[email protected]#$%128个码位 2**7 在此基础上加了一位 2**88位. 1个字节(byte)2. GBK 国标码 16位. 2个字节(双字节字符)3. unicode 万国码 32位, 4个字节4. utf-8: 英文 8 bit 1个字节欧洲文字 16bit 2个字节中文 24bit 3个字节 8bit => 1 byte1024 byte

Python基础第三篇:函数

一.Python函数介绍 1.函数的作用 规范代码使代码变得逻辑性更强 提高可读性,方便管理,降低维护成本,以及降低代码冗余 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 2.函数定义 以 def 关键词开头,后接函数标识符名称和圆括号(),def df() 函数参数必须写在括号中,可以定义多个参数def df(参数1,参数2,参数3.....) 函数内部第一行建议放函数说明 一般带参数的会有return,不带参数的没有,不带return相当于返回 None 3.函数分类

Python基础(三)

Python基础(三) 深浅拷贝 函数(全局与局部变量) 内置函数 文件处理 三元运算 lambda 表达式 递归(斐波那契数列) 冒泡排序 深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy #定义变量   数字.字符串 n1 = 123 #n1 = 'nick' print(id(n1))   #赋值 n2 = n1 print(id(n2))   #浅拷贝 n3 = copy.copy(n1) pri

Python 基础语法(三)

Python 基础语法(三) --------------------------------------------接 Python 基础语法(二)-------------------------------------------- 七.面向对象编程 python支持面向对象编程:类和对象是面向对象编程的两个主要方面,类创建一个新的类型,对象是这个类的实例. 对象可以使用普通的属于对象的变量存储数据,属于对象或类的变量被称为域:对象也可以使用属于类的函数,这样的函数称为类的方法:域和方法可

NHibernate 映射基础(第三篇) 简单映射、联合主键

NHibernate 映射基础(第三篇) 简单映射.联合主键 NHibernate完全靠配置文件获取其所需的一切信息,其中映射文件,是其获取数据库与C#程序关系的所有信息来源. 一.简单映射 下面先来一个简单的例子,然后随着不断地对这个例子修修改改,从而真正了解映射文件.具体的资料可以查看http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919886.html 先来看一张表: 映射文件Product.hbm.xml: <?xml versi

python基础1--小结篇

如果有别的编程语言基础,python属于极好上手的一门语言.应用上,用“自取所需”来描述,最为贴切. 首先,放上一些推荐. 安装上: 1.python3.5.1(推荐官网直接下载,自带IDLE),安装不麻烦,记得增加环境变量即可 2.编辑器:sublime 其实,并没有使用很多,但是推荐的人超多 ,破解版网上很多,按资源下载即可 3.IDE: 强推 pycharm 对JetBrains软件执着的热爱  方便又美观 网上能找到找到注册码,学生用edu邮箱可以免费使用,当然,支持正版! 熟悉上: 语

python基础-第六篇-6.2模块

python之强大,就是因为它其提供的模块全面,模块的知识点不仅多,而且零散---一个字!错综复杂 没办法,二八原则抓重点咯!只要抓住那些以后常用开发的方法就可以了,哪些是常用的?往下看--找答案~ 模块定义 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成 (函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块.

Python基础学习 总结篇

Python基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结构(概要) Python学习(四)数据结构 —— int float Python学习(四)数据结构 —— str Python学习(四)数据结构 —— bool Python学习(四)数据结构 —— list tuple range Python学习(四)数据结构 —— set frozenset

Python之路【第三篇补充】:Python基础(三)

lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 if 1 == 1: name = ‘luotianshuai' else: name = 'shuaige' # 三元运算 name = 'luotianshuai' if 1 == 1 else 'shuaige' #这个就是if else的一个简写. #if 条件成立的时候name为'luotianshuai' 不成立的时候为:'shuaige' ,语法糖! 那么函数有没有