数据科学之统计学习

统计学 中心倾向 均值(常用的额) 中位数 分位数:它表示少于数据中特定百分比的一个值 众数 ...

1 min · 418 words · Luenci

查看mysql连接状况

使用mysql- uroot -p登录后 执行命令: show processlist; 查询当前数据库用户连接情况. 如果是root帐号,你能看到所有用户的当前连接. 如果是其它普通帐号,只能看到自己占用的连接. ...

2 min · 685 words · Luenci

模块、迭代器,生成器和装饰器

module模块和包的介绍 模块的介绍 python给我们提供了十分简单的方法去创建一个模块,我们只需要写一个python文件即可,也就是说写一个.py为后缀的文件。 包的介绍 简单来说,包就是多个模块的集合。当项目较大,模块较多时,我们就可以把模块放在包中,便于管理。 我们在包中一般带有__init__.py文件,随你建包的时候就默认生成。 迭代器和生成器 迭代器 迭代器只不过是一个实现迭代器协议的容器对象。它基于两个方法: next :返回容器的下一个项目 在3.x的版本中为__next__或者next(可迭代对象) __iter__ : 返回迭代器本身 迭代器可以通过使用一个iter内建函数和一个序列来创建,示例如下。 1 2 3 4 5 6 7 8 In [21]: a = ['a','b', 'c'] In [22]: a = iter(a) In [23]: next(a) Out[23]: 'a' In [24]: a.__next__() Out[24]: 'b' 生成器 生成器 从Python2.2起,生成器提供了一种出色的方法,使得需要返回一系列元素的函数所需的代码更加简单、高效。基于yield指令,可以暂停一个函数并返回中间结果。该函数将保存执行环境并且可以在必要时恢复。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 In [25]: def fibonanci(): ...: a, b = 0, 1 ...: while True: ...: yield b ...: a, b = b, a + b ...: In [26]: fib = fibonanci() In [28]: fib.__next__() Out[28]: 1 In [29]: fib.__next__() Out[29]: 1 In [30]: fib.__next__() Out[30]: 2 In [31]: fib.__next__() yield可以理解为return,每次调用next()就yield值,下次next()从上次的yield处开始运行 该函数将返回一个特殊的迭代器,也就是generator对象,它知道如何保存执行环境。对它的调用是不确定的,每次都将产生序列中的下一个元素。这种语法很简洁,算法的不确定特性并没有影响代码的可读性。不必提供使函数可停止的方法。实际上,这看上去像是用伪代码设计的序列一样。 高阶函数的定义 函数的接收参数是一个函数名 函数的返回值是一个函数名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 def father(name): print("I am father %s" %name) def son(): print("i am son") # print(locals()) return son father("luenci") father("luenci")() out: I am father luenci I am father luenci i am son 简单的装饰器 @语法糖:相当于执行下面timmer(test)() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import time def timmer(func): def wrapper(): start_time = time.time() func() sweight_time = time.time() print("函数运行时间为: %s"%(sweight_time - start_time)) return wrapper @timmer # timmer(test)() @ 语法糖 def test(): time.sleep(3) print("test函数运行完毕") test() # timmer(test)() 带参数的装饰器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import time def timmer(func): def wrapper(*args, **kwargs): print(*args) # print(**kwargs) start_time = time.time() res = func(*args, **kwargs) sweight_time = time.time() print("程序运行时间为:%s" % (sweight_time - start_time)) return res return wrapper @timmer def test(name, age, gender): time.sleep(2) print("我是%s,今年%s,性别%s" % (name, age, gender)) return "sucess" res = test("lusheng", 18, gender="男") # print(res) 装饰器应用案例 登录验证 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 user_list = [ {"username": "luenci", "pswd": "123"}, {"username": "lynn", "pswd": "456"}, {"username": "lu", "pswd": "789"}, ] current_dic = {"username": None, "login": False} def verify(func): def wrapper(*args, **kwargs): if current_dic['username'] and current_dic['login']: res = func(*args, **kwargs) return res username = input("请输入用户名:").strip() pswd = input("请输入密码:").strip() for user in user_list: if user['username'] == username and user['pswd'] == pswd: current_dic['username'] = username current_dic['login'] = True res = func(*args, **kwargs) return res else: print('用户名或密码错误') return wrapper @verify def shop(): print('我的购物车') @verify def user(): print('我的信息') @verify def things(): print('我的商品') print('登录前的状态:%s'%(current_dic)) user() print('登录后的状态:%s'%(current_dic)) shop() things() 日志记录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 import logging import traceback def get_logger(): logger = logging.getLogger("Test") # 设定日志级别,只有大于或等于这个级别才输出 logger.setLevel(level=logging.DEBUG) # 当前路径下创建test_log文件记录错误日志 fh = logging.FileHandler("test_log", encoding='utf-8') ch = logging.StreamHandler() fm = logging.Formatter(fmt='%(asctime)s %(name)s %(pathname)s[%(lineno)d] %(message)s', datefmt='%Y/%m/%d %H:%M:%S') fh.setFormatter(fm) ch.setFormatter(fm) logger.addHandler(fh) logger.addHandler(ch) return logger def decoratore(func): def log(*args,**kwargs): try: print("当前运行方法", func.__name__) return func(*args,**kwargs) except Exception as e: get_logger().error(f"{func.__name__} is error,here are details:{traceback.format_exc()}") return log @decoratore def test(): print(1/0) test() ​ ...

