[python]一些常用的python知识总结
Pthon知识积累,遇到的各种python问题汇总
json.dumps()和json.loads()是json格式处理函数
- json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串)
- json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典)
- https://www.json.cn/ json解析网站
python2与python3编码
- python2默认以ASCII编码,python默认为utf-8
- #-- coding:utf-8 -- 申明编码
- 字符串是由字符构成,字符在计算机硬件中通过二进制形式存储,这种二进制形式就是编码。如果直接使用 “字符串↔️字符↔️二进制表示(编码)” ,会增加不同类型编码之间转换的复杂性。所以引入了一个抽象层,“字符串↔️字符↔️与存储无关的表示↔️二进制表示(编码)” ,这样,可以用一种与存储无关的形式表示字符,不同的编码之间转换时可以先转换到这个抽象层,然后再转换为其他编码形式。在这里,unicode 就是 “与存储无关的表示”,utf—8 就是 “二进制表示”。 python2中字符串有两种表示形式,str和unicode。str可以理解为上面这段话中的二进制编码格式,unicode可以理解为抽象层。encode是编码,即从unicode格式到二进制的编码格式如utf-8、gb2312等。decode是解码,即从二进制编码格式到unicode编码格式。
数据结构与算法之快速排序算法
最优时间复杂度:O(nlogn)
最坏时间复杂度:O(n2)
稳定性:不稳定
代码
def quick_sort(alist, start, end):
"""快排算法"""
left = start
right = end
mid = alist[start]
if start >= end:
return
while left < right:
# 与基准值mid比较,如果alist[right]大于mid,指针向左移动
while alist[right] >= mid and left < right:
right -= 1
alist[left] = alist[right]
# 与基准值mid比较,如果alist[left]小于mid,指针向右移动
while alist[left] < mid and left < right:
left += 1
alist[right] = alist[left]
alist[left] = mid
# 递归
quick_sort(alist, start, left-1)
quick_sort(alist, left+1, end)
if __name__ == '__main__':
li = [54, 26, 93, 77, 77, 31, 44, 55, 20]
print(li)
quick_sort(li, 0, len(li)-1)
print(li)
Python super() 函数
super() 函数是用于调用父类(超类)的一个方法。
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。
python2代码实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class FooParent(object):
def __init__(self):
self.parent = 'I\'m the parent.'
print ('Parent')
def bar(self,message):
print ("%s from Parent" % message)
class FooChild(FooParent):
def __init__(self):
# super(FooChild,self) 首先找到 FooChild 的父类(就是类 FooParent),然后把类B的对象 FooChild 转换为类 FooParent 的对象
super(FooChild,self).__init__()
print ('Child')
def bar(self,message):
super(FooChild, self).bar(message)
print ('Child bar fuction')
print (self.parent)
if __name__ == '__main__':
fooChild = FooChild()
fooChild.bar('HelloWorld')
文件夹中的__init__
将文件夹目录变成python包
装饰器
通用装饰器
# 装饰器set_func
def set_func(func):
print('开始装饰')
def call_func(*args, **kwargs):
print ('相关业务')
return func(*args, **kwargs)
return call_func
@set_func # 此时相当于test = set_func(test)
def test(num):
print('测试装饰器')
return 'ok'
test(100)
多个装饰器装饰同一个函数,注意装饰顺序
# 装饰器1 set_func1
def set_func1(func):
def call_func(*args, **kwargs):
return '<h1>' + func(*args, **kwargs) + '<h1>'
return call_func
# 装饰器2 set_func2
def set_func2(func):
def call_func(*args, **kwargs):
return '<td>' + func(*args, **kwargs) + '</td>'
return call_func
@set_func1
@set_func2 # 此时相当于test = set_func(test)
def test():
return 'ok'
print(test())
# 显示结果
<h1><td>ok</td><h1>
__new__实现单例模式
单例模式:不管做了多少次实例化操作,都只创建一个对象。
魔法方法__new__:当创建实例对象时,先调用__new__方法,创建对象,分配内存空间,然后才会进行调用__init__方法进行初始化
class Singleton(object):
'''用__new__实现单例模式'''
# 定义类属性,用于存放实例
__instance = None
def __new__(cls, *args, **kwargs):
if cls.__instance is None:
# 继承父类,创建一个对象,即分配内存地址
cls.__instance = super().__new__(cls)
# __new__魔法方法中必须有返回值
return cls.__instance
# 创建实例对象
p1 = Singleton()
p2 = Singleton()
# 输出结果
print(p1)
print(p2)
# 显示结果,只创建了一个对象
# <__main__.Singleton object at 0x00000207618E91D0>
# <__main__.Singleton object at 0x00000207618E91D0>
迭代器和生成器
如何判断一个对象是否可以迭代 isinstance
from collections import Iterable
iter = isinstance([], Iterable)
print(iter)
可迭代对象
可迭代对象通过__iter__方法向我们提供一个迭代器,我们在迭代一个可迭代对象的时候,实际上就是先获取该对象提供的一个迭代器,然后通过这个迭代器来依次获取对象中的每一个数据.
那么也就是说,一个具备了__iter__方法的对象,就是一个可迭代对象。
迭代器
一个实现了__iter__方法和__next__方法的对象,就是迭代器
可迭代对象和迭代器
class MyList(object):
"""自定义的一个可迭代对象"""
def __init__(self):
self.items = []
def add(self, val):
self.items.append(val)
def __iter__(self):
myiterator = MyIterator(self)
return myiterator
class MyIterator(object):
"""自定义的供上面可迭代对象使用的一个迭代器"""
def __init__(self, mylist):
self.mylist = mylist
# current用来记录当前访问到的位置
self.current = 0
def __next__(self):
if self.current < len(self.mylist.items):
item = self.mylist.items[self.current]
self.current += 1
return item
else:
raise StopIteration
def __iter__(self):
return self
if __name__ == '__main__':
mylist = MyList()
mylist.add(1)
mylist.add(2)
mylist.add(3)
mylist.add(4)
mylist.add(5)
for num in mylist:
print(num)
线程和进程
多线程共享全局变量,多进程不能共享全局变量
线程类
import threading
import time
class Mythread(threading.Thread):
"""线程类"""
def run(self):
for i in range(3):
time.sleep(1)
print('线程类')
self.login()
self.register()
def login(self):
print('登录')
def register(self):
print('注册')
if __name__ == "__main__":
t = Mythread()
t.start()
[python]一些常用的python知识总结的更多相关文章
- python 字符串常用操作方法
python 字符串常用操作方法 python 字符串操作常用操作,如字符串的替换.删除.截取.赋值.连接.比较.查找.分割等 1.去除空格 str.strip():删除字符串两边的指定字符,括号的写 ...
- Python学习常用的好网站
以下总结出自己在学习python期间常用的网址或者资源,其中包括很多人的博客,方便自己从这个入口查找资源. 1.https://www.liaoxuefeng.com/wiki/00143160895 ...
- 我的Python笔记补充:入门知识拾遗
声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 入门知识拾遗 一.bytes类型 二.三元运算 1 result = 值1 if 条件 else ...
- 【转】python 历险记(四)— python 中常用的 json 操作
[转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...
- python 历险记(四)— python 中常用的 json 操作
目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...
- 2017数据科学报告:机器学习工程师年薪最高,Python最常用
2017数据科学报告:机器学习工程师年薪最高,Python最常用 2017-11-03 11:05 数据平台 Kaggle 近日发布了2017 机器学习及数据科学调查报告,针对最受欢迎的编程语言.不同 ...
- Python的常用库
读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz写的最富盛名的http库.每个Python程序员都 ...
- python算法常用技巧与内置库
python算法常用技巧与内置库 近些年随着python的越来越火,python也渐渐成为了很多程序员的喜爱.许多程序员已经开始使用python作为第一语言来刷题. 最近我在用python刷题的时候想 ...
- python【1】-基础知识
1.简介 python是一种解释性的.面向对象的.带有动态语义的高级程序设计语言. 廖雪峰网站:http://www.liaoxuefeng.com/wiki/001374738125095c955c ...
随机推荐
- Zookeeper 学习笔记之 节点个数
zookeeper的节点配置的个数推荐是奇数个这是为什么呢? 选举机制 两种情况无法选出leader: 整个集群只有2台服务器(注意不是只剩2台,而是集群的总节点数为2) 整个集群超过半数机器挂掉. ...
- .NET斗鱼直播弹幕客户端(上)
现在直播平台由于弹幕的存在,主播与观众可以更轻松地进行互动,非常受年轻群众的欢迎.斗鱼TV就是一款非常流行的直播平台,弹幕更是非常火爆.看到有不少主播接入弹幕语音播报器.弹幕点歌等模块,这都需要首先连 ...
- Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用
前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...
- .Net Core下使用HtmlAgilityPack解析采集互联网数据
HtmlAgilityPack应该算是.Net下最好用的html解析库了. 因为最近帮朋友采集一些数据,在nuget里面搜索了好几个库,最后决定就用HtmlAgilityPack.并简单的记录下使用的 ...
- 洛谷 1552 [APIO2012]派遣
题目背景 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. 题目描述 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者都有且仅有一个上级.为保密 ...
- 你的火狐很慢吗? - Firefox启动和运行速度优化
最近刚开始体验firefox,发现了一些优势和缺点,无敌的扩展确实带来的是功能上的享受,可随之而来的问题便是太多的插件和主题导致ff启动如龟速,比起IE和TW都有不小的差距,因此特意搜集来一些关于启动 ...
- JVM之内存结构详解
对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug.同时,JVM也是面试环节的中重灾区.今天开始,<JVM详解>系列开启,带大家深入了解JVM相 ...
- Get https://172.18.255.243:6443/api/v1/namespaces/kube-system/configmaps/kubelet-config-1.12: dial tcp 172.18.255.243:6443: i/o timeout
问题描述 使用外网加入集群的时候报如下错误: Get https://172.18.255.243:6443/api/v1/namespaces/kube-system/configmaps/kube ...
- Halcon一日一练:阈值分割的几个算子
threshold(Image:Region:MinGray:MaxGray:) 功能:得到灰度值在最小与最大这间的那些部分.其返回仍然是一个区域. MinGray<MaxGray. 这个算子可 ...
- opencv::sift特征提取
SIFT特征检测介绍 SIFT(Scale-Invariant Feature Transform)特征检测关键特性: -建立尺度空间,寻找极值 -关键点定位(寻找关键点准确位置与删除弱边缘) -关键 ...