首页 文章 精选 留言 我的

精选列表

搜索[Python],共10000篇文章
优秀的个人博客,低调大师

初学Python——RabbitMQ的安装

记录踩坑之路,本篇文章主要摘抄自CSDN博客https://blog.csdn.net/weixin_39735923/article/details/79288578 Windows10环境下安装RabbtiMQ的步骤 第一步:下载并安装Erlang 原因:RabbitMQ服务器端代码是使用Erlang语言编写的,它依赖于Erlang运行。 下载地址:http://www.erlang.org/downloads 根据本机系统的位数选择合适的版本。 双击下载好的安装包,开始安装 安装完成后要配置环境变量 在系统环境变量中新建 变量名:ERLANG_HOME 变量值就是刚才erlang的安装地址,点击确定。 然后双击系统变量path 点击“新建”,将%ERLANG_HOME%\bin加入到path中。 最后windows键+R键,输入cmd,再输入erl,看到版本号就说明erlang安装成功了。 第二步:下载并安装RabbitMQ 下载地址:http://www.rabbitmq.com/download.html 双击下载后的.exe文件,安装过程与erlang的安装过程相同。 RabbitMQ安装好后接下来安装RabbitMQ-Plugins插件。打开命令行cd,输入RabbitMQ的sbin目录。 我的目录是:D:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.3\sbin 然后在后面输入rabbitmq-plugins enable rabbitmq_management命令进行安装 打开sbin目录,双击rabbitmq-server.bat 等几秒钟看到这个界面后,访问http://127.0.0.1:15672 然后可以看到如下界面 默认用户名和密码都是guest 登陆即可。 安装步骤暂时就写这么多。如果一切顺利,不会出现什么问题,但是我的电脑上可没有这么顺利! 在安装RabbitMQ-Plugins插件时出了问题,无论如何也安装不成功,Pycharm中的代码也直接运行出错。同时双击rabbitmq-server.bat也会自动窗口消失。查找了许久,发现windows服务中RabbitMQ没有开启 (当然这是已经解决问题之后的截图,当时的情况是停止状态,无论如何点击启动按钮,都会立马自动停止运行,并提示错误1067) 查找许久才发现这是由于计算机名称是中文导致的,遂改成英文,重启。发现RabbitMQ服务已经自动启动,然后继续上次出错的步骤,配置成功!

优秀的个人博客,低调大师

Python类的内置方法