4 min · 1572 words · Luenci

消息队列笔记

消息队列介绍 概念 MQ(Message Queue,消息队列),是基础数据结构中“先进先出”的一种数据结构,是在消息的传输工程中保存消息的容器。多用于分布式系统之间进行通信等。 MQ优势 应用解耦 ...

8 min · 3954 words · Luenci

积善科技(快代理)Python面试总结

积善科技(快代理)Python实习生面试总结 第一面是电话面。简单问了几个问题 1.生成八位字符串的随机验证码 ? 我当时想的是:将字符串存放在字典中,然后用随机函数生成数字,最后通过数字索引来取到对应的字符生成字符串 2.Python中的None和NULL类型 None表示的是空对象,null表示的是空字符串 数据库的问题 条件查询,连表查询等(很久没有用mysql数据库,基本上忘得干干净净,看来以后关系型数据库不能丢啊!!!) 第二面是做了一套笔试题 ...

5 min · 2307 words · Luenci

算法时间复杂度和五大经典排序算法

渐进时间度表 O记法所代表的是渐进上界限,Ω记法代表的是渐进下界 Θ代表的集合是上述符号的交集,Θ(g) = O(g) 常见的渐进运行时间实例 时间复杂度 相关名称 相关实例及说明 Θ(1) 常数级 哈希表的查询和修改 Θ(lg n) 对数级 二分搜索,其对数基数并不重要 Θ(n) 线性级 列表的遍历 Θ(nlgn) 线性对数级 任意值序列的最优化排序,其复杂度等同于Θ(lg n!) Θ(n^2) 平方级 拿n个对象进行互相比对 Θ(n^3) 立方级 Floyd-Warshall算法 O(n^k) 多项式级 基于n的k层嵌套循环(k为整数),且必须满足K > 0 Ω(K^n) 指数级 每n项产生一个子集(其中k = 2),且必须满足K > 1 Θ(n!) 阶乘级 对n个值执行全排列操作 ...

4 min · 1894 words · Luenci

网站概念

网站的组成 目前多数网站由域名,空间服务器,DNS域名解析,网站程序和数据库等组成 ...

2 min · 643 words · Luenci

计算机系统组成及工作原理简介

计算机系统组成及工作原理简介 硬件系统 中央控制器 CPU 运算器 ALU 又称算数逻辑部件,是计算机用来进行数据运算的部件 算数运算 加、减、乘、除四则运算 逻辑运算 与、或、非、异或等逻辑操作,以及移位、比较和传送等操作,亦称算术逻辑部件(ALU) 控制器 Controller ...

1 min · 477 words · Luenci

计算机网络学习

计算机网络概述 OSI七层协议 物理层 传输的数据类型:比特流 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特 数据链路层 传输的数据类型:帧 ...

5 min · 2092 words · Luenci

高德无人机科技研发岗(测试工程师)面试总结

高德无人机科技研发岗(测试工程师)面试总结 技术面 1.在51job上面投递的简历,本科院校“双非”,有一些项目经验。 2.面试的时候是技术工程师来一面。问了我关于C++问题(本人主攻Python),有点把我问住了, ...

2 min · 553 words · Luenci