Sunday Blog

人生是一场刻意练习

Python多线程join( )使用

python Multithreading Join

Python多线程与多进程中join()方法的效果是相同的。 join():在子线程完成运行之前,这个子线程的父线程将一直被阻塞。 Daemon

Python中的描述器、反射

Python Descriptor

描述器 什么是描述器? 一个类中定义了如下一个或多个魔术方法,这个类的实例就是描述器: __get__,__set__,__delete__ 通常需

Python 装饰式和偏函数

Python Decorator and Partial

装饰器 要讲清楚装饰器,首先要知道一些前置概念。下文涉及到这些概念的地方,会展开讲述。 什么是装饰器? 装饰器是一种AOP(面向切面编程)的设计模

Python 装饰器

Python Decorator

无参装饰器 import datetime import time import functools def logger(fn): @functools.wraps(fn) #wrap解决文档、名称问题 def wrapper(*args,**kwargs): """+++Wrapper Function+++""" start=datetime.datetime.now() ret = fn(*args,**kwargs) #add delta=(datetime.datetime.now()-start).total_seconds() print(fn.__name__,delta) return ret return wrapper @logger # add=logger(add) === add=wrapper def add(x,y): """Add Function""" time.sleep(1) return x+y print(add(4,5)) print(add.__name__,add.__doc__) add 1.004984 9 add Add Function 带参装饰器

Python shutil模块

Python Shutil

文件拷贝:使用打开2个文件对象,源文件读取内容,写入目标文件中来完成拷贝过程。但是这样丢失stat数据信息、权限等) Python提供了一个方

正则表达式

Regex

基本语法 代码 说明 . 匹配除换行符外任意一个字符 [abc] 字符集合,匹配集合中包含的任意一个字符 [^abc] 字符集合,匹配非集合内的任意一个字符 [a-z] 字符集合范围,匹

Python Path 路径

Python Path

os.path from os import path # 拼接路径 p=path.join('/etc','sysconfig','network') # 路径是否存在 print(path.exists(p)) # 分割 (元组: dirname和basename) print(path.split(p)) # 路径和基名 print(path.dirname(p),path.basename(p)) # 当前路径 print(path.abspath(""),path.abspath('.')) # windows print(path.splitdrive('o:/tmp/test')) #windows 文件根目录 p1=path.abspath(__file__) #父文

Python列表解析式和lambda

List Comprehensions And Lambda

列表解析式 [ ] >>> print([i for i in range(10)]) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> print([i for i in range(10) if i%2]) [1, 3, 5, 7, 9] >>> print([i for i in range(10) if i%2 == 1]) [1, 3, 5, 7, 9] >>> print([i for i in range(1,10,2)]) [1, 3, 5, 7, 9] >>> print([i for i in range(20) if i%2==0

Python dict 字典

Python Dict

Dict即Dictionary,也称为mapping. Python中,字典由任意个元素构成的集合,每-个元素称为Item, 也称为Entry。

Python 阶乘

Factorial

0!=1 1!=1 2!=1*2 3!=1*2*3 4!=1*2*3*4 ... for def factorial(n): p=1 for i in range(1,n): p*=i return p print(factorial(5)) 120 for递归 def factorial(n,p=1): if n==1: return p p*=n return factorial(n-1,p) print(factorial(6)) 720 def factorial(n,p=1): return p if n<2 else factorial(n-1,p*n) print(factorial(5)) 公式法 def factorial(n): if n< 2: return n return n*factorial(n-1) print(factorial(5)) 120

Python斐波那契数列

Fibonacci Sequence

斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89… 这个数列从第3项开始,每一项都等于前两项

Python 闭包

Python Closures

闭包 def counter(): c=[0] def inc(): c[0]+=1 return c[0] return inc # 函数对象 foo=counter() print(foo(),foo(),foo()) c=100 print(foo()) 1 2 3 4 return inc() 不可以用(),返回结果,会消亡 counter生成c和inc,消亡,但c inc被foo引

插入排序算法

Insertion Sort

左边为有序区,右边为无序区 从第二个元素跟第一个元素(假定为有序)对比, 如果当前元素大于新元素,将扫描元素移动到下一位 然后向左移位跟左有序区对

Python Datetime 时间函数

Python Datetime

import datetime datestr ='2021-06-10 15:16:08' dt = datetime.datetime.strptime(datestr, '%Y-%m-%d %H:%M:%S') print(type(dt), dt) print(dt.strftime( '%/%m/%d-%H:%M:%S')) # 输出为字符串 print("{:%Y/%m/%d %H:%M:%S}" . format(dt)) # 输出为字符串 <class 'datetime.datetime'> 2021-06-10 15:16:08 /06/10-15:16:08 2021/06/10 15:16:08 import datetime d1=datetime.datetime.now() #无时区时间 print(d1) d2=datetime.datetime.utcnow() #UTC时间 print(d2) d3=datetime.datetime(2018,8,8,10,5,39) print(d3) 2022-08-12 14:29:35.393445 2022-08-12 06:29:35.393494 2018-08-08 10:05:39 时区 # timezone 时

选择排序算法

Selection Sort

每次找到最小元素索引 交换两个索引位置 重复前面的步骤,直到排序完成 def selectSort(nums): length=len(nums) for i in range(length-1): min_idx=i # 假定i为最小值 for j in range(i+1,length): # 第二位与前一位对比 if nums[j] < nums[min_idx]: min_idx=j #得到