只要把握住一个概念,使用函数装饰器时就不会被绕晕:函数装饰器就是一个可调用对象,它接受一个参数(一般是函数对象),返回一个可调用对象。
所谓的“带参数的函数装饰器”,其实并不是函数装饰器了,“带参数的函数装饰器”的主要目的是使用参数来制作一个更好的函数装饰器,所以它返回一个函数装饰器。
我们知道functools.wraps可以让被装饰的函数具有原本的元信息(即__name__、__doc__等),它是怎么做到的呢?我们可以实现一个自己版本的简易wraps:
Read More »只要把握住一个概念,使用函数装饰器时就不会被绕晕:函数装饰器就是一个可调用对象,它接受一个参数(一般是函数对象),返回一个可调用对象。
所谓的“带参数的函数装饰器”,其实并不是函数装饰器了,“带参数的函数装饰器”的主要目的是使用参数来制作一个更好的函数装饰器,所以它返回一个函数装饰器。
我们知道functools.wraps可以让被装饰的函数具有原本的元信息(即__name__、__doc__等),它是怎么做到的呢?我们可以实现一个自己版本的简易wraps:
Read More »传统讲解:
如果你觉得这四句话实在是太过模糊,很多情况下都无法自行判断可见性,而自己又想像IDE插件那样在各种情况下都能看出可见性,那么可以看看下面的具体规则。
Read More »我们知道python标准库中有os,sys,string等模块,此时当前路径下有a.py,os.py,sys.py,string.py四个文件,其中除了a.py其余文件都为空,a.py内容如下:
#a.py
import sys
print(sys)
import os
print(os)
import string
print(string)
请问在当前路径运行a.py后,三个print出来的模块路径分别是什么,三个选项:A,当前路径;B,标准库路径;C,都不是。
Read More »目录 一、使用“绝对导入”代表你想使用外部模块 二、导入内部模块时也不应该使用自己包的名字 三、即使使用了“包相对导入”,也可以直接进行主模块测试
假设我们是模块包mod的编写者,现在用户的主目录中有a.py,b.py和我们的模块包mod,mod内含有b.py和c.py,目录结构如下:
Read More »1,对称加密算法:加密使用的密钥和解密使用的密钥是相同的。
2,非对称加密算法:加密使用的密钥和解密使用的密钥是不相同的。
3,公钥密码体制:一种非对称加密算法,它的公钥和私钥是不同的,也就是说加密使用的密钥和解密使用的密钥不同。它具有三个部分:公钥、私钥、加密解密算法。一般公钥和加密解密算法公开,而私钥保密。通过加密算法和公钥对明文进行加密,得到密文;通过解密算法和私钥对密文进行解密,得到明文。
Read More »在1993年,Urban Müller发明了Brainfuck语言(以下简称BF),它一共只含有8个有效字符,每个有效字符就是一条指令,语言虽然极致轻量,它却是一门图灵完备的编程语言。
BF的工作机制与图灵机高度一致。首先它存储数据的方式是一个不限长的一维整数数组(纸带),里面的数值全部初始化为0。此外,有一个数据指针(读写头),每一时刻都指向数组的某一元素,指针可以向左/右移动,也可以读取/修改当前指向的元素的值。
BF语言里的8个有效字符(指令)分别是:
Read More »C89标准中,对数组进行初始化时,初始化列表未写全的部分会进行默认初始化,比如:char a[10] = {1, 1, 1};那么数组a中只有前三个元素会被初始化为1,后面7个元素则被默认初始化为0。
C99增加了指定初始化器(designated initializer)的特性:char a[10] = {[5] = 1};那么数组元素a[5]会被初始化为1,其余元素则默认为0。
gcc编译器(包括mingw)对“指定初始化器”语法进行了扩展从而支持“范围初始化器”语法:char a[10] = {[0 ... 4] = 1, [5] = 2, [7 ... 9] = 3};那么a[0]~a[4]=1,a[5]=2,a[6]默认=0,a[7]~a[9]=3。注意“…”两侧都必须有空格。
比如说我在D:\Development\libraries\pyvenvs下使用python -m venv xxx创建了许多虚拟环境,如果想快速激活其中的环境,只需要在环境变量的目录中写一个powershell脚本,比如建立一个venv.ps1文件,内容如下(将$venv_home那行的路径改为自己的虚拟环境存放目录):
Read More »编写一个bat脚本:
@echo off
setlocal
if "%1" equ "rev-parse" goto rev_parse
git %*
goto :eof
:rev_parse
for /f %%1 in ('git %*') do cygpath -w %%1
通过在snapd中设置proxy,来解决访问过慢的问题,方法如下:
Read More »