这是我参与11月更文挑战的23天,活动详情查看:2021最后一次更文挑战。
单例模式
单例模式:是一种常用的软件设计模式。也就是说该类只包含一个实例。
通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
通常应用在一些资源管理器中,比如日志记录等。
单例模式实现:
- 当对象不存在时,创建对象
- 当对象存在时,永远返回当前已经创建对象
class single(object):
__isinstance = None
def __new__(cls, *args, **kwargs):
if cls.__isinstance is None:
cls.__isinstance = super().__new__(cls)
return cls.__isinstance
else:
return cls.__isinstance
a = single()
b = single()
print(id(a))
print(id(b))
常用内置模块
sys模块
sys模块:用来python解释器交互。
sys模块常用方法
sys.argv[]:从程序外部获取参数的桥梁sys.argv[0]:程序本身文件路径sys.argv[1]:外部运行时传递的参数
sys.verson:用来显示解释器版本信息sys.path: 用来显示模块搜索路径sys.exit():用来退出程序
os模块
os模块是与操作系统相关的模块。
os模块常用方法
os.getcwd():用来打印当前工作目录os.chdir(): 变当前工作目录os.makedirs():以递归方式创建多个文件夹os.removedirs():以递归方式删除多个空文件夹os.mkdir():创建单个文件夹os.rmdir():删除单个空文件夹os.path.exists():判断该路径下的文件或文件夹是否存在os.path.join():拼接路径
time模块
time模块是与时间相关的模块。
time模块常用方法
time.sleep():延迟执行时间time.time():秒时间戳time.localtime():本地时间time.strftime():传入时间元组,format参数决定输出时间格式datetime也是与时间相关的模块:datetime.datetime.now():输出当前时间
random模块
random模块:随机模块。
random模块常用方法
random.random():用于生成一个指定范围内的随机符点数random.randint():用于生成一个指定范围内的整数random.choice(): 从序列中获取一个随机元素random.shuffle():用于将一个列表中的元素打乱random.sample():从指定序列中随机获取指定长度的片断random.randrange():从指定范围内,按指定基数递增的在集合中获取一个随机数
JSON模块
JSON模块常用方法。
json.loads():json转为字典(适用于语句)json.dumps():字典转为json(适用于语句)json.load():json转为字典(适用于文件)json.dump():字典转为json(适用于文件)
递归函数
函数直接或间接调直接或间接调用函数本身,则该函数称为递归函数。
例如,计算阶乘:
- 阶乘本质:
n! = 1 * 2 * 3 * ... * n; - 用函数
func(n)表示, 可以看出:func(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = func(n-1) * n。
所以,func(n)可以表示为n * func(n-1):
def get_nums(num):
return num * get_nums(num-1)
# 3*5*4*3*2*1*f(0)
res = get_nums(6)
print(res)
⚠️注意:如果直接使用以上代码,运行结果会发现递归函数自身没有结束条件,所以需要我们自己设置结束条件,终止函数的调用。
def get_nums(num):
if num > 1:
return num * get_nums(num-1)
else:
return 1
# 6*5*4*3*2*1*f(0)
res = get_nums(6)
print(res)