Pthon知识积累,遇到的各种python问题汇总

json.dumps()和json.loads()是json格式处理函数

  1. json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串)
  2. json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典)
  3. https://www.json.cn/ json解析网站

python2与python3编码

  1. python2默认以ASCII编码,python默认为utf-8
  2. #-- coding:utf-8 -- 申明编码
  3. 字符串是由字符构成,字符在计算机硬件中通过二进制形式存储,这种二进制形式就是编码。如果直接使用 “字符串↔️字符↔️二进制表示(编码)” ,会增加不同类型编码之间转换的复杂性。所以引入了一个抽象层,“字符串↔️字符↔️与存储无关的表示↔️二进制表示(编码)” ,这样,可以用一种与存储无关的形式表示字符,不同的编码之间转换时可以先转换到这个抽象层,然后再转换为其他编码形式。在这里,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知识总结的更多相关文章

  1. python 字符串常用操作方法

    python 字符串常用操作方法 python 字符串操作常用操作,如字符串的替换.删除.截取.赋值.连接.比较.查找.分割等 1.去除空格 str.strip():删除字符串两边的指定字符,括号的写 ...

  2. Python学习常用的好网站

    以下总结出自己在学习python期间常用的网址或者资源,其中包括很多人的博客,方便自己从这个入口查找资源. 1.https://www.liaoxuefeng.com/wiki/00143160895 ...

  3. 我的Python笔记补充:入门知识拾遗

    声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 入门知识拾遗 一.bytes类型 二.三元运算 1 result = 值1 if 条件 else ...

  4. 【转】python 历险记(四)— python 中常用的 json 操作

    [转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...

  5. python 历险记(四)— python 中常用的 json 操作

    目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...

  6. 2017数据科学报告:机器学习工程师年薪最高,Python最常用

    2017数据科学报告:机器学习工程师年薪最高,Python最常用 2017-11-03 11:05 数据平台 Kaggle 近日发布了2017 机器学习及数据科学调查报告,针对最受欢迎的编程语言.不同 ...

  7. Python的常用库

    读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz写的最富盛名的http库.每个Python程序员都 ...

  8. python算法常用技巧与内置库

    python算法常用技巧与内置库 近些年随着python的越来越火,python也渐渐成为了很多程序员的喜爱.许多程序员已经开始使用python作为第一语言来刷题. 最近我在用python刷题的时候想 ...

  9. python【1】-基础知识

    1.简介 python是一种解释性的.面向对象的.带有动态语义的高级程序设计语言. 廖雪峰网站:http://www.liaoxuefeng.com/wiki/001374738125095c955c ...

随机推荐

  1. Spring入门(十五):使用Spring JDBC操作数据库

    在本系列的之前博客中,我们从没有讲解过操作数据库的方法,但是在实际的工作中,几乎所有的系统都离不开数据的持久化,所以掌握操作数据库的使用方法就非常重要. 在Spring中,操作数据库有很多种方法,我们 ...

  2. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):在 .NET Core 2.0/3.0 中使用 MessageHandler 中间件

    概述 在 <Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler> 中我们已经了解了 MessageHandler 的运行原理和使用方法 ...

  3. Spring Boot2 系列教程(十一)Spring Boot 中的静态资源配置

    当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,之前老有小伙伴在微信上问松哥 Spring Boot 中的静态资源加载问题:"松哥,我的 HTML 页面好像没有样 ...

  4. Android仿美团地址选择

    最近做了这个功能,分享一下,用的是百度地图api,和美团外卖的地址选择界面差不多,也就是可以搜索或者滑动地图展示地址列表给用户选择,看下效果图先. 文章重点 1.展示地图并定位到“我”的位置2.滑动地 ...

  5. 内网转发之reGeorg+proxifier

    先将reGeorg的对应脚本上传到服务器端,reGeorg提供了PHP.ASPX.JSP脚本,直接访问显示“Georg says, 'All seems fine'”,表示脚本运行正常. 运行 pyt ...

  6. javascript 对象和字符串互转

    Object  =>  String : console.log(JSON.stringify(e)); String => Object : JSON.parse(str)

  7. [HDU5955]Guessing the Dice Roll

    Problem Description There are N players playing a guessing game. Each player guesses a sequence cons ...

  8. ‎Cocos2d-x 学习笔记(15.3) EventDispatcher DirtyFlag 脏标记

    1. 定义 用枚举定义脏标记的4种类型. enum class DirtyFlag { NONE = , FIXED_PRIORITY = << , SCENE_GRAPH_PRIORIT ...

  9. Netty - 粘包和半包(上)

    在网络传输中,粘包和半包应该是最常出现的问题,作为 Java 中最常使用的 NIO 网络框架 Netty,它又是如何解决的呢?今天就让我们来看看. 定义 TCP 传输中,客户端发送数据,实际是把数据写 ...

  10. Halcon一日一练:阈值分割的几个算子

    threshold(Image:Region:MinGray:MaxGray:) 功能:得到灰度值在最小与最大这间的那些部分.其返回仍然是一个区域. MinGray<MaxGray. 这个算子可 ...