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. 对接第三方服务引起的小思考-回调和Sign算法

    背景 ​ 最近在对接一个同事写的支付公用模块,然后对第三方服务引起一两个小思考. 思考 回调 来看看我们同事是如何做回调的. 首先,请求支付接口的时候,将回调URL作为请求body的一个参数[不加密] ...

  2. k8s运维记 - 如何让部署到k8s的kong网关托管自定义静态资源?

    目的 使用kong作为目录/data/reports的静态资源服务器,为了测试,已于目录/data/reports下创建文件report.html,如下: <html> <head& ...

  3. C#的FTP服务器源代码

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. JavaEE——JSP开发模式(model1)

    model1开发模式 工作流程: ①浏览器请求,JSP页面接收 ②JSP根据请求和JavaBean进行交互 ③JavaBean进行业务处理,JDBC操纵数据库 ④JSP将请求结果返回浏览器页面 利用m ...

  5. github代码仓库提示:“We found a potential security vulnerability in one of your dependencies”

    问题描述: Github上传代码后出现这样的错误: We found a potential security vulnerability in one of your dependencies. A ...

  6. Node Sass could not find a binding for your current environment: OS X 64-bit with Node.js 10.x

    运行Reac项目报: Node Sass could not find a binding for your current environment: OS X 64-bit with Node.js ...

  7. python 中的一点新知识

    逻辑行与物理行 所谓物理行(Physical Line)是你在编写程序时 你所看到 的内容.所谓逻辑行(Logical Line)是 Python 所看到 的单个语句.Python 会假定每一 物理行 ...

  8. PHP弱性处理0e开头md5哈希字符串缺陷/bug

    PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他 ...

  9. spring源码系列8:AOP源码解析之代理的创建

    回顾 首先回顾: JDK动态代理与CGLIB动态代理 Spring中的InstantiationAwareBeanPostProcessor和BeanPostProcessor的区别 我们得知 JDK ...

  10. JavaScript ES6函数式编程(三):函子

    前面二篇学习了函数式编程的基本概念和常见用法.今天,我们来学习函数式编程的最后一个概念--函子(Functor). 相信有一部分同学对这个概念很陌生,毕竟现在已经有很多成熟的轮子,基本能满足我们日常的 ...