
Python
文章平均质量分 54
shangboerds
淡薄以明志,宁静而致远
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Python 本地线程变量
– Start假设我们有两个线程随机转账,我们增加了审计功能。from threading import Thread, Lockimport threadingfrom random import randint# 定义账户类class Account: def __init__(self, debit): self.debit = debit ...原创 2018-10-10 22:25:21 · 1638 阅读 · 0 评论 -
Python 多进程 -- multiprocessing 模块
– Start如何构造进程?构造器multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)方法1:自定义进程类,重写 run 方法from multiprocessing import Process# 自定义进程类class MyProcess...原创 2018-10-12 20:22:32 · 702 阅读 · 0 评论 -
Python 格式化日期
– Start所谓格式化指的是日期和字符串的相互转换。格式格式 意义 例子%y 年 00, 01, …, 99%Y 年 2013, 2014, …, 9998, 9999%G 年 ...原创 2018-09-23 08:34:48 · 5627 阅读 · 0 评论 -
Python 日期模块 -- timedelta
– Startfrom datetime import datetime, date, timedelta# 构造 timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)td = timedelta(1)d1 = date(2018, 9, 22)d2 = d...原创 2018-09-23 07:44:21 · 2327 阅读 · 0 评论 -
Python 日期模块 -- timezone
– Startfrom datetime import datetime, timezone, timedelta# 构造 timezone(offset, name=None)china_tz = timezone(timedelta(hours=8))china_tz = timezone(timedelta(hours=8), 'Asia/Shanghai')# 类属性p...原创 2018-09-23 07:04:52 · 4254 阅读 · 0 评论 -
Python 日期模块 -- datetime
– Startimport time as xtimefrom datetime import datetime, date, time, timezone, timedeltachina_tz = timezone(timedelta(hours=8), 'Asia/Shanghai')# 构造 datetime(year, month, day, hour=0, minute=0,...原创 2018-09-22 21:34:46 · 2860 阅读 · 0 评论 -
Python 日期模块 -- time
– Startfrom datetime import time# 构造 time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)t = time(16, 28, 22)t = time.fromisoformat('16:28:22')# 类属性print(time.min) ...原创 2018-09-22 20:12:07 · 358 阅读 · 0 评论 -
Python 函数式编程 -- itertools 模块
– Startitertools 模块提供了非常多的方法。Infinite iteratorsIteratorArgumentsResultsExamplecount()start, [step]start, start+step, start+2*step, …count(10) --> 10 11 12 13 14 …cycle()pp0, ...原创 2018-10-04 21:57:11 · 668 阅读 · 0 评论 -
Python 列表推导
– Start什么是列表推导列表推导用来构造一个列表,可以包含表达式,for 语句和 if 语句。列表推导假设我们要生成 0 到 9 的数字列表该怎么办呢?很简单,看看下面的代码吧。my_list = list(range(10))那我们要生成 0 到 9 的 2 次方列表该怎么办呢?也不难,可以这么写。my_list = []for i in range(10): my...原创 2018-09-21 20:57:10 · 249 阅读 · 0 评论 -
Python 正则表达式
– Start什么是正则表达式如果你还不知道什么是正则表达式或者不是很清楚,请先阅读 正则表达式精萃。search 方法import re# Pattern 表示一个正则表达式# 可以通过 compile 静态方法实例化 Pattern 对象# 在实例化的同时我们可以不指定或指定一个或多个全局匹配模式# 下面的代码构建了用来匹配固定电话号码的正则表达式, 采用不区分大小写和多行模...原创 2018-09-21 20:36:27 · 324 阅读 · 0 评论 -
Python GIL 和线程缺陷
– StartGIL 的全称是 Global Interpreter Lock 的缩写,是全局解释器锁,因为有了这把超级大锁,导致 Python 几乎就是个单线程程序,甚至有人测试 Python 的多线程还不如单线程快,为什么要有 GIL?为什么不干掉呢?这里有历史原因,大量的库依赖这种特性,怎么干掉?为此,Python 有引入了多进程,下节我们详细介绍多进程。– 更多参见:Python 精萃...原创 2018-10-11 21:42:16 · 1089 阅读 · 0 评论 -
Python 线程池
– Start我们使用 ThreadPoolExecutor 定义线程池。任务没有返回值import threadingimport timefrom concurrent.futures import ThreadPoolExecutordef my_task(): for i in range(3): print(f'{threading.current...原创 2018-10-11 20:00:51 · 1392 阅读 · 0 评论 -
Python if 表达式
– Start我们先来看一段 if 语句代码。score = 60if score >= 80: grade = '优秀'elif score >= 60: grade = '及格'else: grade = '不及格'print(grade)事实上,我们还可以这么写。score = 60grade = '优秀' if score >= 80 e...原创 2018-09-26 21:16:31 · 6964 阅读 · 2 评论 -
Python 函数式编程 -- functools 模块
– Startfunctools 模块为 higher-order 函数服务,什么是higher-order 函数?其实类似于装饰器,higher-order 函数返回一个函数。functools.cmp_to_key将 Python 2 的比较函数转换为 Python 3 的 key 函数。@functools.lru_cache如果一个函数非常耗时,同时,同样的参数总是得到同样的结果...原创 2018-10-06 16:44:03 · 409 阅读 · 0 评论 -
Python 函数式编程 -- operator 模块
– Start由于函数式编程需要传入函数,而加减乘除等是操作符,所以 Python 定义了 operator 模块来封装操作符为函数。OperationSyntaxFunctionAdditiona + badd(a, b)Concatenationseq1 + seq2concat(seq1, seq2)Containment Testobj in...原创 2018-10-06 20:39:58 · 540 阅读 · 0 评论 -
Python 变量作用域
– Start关于变量,Python 有个著名的 LEGB 规则。Local - 局部变量def outer(): def inner(): v = 1 # Local print(f'v = {v}') inner()outer()Enclosing - 闭包变量def outer(): v = 1 # Enclosi...原创 2018-10-10 21:56:04 · 220 阅读 · 0 评论 -
NumPy 精萃
– Start什么是 NumPy?NumPy 是一个外部模块,它提供了一个多维数组(ndarray)数据类型,以及关于多维数组的操作,NumPy 已经成为其他机器学习模块的基础。如何创建多维数组?待续– 更多参见:Python 精萃– 声 明:转载请注明出处– Last Updated on 2018-10-17– Written by ShangBo on 2018-10-17...原创 2018-10-17 06:37:28 · 851 阅读 · 0 评论 -
Python 线程交互
– Start条件变量from threading import Threadfrom threading import Condition# 条件变量condition = Condition()data = list()def producer(): with condition: for i in range(10): # ...原创 2018-10-09 22:57:34 · 1382 阅读 · 0 评论 -
Python 进程 vs线程
– Start什么是进程?单个 CPU 一次只能运行一个任务,任一时刻,CPU 总是运行一个进程,其他进程处于非运行状态。什么是线程?一个进程可以包含多个线程,它们共享内存。没懂?看这里– 更多参见:Python 精萃– 声 明:转载请注明出处– Last Updated on 2018-10-09– Written by ShangBo on 2018-10-09– End...原创 2018-10-09 22:08:47 · 247 阅读 · 0 评论 -
Python 面向对象编程2
– Startobject 类object 类是所有类的父类,它定义了好多方法,重写这些方法我们可以定制自己的类。比较操作符重写我们可以比较两个数字的大小,那我们自定义的类可不可以呢?其实很简单,我们只需要重写 object 类中定义的比较方法即可。class MyNumber: # 初始化属性 def __init__(self, num): self.num = num...原创 2018-09-29 20:28:00 · 378 阅读 · 0 评论 -
Python 迭代器 -- iterator
– Start什么是迭代器?迭代器其实是一个规范,实现了这个规范的类就可以在 for 循环中使用,如我们之前学的列表,元组等。自定义迭代器下面的例子定义了一个随机迭代器。import randomclass MyContainer: def __init__(self, *elements): self._elements = list(elements) # 自定义迭代器...原创 2018-09-29 18:26:19 · 411 阅读 · 0 评论 -
Python 进程池
– StartProcessPoolExecutor我们使用 ProcessPoolExecutor 定义进程池。任务没有返回值import multiprocessingfrom concurrent.futures import ProcessPoolExecutorimport timedef my_task(): for i in range(3): ...原创 2018-10-14 16:14:48 · 461 阅读 · 1 评论 -
Python 进程同步
– Start由于进程有独立的内存空间,通常我们是不需要同步的,不过上节课我们也讲过可以通过共享内存(Shared memory)和服务器进程(Server process)的方式共享数据,所以有时候我们还是需要同步的。那 Python 支持哪些同步方式呢?其实和线程同步完全相同,使用起来也一样。multiprocessing.Lock 类multiprocessing.RLock 类mu...原创 2018-10-14 14:37:33 · 835 阅读 · 0 评论 -
Python 进程共享变量
– Start进程有独立的内存我们先来看一个例子。from multiprocessing import Processx = 1def my_task(): global x x += 1 # 在进程中修改 x print(f'x={x}')if __name__ == '__main__': p1 = Process(target=my_...原创 2018-10-14 14:07:12 · 3008 阅读 · 0 评论 -
Python 进程交互
– Start同步队列from multiprocessing import Process, Queuedef producer(data): for i in range(10): # 发送消息,如果 Queue 满了,则阻塞 msg = f'message {i}' data.put(msg) print(f'...原创 2018-10-14 08:41:30 · 551 阅读 · 0 评论 -
Python 线程同步
– Start当多个线程对同一个对象进行读写操作时将引发并发问题, 学过数据库的人都知道并发将导致脏读和丢失更新等错误, 本文将介绍 Python 是如何解决并发问题的.Lock 类from threading import Threadfrom threading import Lock# 定义账户类class Account: def __init__(self, de...原创 2018-10-06 23:45:55 · 912 阅读 · 0 评论 -
Python 多线程 -- threading 模块
– Start什么是多线程?多线程指的是同时执行多个任务。线程与进程的区别一个进程可以有多个线程,线程之间可以共享内存, 而每个进程有自己独立的内存空间.如何构造线程?构造器threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)方法1:自定义线程类,重写 ru...原创 2018-10-06 23:05:18 · 448 阅读 · 0 评论 -
Python 函数式编程
– Start什么是函数式编程?其实函数式编程和 SQL 语句很像,它们操作的对象是一个集合。最开始,几乎所有的语言都是面向过程的,而 SQL 是面向集合的,后来由于业务需求越来越复杂,各大数据库厂商推出了面向过程的 SQL,如 PL/SQL。同时各种编程语言也开始支持面向集合的编程方式,即函数式编程。过程式编程 vs 函数式编程下面的例子演示过程式和函数式编程来求最大值,可以看到函数式编...原创 2018-10-02 19:04:51 · 330 阅读 · 0 评论 -
Python 读写文件
– Starttry: file_name = r'D:\0_Shangbo\Dev\Python\python_work\test.py'; f = open(file_name) # 以只读方式打开文件 content = f.read() # 一次读取整个文件 print(content)finally: f.close() # 文件必须关闭file_name = r'...原创 2018-09-20 07:10:45 · 685 阅读 · 0 评论 -
Python 函数注解
– Start当我们定义函数的时候,参数是不需要指定类型的,如果你要调用别人写的函数,而该函数又没有文档说明,你如何知道要传递什么类型的参数呢?也需只能看源代码了。好在 Python 还提供了一种机制,可以在定义函数的同时指定参数类型,称之为函数注解。def f(name: str, age: int = 18) -> str: print("Annotations:", f._...原创 2018-09-19 06:53:48 · 1661 阅读 · 0 评论 -
Python 数据类型 -- 布尔型
– Start布尔型代表真假值,通常用在条件判断和循环语句中,Python 定义了常量 True 和 Flase 代表真假。r = Truer = Falsex = 1y = 2z = 3if x > y: # 大于 print('x > y')if x >= y: # 大于等于 print('x >= y'原创 2018-08-19 21:21:02 · 19785 阅读 · 3 评论 -
Python 数据类型 -- 集合
– Start什么是集合?同列表类似,集合用来存储一系列的值,但是它不允许有重复值。如何构造集合?a = {1, 2, 3, 4, 5}b = set({1, 2, 3, 4, 5})c = set([1, 2, 3, 4, 5]) # 列表转为集合d = set((1, 2, 3, 4, 5)) # 元组转为集合e = set('abcd') # 字符串转为集...原创 2018-08-19 19:40:47 · 330 阅读 · 0 评论 -
Python 数据类型 -- 字典
– Start什么是字典?字典是存储键值对的数据结构。如何构造字典?假设我们要构建字典 {“one”: 1, “two”: 2, “three”: 3},Python 提供如下几种方法。a = {'one': 1, 'two': 2, 'three': 3}b = dict({'three': 3, 'one': 1, 'two': 2})c = dict(one=...原创 2018-08-19 18:33:37 · 315 阅读 · 0 评论 -
Python 装饰器
– Start 作为一个程序员,你一定调查过 bug,定位 bug 是非常困难的,尤其是没有足够日志的情况下。所以,通常我们会在方法的开头和结尾打印出参数和返回值,但是这样就增加了我们的工作量,有没有更好的办法呢?Python 装饰器提供了非常好的解决方案。 下面我们来定义一个 logger 装饰器。# logger 是个装饰器,它的参数是一个函数,在它的内部定义了一个函数包装目标函数...原创 2018-08-26 13:34:49 · 203 阅读 · 0 评论 -
Python unittest
– Start 开发和测试如影随形,一段代码不经过测试,是无法保证正确性的。Python 提供了 unittest 模块,它用来做单元测试。假设我们有下面这个工具类。class Util(): def trim(s): return s.strip()下面我们来测试上面的代码。import unittestfrom Util import Util...原创 2018-08-26 12:44:32 · 503 阅读 · 0 评论 -
Python 数据类型 -- 元组
– Start#!/usr/bin/python# 元组和列表的唯一区别是,我们不可以对元组中的元素修改# 元组可以存储一系列的值,使用 () 定义my_tuple = ('a','b','c')tuple1 = tuple(range(1,100))# 元组可以存储不同类型的值my_tuple = ('a','b','c','test',[1,2,3])# 元组可以...原创 2018-08-19 10:45:58 · 568 阅读 · 0 评论 -
Python 数据类型 -- 列表
– Start#!/usr/bin/python# 列表可以存储一系列的值,使用 [] 定义my_list = ['a','b','c']# 列表可以存储不同类型的值my_list = ['a','b','c','test',[1,2,3]]# 列表可以通过索引访问my_list[0] # 取出第一个元素my_list[1] # 取出第二个元素# 还可以使用反向索...原创 2018-08-18 21:23:10 · 329 阅读 · 0 评论 -
Python 数据类型 -- 字符串
– Start#!/usr/bin/python# 定义字符串有单引号和双引号两种方式name = "Shangbo"hello = 'Hello World'# 字符串实际上是字符序列,可以通过索引访问hello[0] # 取出第一个字符 Hhello[1] # 取出第二个字符 e# 还可以使用反向索引hello[-1] # 取原创 2018-08-18 20:43:43 · 284 阅读 · 0 评论 -
Python 精萃
– Start Python 简介 Python 注释 Python 变量和对象 Python 数字对象 – 声 明:转载请注明出处 – Last Updated on 2017-04-23 – Written by ShangBo on 2017-04-04 – End原创 2017-04-04 22:09:01 · 2727 阅读 · 0 评论 -
Python 数据类型 -- 数字
– Start#!/usr/bin/pythonimport decimalimport fractions# 定义整数:没有精度限制,具有无穷大小n = 255n = 0b11111111; # 二进制以 0b 开头n = 0o377; # 八进制以 0o 开头 n = 0xFF; # 十六进制以 0x 开头, a,b,c,d,e,f 不区分大小写print(bin(255)) #原创 2017-04-23 22:14:18 · 790 阅读 · 0 评论