目录 1、new、init 2、str、repr 3、call 4、del 5、iter、next 6、getitem、setitem、delitem 7、getattr、setattr、delattr 8、getatrribute 9、enter、exit 10、get、set、delete、描述符(研究中,待补充) **(为了方便和美观,省略了各内置方法前后的__双下划线)** 1、new、init __new__方法是真正的类构造方法,用于产生实例化对象(空属性)。重写__new__方法可以控制对象的产生过程。__init__方法是初始化方法,负责对实例化对象进行属性值初始化,此方法必须返回None,__new__方法必须返回一个对象。重写__init__方法可以控制对象的初始化过程。 # 使用new来处理单例模式 class Student: __instance = None def __new__(cls, *args, **kwargs): if not cls.__instance: cls.__instance = object.__new__(cls) return cls.__instance def sleep(self): print('sleeping...') stu1 = Student() stu2 = Student() print(id(stu1), id(stu2)) # 两者输出相同 print(stu1 is stu2) # True 个人感觉,__new__一般很少用于普通的业务场景,更多的用于元类之中,因为可以更底层的处理对象的产生过程。而__init__的使用场景更多。 2、str、repr 两者的目的都是为了显式的显示对象的一些必要信息,方便查看和调试。__str__被print默认调用,__repr__被控制台输出时默认调用。即,使用__str__控制用户展示,使用__repr__控制调试展示。 # 默认所有类继承object类,object类应该有一个默认的str和repr方法,打印的是对象的来源以及对应的内存地址 class Student: def __init__(self, name, age): self.name = name self.age = age stu = Student('zlw', 26) print(stu) # <__main__.Student object at 0x0000016ED4BABA90> # 自定义str来控制print的显示内容,str函数必须return一个字符串对象 # 使用repr = str来偷懒控制台和print的显示一致 class Student: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return f'{self.__class__}, {self.name}, {self.age}' __repr__ = __str__ stu = Student('zlw', 26) print(stu) # <class '__main__.Student'>, zlw, 26 3、call __call__方法提供给对象可以被执行的能力,就像函数那样,而本质上,函数就是对象,函数就是一个拥有__call__方法的对象。拥有__call__方法的对象,使用callable可以得到True的结果,可以使用()执行,执行时,可以传入参数,也可以返回值。所以我们可以使用__call__方法来实现实例化对象作为装饰器: # 检查一个函数的输入参数个数, 如果调用此函数时提供的参数个数不符合预定义,则无法调用。 # 单纯函数版本装饰器 def args_num_require(require_num): def outer(func): def inner(*args, **kw): if len(args) != require_num: print('函数参数个数不符合预定义,无法执行函数') return None return func(*args, **kw) return inner return outer @args_num_require(2) def show(*args): print('show函数成功执行!') show(1) # 函数参数个数不符合预定义,无法执行函数 show(1,2) # show函数成功执行! show(1,2,3) # 函数参数个数不符合预定义,无法执行函数 # 检查一个函数的输入参数个数, # 如果调用此函数时提供的参数个数不符合预定义,则无法调用。 # 实例对象版本装饰器 class Checker: def __init__(self, require_num): self.require_num = require_num def __call__(self, func): self.func = func def inner(*args, **kw): if len(args) != self.require_num: print('函数参数个数不符合预定义,无法执行函数') return None return self.func(*args, **kw) return inner @Checker(2) def show(*args): print('show函数成功执行!') show(1) # 函数参数个数不符合预定义,无法执行函数 show(1,2) # show函数成功执行! show(1,2,3) # 函数参数个数不符合预定义,无法执行函数 4、del __del__用于当对象的引用计数为0时自动调用。__del__一般出现在两个地方:1、手工使用del减少对象引用计数至0,被垃圾回收处理时调用。2、程序结束时调用。__del__一般用于需要声明在对象被删除前需要处理的资源回收操作 # 手工调用del 可以将对象引用计数减一,如果减到0,将会触发垃圾回收 class Student: def __del__(self): print('调用对象的del方法,此方法将会回收此对象内存地址') stu = Student() # 调用对象的__del__方法回收此对象内存地址 del stu print('下面还有程序其他代码') class Student: def __del__(self): print('调用对象的del方法,此方法将会回收此对象内存地址') stu = Student() # 程序直接结束,也会调用对象的__del__方法回收地址 5、iter、next 这2个方法用于将一个对象模拟成序列。内置类型如列表、元组都可以被迭代,文件对象也可以被迭代获取每一行内容。重写这两个方法就可以实现自定义的迭代对象。 # 定义一个指定范围的自然数类,并可以提供迭代 class Num: def __init__(self, max_num): self.max_num = max_num self.count = 0 def __iter__(self): return self def __next__(self): if self.count < self.max_num: self.count += 1 return self.count else: raise StopIteration('已经到达临界') num = Num(10) for i in num: print(i) # 循环打印1---10 6、getitem、setitem、delitem 重写此系列方法可以模拟对象成列表或者是字典,即可以使用key-value的类型。 class StudentManager: li = [] dic = {} def add(self, obj): self.li.append(obj) self.dic[obj.name] = obj def __getitem__(self, item): if isinstance(item, int): # 通过下标得到对象 return self.li[item] elif isinstance(item, slice): # 通过切片得到一串对象 start = item.start stop = item.stop return [student for student in self.li[start:stop]] elif isinstance(item, str): # 通过名字得到对象 return self.dic.get(item, None) else: # 给定的key类型错误 raise TypeError('你输入的key类型错误!') class Student: manager = StudentManager() def __init__(self, name): self.name = name self.manager.add(self) def __str__(self): return f'学生: {self.name}' __repr__ = __str__ stu1 = Student('小明') stu2 = Student('大白') stu3 = Student('小红') stu4 = Student('胖虎') # 当做列表使用 print(Student.manager[0]) # 学生: 小明 print(Student.manager[-1]) # 学生: 胖虎 print(Student.manager[1:3]) # [学生: 大白, 学生: 小红] # 当做字典使用 print(Student.manager['胖虎']) # 学生: 胖虎 7、getattr、setattr、delattr 当使用obj.x = y的时候触发对象的setattr方法,当del obj.x的时候触发对象的delattr方法。 当尝试访问对象的一个不存在的属性时 obj.noexist 会触发getattr方法,getattr方法是属性查找中优先级最低的。 可以重写这3个方法来控制对象属性的访问、设置和删除。 **特别注意:如果定义了getattr,而没有任何代码(即只有pass),则所有不存在的属性值都是None而不会报错,可以使用super().__getattr__()方法来处理** class Student: def __getattr__(self, item): print('访问一个不存在的属性时候触发') return '不存在' def __setattr__(self, key, value): print('设置一个属性值的时候触发') # self.key = value # 这样会无限循环 self.__dict__[key] = value def __delattr__(self, item): print('删除一个属性的时候触发') if self.__dict__.get(item, None): del self.__dict__[item] stu = Student() stu.name = 'zlw' # 设置一个属性值的时候触发 print(stu.noexit) # 访问一个不存在的属性时候触发 , 返回'不存在' del stu.name # 删除一个属性的时候触发 8、getatrribute 这是一个属性访问截断器,即,在你访问属性时,这个方法会把你的访问行为截断,并优先执行此方法中的代码,此方法应该是属性查找顺序中优先级最高的。属性查找顺序: 实例的getattribute-->实例对象字典-->实例所在类字典-->实例所在类的父类(MRO顺序)字典-->实例所在类的getattr-->报错 class People: a = 200 class Student(People): a = 100 def __init__(self, a): self.a = a def __getattr__(self, item): print('没有找到:', item) def __getattribute__(self, item): print('属性访问截断器') if item == 'a': return 1 return super().__getattribute__(item) stu = Student(1) print(stu.a) # 1 9、enter、exit 这两个方法的重写可以让我们对一个对象使用with方法来处理工作前的准备,以及工作之后的清扫行为。 class MySQL: def connect(self): print('启动数据库连接,申请系统资源') def execute(self): print('执行sql命令,操作数据') def finish(self): print('数据库连接关闭,清理系统资源') def __enter__(self): # with的时候触发,并赋给as变量 self.connect() return self def __exit__(self, exc_type, exc_val, exc_tb): # 离开with语句块时触发 self.finish() with MySQL() as mysql: mysql.execute() # 结果: # 启动数据库连接,申请系统资源 # 执行sql命令,操作数据 # 数据库连接关闭,清理系统资源 10、get、set、delete、描述符(研究中,待补充)

