
Python
robch
Stay foolish Stay hungry!
展开
-
Python 装饰器精讲
于是调用 businessA() 将执行新函数,即在 my_decorator()函数中返回的wrapper()函数。wrapper()函数的参数定义是(*args, **kw),因此,wrapper()函数可以接受任意参数的调用。所以,原来的 businessA()函数仍然存在,只是现在同名的 businessA 变量指向了新的函数,如果函数的参数定义是(*args, **kw),表示该函数可以接受任意参数的调用。在wrapper()函数内,首先打印日志,再紧接着调用原始函数。原创 2022-10-13 17:21:12 · 325 阅读 · 0 评论 -
python setup.py 打包发布
平常我们习惯了使用pip来安装一些第三方模块,这个安装过程之所以简单,是因为模块开发者为我们默默地为我们做了所有繁杂的工作,而这个过程就是打包。打包,就是将你的源代码进一步封装,并且将所有的项目部署工作都事先安排好,这样使用者拿到后即装即用,不用再操心如何部署的问题(如果你不想对照着一堆部署文档手工操作的话)。不管你是在工作中,还是业余准备自己写一个可以上传到PyPI的项目,你都要学会如何打包你的项目。Python发展了这么些年了,项目打包工具也已经很成熟了。他们都有哪些呢?............转载 2022-07-31 13:15:09 · 1136 阅读 · 0 评论 -
Python字符串格式化
字符串格式化是我们在使用Python中经常用到的功能。Python为我们提供了四种格式化字符串的方法,分别是%运算符、字符串format方法、格式化字符串字面值以及模板字符串。转载 2022-06-07 11:17:48 · 4657 阅读 · 0 评论 -
DDD浅析项目数据流
DDD(领域驱动设计)总体结构分为四层: Infrastructure(基础实施层),Domain(领域层),Application(应用层),Interfaces(表示层,也叫用户界面层或是接口层),各个层面的作用下面介绍:用户界面(表现层):负责给用户展示信息,并解释用户命令。应用层:该层协调应用程序的活动。不包括任何业务逻辑,不保存业务对象的状态,但能保存应用程序任务过程的状态。3.领域层:这一层包括业务领域的信息。业务对象的状态在这里保存。业务对象的持久化和它们的状态可能会委托给基础设施层原创 2022-04-11 17:38:31 · 1380 阅读 · 0 评论 -
python和 golang 和 java 三大语言中的module、package 的理解
golangPlease refer to: https://blog.youkuaiyun.com/jigetage/article/details/88833811 https://www.jianshu.com/p/c23d90f78d5bgo不同文件之间的相互引用靠包来实现,总结下来就是: 1,文件夹就是包,文件夹名就是包名 2,同一文件夹(包)下的所有文件可以视为同一文件,也就是可以随意拆分或者合并为一个或多个 go 文件都没有影响,文件名对程序也没有影响 3,同一原创 2022-01-29 15:50:38 · 733 阅读 · 0 评论 -
python的虚拟环境的本质,只要导出环境变量即可
python虚拟环境的本质echo "#!/bin/bashexport PATH=$target/bin:\$PATHexport LD_LIBRARY_PATH=$target/lib:\$LD_LIBRARY_PATH" > /tmp/setenv.shmkdir -p ~/.pip && touch ~/.pip/pip.confecho "[global]trusted-host = repos.jd.comindex-url = http://re原创 2021-02-25 20:08:14 · 250 阅读 · 0 评论 -
Pyhon 包下面的 __init__.py 文件和模块文件中的 __all__ 变量
animal 包:/init.py文件代码是在包或者包内模块被引用时执行的,因而可以在其中做一些初始化的工作。修改animal文件夹中__init__.py文件如下animal/__init__.py: print "__init__"from pet import name as pet_name, run as pet_run#from animal.pet import name as pet_name, run as pet_run #from .pet import name转载 2020-10-12 18:28:07 · 367 阅读 · 1 评论 -
python 的 contextmanager 的用法
本文的背景是,想创建一个临时文件名给 with … as … 使用,使用完成后立刻删除临时文件:得到一个临时文件名在 with … as … 的执行体中,使用文件:写入一些内容, 然后解析内容把想要的内容赋值给变量,在退出执行体时把临时文件删除def create_unique_file(filename): version = 0 result_file = filename # if we have to try more than 1000 times, so原创 2020-10-09 18:13:29 · 1905 阅读 · 2 评论 -
Python 导入机制 - import hook
转自http://blog.konghy.cn/2016/10/25/python-import-hook/,这里有好多好文章import hook 通常被译为 探针。我们可以认为每当导入模块的时候,所触发的操作就是 import hook。使用 import 的 hook 机制可以让我们做很多事情,比如加载网络上的模块,在导入模块时对模块进行修改,自动安装缺失模块,上传审计信息,延迟加载等等。理解 import hook 需要先了解 Python 导入模块的过程。一、 导入过程Python 通常使转载 2020-09-23 15:50:00 · 1006 阅读 · 0 评论 -
Pyhon 线程里获取操作系统层面的进程 ID 和 线程 ID,太棒了
python的多线程坑坑不断… …python的threading因为封装的太好, 很多本源的东西在threading对象里是拿不到的. 首先需要说明的是 python threading的name跟ident,这些看起来是线程名字,线程id其实只是个标识,注意是标识而已. 简单过了下threading创建对象及启动线程的代码,发现ident跟pstree查到的线程id是两码事. 该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新http://xiaorui.cc/?p=3转载 2020-09-10 11:01:48 · 1746 阅读 · 0 评论 -
nginx+uWSGI+django 处理请求详解
请求从 Nginx 到 uWSGI 到 django 交互概览作为python web开发,我们首先要弄清楚,到底一个请求过来,发生了什么事,请求的传递是怎么样完成的,由nginx是怎么转发到uwsgi, uwsgi又是怎样把请求传给到我们的框架(django or falsk)由我们自己写的代码处理,返回数据给客户端的。因此我作了以下一个粗略的流程图:在此之前,先确认下概念:uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议以下我会逐个步骤从下往上详细讲解,并附上代码和配原创 2020-08-25 09:52:37 · 806 阅读 · 0 评论 -
Python 操作数据库 MySQL Timed out 和 select 也需要 commit
当用 Python 操作MySQL时,我们经常用的驱动是 mysql.connectorimport mysql.connectorfrom mysql.connector import InterfaceError, OperationalError这里需要强调的是:如果 SQL 执行的是 ALTER 操作,则当客户端程序走到 cursor.execute(sql) 后:如果因为 SQL 返回超时,客户端抛异常然后close cursor 和 conn 最后程序结束。此时登录数据库服务原创 2020-08-19 15:46:22 · 805 阅读 · 0 评论 -
Python 的 daemon 线程的精讲---通透
关于 Python 中的 daemon 的设置说明:https://www.cnblogs.com/xfiver/p/5189732.htmlDaemons are only useful when the main program is running,and it’s okay to kill them off once the other non-daemon threads have exited.Without daemon threads, we have to keep track o原创 2020-06-30 11:51:00 · 2100 阅读 · 0 评论 -
property、getattr 的用法和Django Model 和 dict 的转换
1. 对于可能需要经常访问的对象属性,可以借鉴下面的 getattr 的用法 class TransRule(models.Model): @property def rule_db(self): if not getattr(self, 'rule_dbinfo', None): print '------get the info from the DB------' database = self.src_tab原创 2020-04-30 16:59:29 · 533 阅读 · 0 评论 -
协程 和 线程、函数调用的本质区别
协程和函数调用有什么区别:函数调用是顺序执行的,如果调用2次,每次 sleep 10 秒,则总共休息20秒;如果用协程,调用2次,每次休息 10秒,则总共 10 秒就完成了。所有的协程分享进程的时间片,每个时间点只能有一个协程在执行代码。如果正在执行的某个协程发生 IO 阻塞,则会把其换出,从而去执行其他协程。相当于说“利用IO 阻塞等待的时间去执行其他就绪的协程。# -*- codin...原创 2020-04-29 16:18:07 · 1790 阅读 · 2 评论 -
Base64 你真的理解吗 和 URL百分号
以上例详细解释:比如 bin 应该是一组,而 b 的 ASCII 码是 98 即0x62 或二进制 0110 0010 ,又根据上面说的分组方法,所以去 b 的前 6 个bit 即正好是二进制 0110 00 等于十进制的 24 就是 64 个字符数组中的第24个字符即大写的 Y......转载 2020-03-19 14:08:31 · 589 阅读 · 0 评论 -
datetime 的 isoformat 和 DRF 序列化类的 DateTimeField 的 to_representation 和 auto_now
关于 datetime 的 isoformat ,研究这个的契机是: 工单系统后天改造中发现:该项目中数据库存储的什么值,接口返回的就是什么值,仔细理解这句话(这跟归档项目的行为不一致,归档系统的数据库中存储的是 UTC 时区的时间,但是接口返回的是东八区时间,参数基本一样 TIME_ZONE = 'Asia/Shanghai' USE_TZ = True ,后来发现因为在**归档系统的序列化类里的 DateTimeField 的 to_representation 函数中调用了 enforce_tim原创 2020-03-18 20:44:01 · 888 阅读 · 0 评论 -
logging exception贻笑大方
在 try exception 语句中捕获异常,打印调用栈logging.exception(‘abc’) = logging.error(‘abc’, exc_info=1)import loggingdef test(s): 1/0try: test('0')except StandardError, e: print 'In the StandardErr...原创 2020-03-04 16:04:25 · 1134 阅读 · 1 评论 -
python 查看某个第三方包的依赖包和被依赖包以及指定pip源安装
在某些情况下,我们需要查看第三方包的依赖包和被依赖包:pip show pkg_name 命令输出的 Requires 和 Required-by (archiver_venv)[root@HC-25-28-38 archiver_all]# pip show celery DEPRECATION: Python 2.7 will reach the end of its life on...原创 2020-02-19 12:37:21 · 29154 阅读 · 2 评论 -
Django 源码的 authenticate方法到 import_string
Django 的 import_string 是个小工具哈在自定义的 myself_login(reqeust) 视图函数中有调用到user = authenticate(username=username, password=password)经分析 authenticate 源码的过程,发现 import_string 方法还挺精巧def authenticate(**credenti...原创 2019-12-20 17:31:54 · 153 阅读 · 0 评论 -
Python 全局变量的用法
直奔主题实战 Python 全局变量#!/usr/bin/env python# -*- coding: utf-8 -*-GLOBAL_VAR = 3def hello1(): print 'In the hello' tmp = 1 # 因为函数中也可定义同名的变量,这样局部的变量就覆盖了全局的变量 GLOBAL_VAR = 30 GLOBAL...原创 2019-08-15 16:13:04 · 1015 阅读 · 0 评论 -
Python 类继承之多继承 和 mixin 的用法
本文主要是展示 python 中 mixin 的用法:直接上代码class Displayer(object): def get_name(self): return 'robert'class LoggerMixin(object): def display(self): print "In the display of LoggerMix...原创 2019-08-15 20:10:39 · 1114 阅读 · 0 评论 -
Pyhton 类继承之 super 的用法和 MRO 方法解析顺序 1
本文是介绍 Python 中继承或多继承时 super 的工作原理和方法解析顺序(Method Resolution Order, MRO), 从根本上理解super(cls, inst) 背后到底是什么意思和 MRO。在阅读相关代码时,一定要切记当前 self 是谁,类型是什么,继承关系是什么,MRO是什么, 这样才能准确把握代码的调用流程。在 demo 之前,先说两个知识点:1. MRO 方法解析顺序对于你定义的每一个类,Python 会计算出一个方法解析顺序(Method Resolu原创 2019-08-15 21:06:47 · 233 阅读 · 0 评论 -
Pyhton 类继承之 self.method() 的方法解析顺序
示例代码:class Base(object): def __init__(self): print 'enter class base' print 'In class Base: self = {0}'.format(self) print 'leave class base' def display(self): ...原创 2019-08-16 11:33:05 · 288 阅读 · 0 评论 -
Pyhton 类继承之 super 的用法和 MRO 方法解析顺序 2
本文主要讨论的是下面的继承关系:类的继承关系: Base | A B \ / MyClass和 [上篇文章](https://blog.youkuaiyun.com/cpxsxn/article/details/99656157) 不一样的地方是 Class B 不继承 Class Base ,所以看到 Class MyClass 的 MRO 发生了变化代...原创 2019-08-16 11:16:38 · 112 阅读 · 0 评论 -
Python socket 访问网站发送 HTTP POST请求,从而深刻理解 HTTP 协议
用最原始的包 socket 来居然可以访问网站模拟发送 POST 请求,这是对最大的收获。更进一步的参考 https://www.jianshu.com/p/f196c74e72ddimport socketinput_dict = {'name':'cheng', 'age':23}s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s....原创 2019-08-02 12:14:46 · 6576 阅读 · 1 评论 -
Python argparse
介绍 python argparse 模块的用法:# 使用步骤:# 1:import argparse # 导入该模块# 2:parser = argparse.ArgumentParser() # 创建一个解析对象# 3:parser.add_argument() # 向该对象中添加你要关注的命令行参数和选项,每一个add_argument方法对应一个你要关注的参数或选项# 4:...原创 2019-09-11 14:44:30 · 114 阅读 · 0 评论 -
Python 类继承之类变量和类方法的用法
本页主要讨论python中的类继承时的类变量的套路class Displayer(object): name = None @classmethod def get_name(cls): print 'In the get_name' print 'cls.name = {0}'.format(cls.name) ------- 有...原创 2019-08-15 15:25:57 · 875 阅读 · 0 评论