python零散补充与总结
一 有一种情况,在Windows系统上面有一个文件,编码为gbk,将其上传到Linux虚拟机,系统编码为utf-8,
使用cat命令查看时是乱码,这时如何解决?
[root@localhost ~]# cat x.py
#!/usr/bin/env python
# -*- coding:utf-8 -*- with open('hhh.txt',mode='r') as f1:
content=f1.read()
#content1=content.decode('gbk')#(u'\u4f60\u597d', <type 'unicode'>)
#content1=content.decode('gbk').encode('utf-8')#('\xe4\xbd\xa0\xe5\xa5\xbd', <type 'str'>)
content1=content.decode('gbk').encode('utf-8')
print(content1)
print(type(content1))
##结果为: #这个我认为首选
#你好
#<type 'str'>
'''
with open('hhh.txt','rb') as f1:
content=f1.read()
content1=content.decode('gbk')
print(content1)
print(type(content1))
###结果为
#你好
#<type 'unicode'>
'''
如果想要使用cat命名查看而不报错呢
[root@localhost ~]# cat xx.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
with open('hhh.txt',mode='r') as f1,\
open('hhh.bak',mode='w') as f2:
content=f1.read().decode('gbk').encode('utf-8')
f2.write(content)
os.remove('hhh.txt')
os.rename('hhh.bak','hhh.txt')
二 运算符优先级
算术操作符>比较运算符>赋值运算符(=、-=、+=)>逻辑运算符
算数 + - * / 比较 > < == != 逻辑 not and or
or的用法:遇到真就返回,没有的话就是False
负数,整数都为真,返回数字本身,两数相遇取前值
0和False属于同一级别,它们比较时,谁在后面取谁
and的用法:遇到假返回,没有的话一般为真
两个元素相遇时,遇到0或者False,返回0或False
两真相遇取后者
0和False相遇,谁前取谁
三 编码
utf-8 英文:1 字节 中文 3 个字节
gbk 英文: 1字节 中文 2 字节
四 给一个列表去重,先转化成集合再转回列表 list(set(a))
五深浅copy
1 浅copy第一层各自独立,从第二层开始,共用一个内存地址
2 深copy无论多少层都是独立的
3 两个变量赋值就是同一个内存地址,一个改变,另外一个也会改变
4 通过切片赋值属于浅copy,第一层变化不会影响另外一个,从第二层开始变化会同步,例如:a=b[:]
六:fromkyes
fromkeys(前面,后面)是创建一个字典
前面可以是字符串,则每个字符都是一个键
前面可以是列表,则每个元素都是一个键
前面可以是元组,则每个元素都是一个键
前面可以是字典,则它的键值作为新字典的键
后面是一个整体,作为新字典的值
七列表,字典相加
列表:[1,2,3]+[4,5,6]
字典:print(dict({'1':'a','2':'b'},**{'3':'c','4':'d'}))
八 列表加上多个元素
一个列表往往有很多元素,甚至往往要加上一些元素
列表在后面加上多个元素的方法:
例如:l5=[1,2,3] l5[10:]='a','b','c' #这里的10可以为其他数字,只有大于2就成 print(l5) #结果为[1,2,3,'a','b','c']
九 关于类中的super()
super方法找的是父类的方法,那到底怎么理解呢,是不是找的是当前类的父类?
class Foo:
def f1(self):
print('foo.f1')
super().f2() #super它会按照下面Sub.mro()的顺序去找上一层找到了 <class '__main__.Bar'>
#尽管Foo和Bar没有关系,所以super是按照mro的列表查找的
class Bar:
def f2(self):
print('Bar.f2') class Sub(Foo,Bar):
pass
s=Sub()
print(Sub.mro()) #[<class '__main__.Sub'>, <class '__main__.Foo'>, <class '__main__.Bar'>, <class 'object'>]
#mro()是查找当前类的继承顺序
s.f1()
#结果为
foo.f1
Bar.f2
十关于可hash对象,什么可以作为字典的key
我们知道要作为字典的key,它必须是不可变得,也就是可hash,有int,float,str,tuple,frozenset
可hash对象它就要求这个对象不能有多个值
例如
>>> a=('a','b',)
>>> print(id(a))
2611973911432
>>> a=('a','b','c')
>>> print(id(a))
2611973840184 #id地址改变了,可以作为hash对象 >>> b=['a','b',]
>>> print(id(b))
2611973903688
>>> print(id(b))
2611973903688
>>> print(id(b))
2611973903688
>>> b.append('c')
>>> print(id(b))
2611973903688 #id的值一直没变
那么元组里面嵌套是否可以hash呢
# e=([1,2,3],'b','c')
# print(id(e)) #1940510753560
# e[0].append(4)
# print(id(e)) #1940510753560 #id值没变 # s={([1,2,3],'b','c'):'a'}
# print(hash(s)) #TypeError: unhashable type: 'list'
因此,元组要作为可hash对象,必须是单纯的元组
不可变对象:value的值变了,id的值也跟着一起变
可变对象:在id不变的情况下,value的值可以变
十一:返回一个字典键的列表
s={'a':1,'b':2,'c':3}l=list(s) 扩展,返回一个字典的values值组成的列表 l1=list(s.values())
十二:列表的pop不带索引就是删除最后一个元素
十三:关于新式类和经典类
python2中使用的是经典类,深度优先,可以修改成新式类
python3中默认使用的就是新式类,新式类使用的是广度优先
十三:关于集合set的哈希和不可哈希
set1={1,2,3}
# dic={set1:'a'}
# print(dic) #报错 TypeError: unhashable type: 'set'
set2=frozenset(set1) #集合使用frozenset就可哈希了
print(set2) #frozenset({1, 2, 3})
dic1={set2:'a'}
print(dic1) #{frozenset({1, 2, 3}): 'a'}
十四:关于 modules
Python中所有加载到内存的模块都放在sys.modules。当import一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将模块的名字加入到正在调用import的模块的Local名字空间中。
如果没有加载则从sys.path目录中按照模块名称查找模块文件,模块文件可以是py、pyc、pyd,找到后将模块载入内存,并加入到sys.modules中,并将名称导入到当前的Local名字空间。
import test2 --->对应的内存中找到的是 sys.modules['test2']
from a import test2 ---->对应的内存中 sys.modules['a.test2']
十五 关于__str__和__repr__
我们来看一个例子
class Fruit:
def __str__(self):
return 'Fruit_str' def __repr__(self):
return 'Fruit_repr'
aa=Fruit()
如果我们打印
print(aa) #输出为 Fruit_str
print(repr(aa)) #输出为Fruit_repr
如果我们修改一下呢
class Fruit:
# def __str__(self):
# return 'Fruit_str' def __repr__(self):
return 'Fruit_repr' bb=Fruit()
print(bb) #输出为 Fruit_repr
总结:单纯print对象的是首先查找 __str__,没有就会找__repr__
python零散补充与总结的更多相关文章
- Python零散收集:
Python零散收集 转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \’ 单引号 \” 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 \v 纵 ...
- PYTHON 100days学习笔记007-2:python数据类型补充(2)
目录 day007:python数据类型补充(2) 1.Python3 元组 1.1 访问元组 1.2 删除元组 1.3 元组运算符 1.4 元组索引,截取 1.5 元组内置函数 2.python3 ...
- PYTHON 100days学习笔记007-1:python数据类型补充(1)
目录 day007:python数据类型补充(1) 1.数字Number 1.1 Python 数字类型转换 1.2 Python 数字运算 1.3 数学函数 1.4 随机数函数 1.5 三角函数 1 ...
- python 知识点补充
python 知识点补充 简明 python 教程 r 或 R 来指定一个 原始(Raw) 字符串 Python 是强(Strongly)面向对象的,因为所有的一切都是对象, 包括数字.字符串与 函数 ...
- 7.python模块补充
此文章是对上节文章模块的补充 一,xml模块 xml是实现不同语言或程序之间进行数据交换的协议,可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言.xml的格式如下 ...
- 3.python基础补充(集合,collection系列,深浅拷贝)
一.集合 1.集合(set): 把不同的元素组成一起形成集合,是python基本的数据类型.集合元素(set elements):组成集合的成员 python的set和其他语言类似, 是一个无序不重复 ...
- python模块补充
一.模块补充 configparser 1.基本的读取配置文件 -read(filename) 直接读取ini文件内容 -sections() 得到所有的section,并以列表的形式返回 -opti ...
- Python 面向对象-------补充
Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...
- python 零散记录(七)(下) 新式类 旧式类 多继承 mro 类属性 对象属性
python新式类 旧式类: python2.2之前的类称为旧式类,之后的为新式类.在各自版本中默认声明的类就是各自的新式类或旧式类,但在2.2中声明新式类要手动标明: 这是旧式类为了声明为新式类的方 ...
随机推荐
- 【转】类似py2exe软件真的能保护python源码吗
类似py2exe软件真的能保护python源码吗 背景 最近写了个工具用于对项目中C/C++文件的字符串常量进行自动化加密处理,用python写的,工具效果不错,所以打算在公司内部推广.为了防止代码泄 ...
- java强制删除文件机制
//启动资源强制回收机制 System.gc(); 然后就可以删除了
- StyleCop(C#代码检测工具)
StyleCop(C#代码检测工具) 一.StyleCop是微软的一个开源的静态代码分析工具,检查c#代码一致性和编码风格. 二.下载地址 http://stylecop.codeplex.c ...
- IDEA创建简单servlet程序
创建项目 创建完后的目录结构为: web项目配置 在WEB-INF目录下新建两个文件夹,分别命名未classes和lib(classes目录用于存放编译后的class文件,lib用于存放依赖的jar包 ...
- 2017上海C++面试
今天参加了一次面试,觉得比较有意思,收获蛮多,简单的在这里总结下. 开始做了一道算法题,也就是算术运算表达式中的左括号和右括号的匹配,用c++写.我大概10分钟就写完了.其实以前一直想实现这个功能的, ...
- 《剑指offer(第二版)》——面试题36:二叉搜索树与双向链表
具体的题目大意和参考思路在此处不详述(见<剑指offer>),实质就是在中序遍历的过程中调整指针的指向,关于中序遍历有递归和非递归两种操作,所以此处也用了两种方法. 方法1(递归法): 代 ...
- Microsoft Office 2016 简体中文 Vol 版镜像下载
在使用上,零售版和批量授权版并没有区别,只是授权方式方面的区别,相对而言,VOL 版的更容易激活一些,其他并没有什么区别了. 有需要的可以在下面下载:(以下均是 VL 版) 版本:Office 201 ...
- P2799国王的魔镜
链接 想了好久(蒟蒻的不能蒟蒻) 题解: #include<iostream>#include<cstdio>#include<cstring>#include&l ...
- 学习笔记之Everything
Everything (software) - Wikipedia https://en.wikipedia.org/wiki/Everything_(software) Everything is ...
- python输出缓冲区的问题
碰到的问题,一段代码,print在前,log的在后,查看日志中log的反而在前面.是python输出缓冲区的问题. python输出缓冲区要满 4k 才写入文件,除非禁用缓存或者强制输出或者程序结束. ...