优秀的个人博客,低调大师

使用python绘出常见函数

'''''' ''' mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False用来解决不能使用汉字问题,需要导入matplotlib ''' import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False import math x=np.arange(0.05,3,0.05) #设置X坐标轴 y1=[5 for i in x] plt.plot(x,y1,linewidth=2,label=u'常函数:y=5') #常函数 y2=[2*i+1 for i in x] plt.plot(x,y2,linewidth=2,label=u'一次函数:y=2x+1') #二次函数,在$内的内容能正确显示x^2 y3=[1.5*i*i-3*i+1 for i in x] plt.plot(x,y3,linewidth=2,label=u'二次函数:y=1.5$x^2$-3x+1') #幂函数,math,pow(x,y) x是底数 y是指数 y4=[math.pow(i,2) for i in x] plt.plot(x,y4,linewidth=2,label=u'幂函数:y=$x^2$') #指数函数 y5=[math.pow(2,i) for i in x] plt.plot(x,y5,linewidth=2,label=u'指数函数:y=$2^x$') #对数函数,math.log(x,y) y是可以设置的底数 y6=[math.log(i,2) for i in x] plt.plot(x,y6,linewidth=2,label=u'对数函数:y=logx2(x)') #-4pi到4pi之间产生一百个等差值 x1=np.linspace(-4*np.pi,4*np.pi,100) y7=[np.sin(i) for i in x1] y8=[np.cos(i) for i in x1] plt.plot(x1,y7,label='y=sin(x)',c='g',linewidth=2) plt.plot(x1,y8,label='y=cos(x)',c='r',linewidth=2) #突出某条具体的线 # plt.plot([1,1],[-3],5,'--',color='#999999',linestyle=2) #plt.grid(True)是否显示网格线 plt.legend(loc='lower right') plt.grid(True) plt.show()

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册