关于python:kombu-如何判断一个-message-是否-acknowledgedrequeuedrejected

间接应用 message 的 acknowledged 属性就好了 if not message.acknowledged: message.ack()当咱们应用 acknowledged 的时候,其实干的是上面的事件: kombu/message.py @propertydef acknowledged(self): """Set to true if the message has been acknowledged.""" return self._state in ACK_STATESACK_STATES 是什么呢? kombu/message.py ACK_STATES = {'ACK', 'REJECTED', 'REQUEUED'}能够看到,曾经有三个状态了哦

October 10, 2022 · 1 min · jiezi

关于python:tabulate结合loguru打印出美观又方便查找的日志记录

在开发过程中常常碰到在本地环境无奈实现联调测试的状况,必须到对立的联机环境对接其余零碎测试。往往是呈现了BUG难以查找数据记录及时定位到谬误呈现的地位。 【浏览全文】 面对这种状况可能状况可能是一个简略的BUG导致的,然而定位问题往往就须要很长的工夫。在python编程中举荐非标准库tabulate,它能够将程序运行过程中产生的数据记录格式化的打印进去很不便咱们定位问题。 通过联合简略的日志非标准库loguru能够很快的打印出又好看又实用的日志记录,loguru非标准库其实在一些文章的源码示例中咱们曾经在应用了。 装置过程还是通过pip的形式间接装置,因为loguru、tabulate都是python的非标准库,因而,没有装置的话须要装置一下。默认咱们都应用的清华大学的python镜像站,大家能够抉择其余的镜像站都能够。 pip install loguru -i https://pypi.tuna.tsinghua.edu.cn/simple/pip install tabulate - i https://pypi.tuna.tsinghua.edu.cn/simple/做好筹备工作当前将loguru、tabulate模块都导入进来就OK了,没有其余简单的操作! # It's a shortcut to create a logger with the default configuration.from loguru import logger# It's importing the function `tabulate` from the module `tabulate`.from tabulate import tabulate对于非标准库tabulate,它的打印模式其实有很多,咱们平时应用到的可能就是几种比拟常见的,上面将tabulate所有的打印模式全副列举进去,有须要的大佬能够参考。 '''"plain""simple""github""grid""fancy_grid""pipe""orgtbl""jira""presto""psql""rst""mediawiki""moinmoin""youtrack""html""latex""latex_raw""latex_booktabs""textile"'''咱们抉择其中的一种'grid'模式来看看成果如何,因为这种模式打印的数据记录也是比拟常见的。上面创立一个函数tab_grid_log打印一段数组模式的数据记录。 def tab_grid_log(): """ > This function takes a list of lists and returns a list of lists with the log of each element """ # It's defining the header of the table. header = [u'姓名', u'年龄', u'班级', u'问题', u'体现'] # It's defining a list of lists. table = [('Python', 20, 1710, 98, 5.0), ('Java', 22, 1810, 98, 4.9)] # It's printing the table with the `grid` format. logger.info(tabulate(table, headers=header, tablefmt='grid'))tab_grid_log()# 2022-09-17 18:33:00.472 | INFO | __main__:tab_grid_log:66 - +--------+--------+--------+--------+--------+# | 姓名 | 年龄 | 班级 | 问题 | 体现 |# +========+========+========+========+========+# | Python | 20 | 1710 | 98 | 5 |# +--------+--------+--------+--------+--------+# | Java | 22 | 1810 | 98 | 4.9 |# +--------+--------+--------+--------+--------+## Process finished with exit code 0应用grid模式的打印的数据记录就是宫格模式很便于查找日志中的数据记录,也是咱们常常在日志记录中应用的一种打印办法。 ...

October 9, 2022 · 2 min · jiezi

关于python:kombu-registercallback-和-onmessage-的区别

register_callback 增加的 func 承受两个参数 from kombu.transport.pyamqp import Messagedef callback(body, message: Message): logger.debug(type(body)) logger.debug(message) logger.debug(message.body) message.ack()register_callback 增加的 func 承受一个参数 from kombu.transport.pyamqp import Messagedef callback(message: Message): logger.debug(type(body)) logger.debug(message) logger.debug(message.body) message.ack()相干的代码可见: kombu/messaging.py def _receive_callback(self, message): accept = self.accept on_m, channel, decoded = self.on_message, self.channel, None try: m2p = getattr(channel, 'message_to_python', None) if m2p: message = m2p(message) if accept is not None: message.accept = accept if message.errors: return message._reraise_error(self.on_decode_error) decoded = None if on_m else message.decode() except Exception as exc: if not self.on_decode_error: raise self.on_decode_error(message, exc) else: return on_m(message) if on_m else self.receive(decoded, message)

October 8, 2022 · 1 min · jiezi

关于python:我使用pangu模块做了一个文本格式化小工具

其实应用pangu做文本格式标准化的业务代码在之前就实现了,次要可能将中文文本文档中的文字、标点符号等进行标准化。 浏览全文 然而为了不便起来咱们这里应用了Qt5将其做成了一个能够操作的页面利用,这样不相熟python的敌人就能够不必写代码间接双击运行应用就OK了。 为了使文本格式的丑化过程不影响主线程的应用,顺便采纳QThread子线程来专门的运行文本文档丑化的业务过程,接下来还是采纳pip的形式将所有须要的非标准模块装置一下。 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pangupip install -i https://pypi.tuna.tsinghua.edu.cn/simple PyQt5将咱们应用到的pyqt5利用制作模块以及业务模块pangu导入到咱们的代码块中。 # It imports all the classes, attributes, and methods of the PyQt5.QtCore module into the global symbol table.from PyQt5.QtCore import *# It imports all the classes, attributes, and methods of the PyQt5.QtWidgets module into the global symbol table.from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QVBoxLayout, QTextBrowser, QLineEdit, QPushButton, \ QFormLayout, QFileDialog# It imports all the classes, attributes, and methods of the PyQt5.QtGui module into the global symbol table.from PyQt5.QtGui import QIcon, QFont, QTextCursor# It imports the pangu module.import pangu# It imports the sys module.import sys# It imports the os module.import os为了缩小python模块在打包时资源占用过多,打的exe应用程序的占用空间过大的状况,这次咱们只导入了可能应用到的相干python类,这个小细节大家留神一下。 ...

October 7, 2022 · 3 min · jiezi

关于python:loggingpython日志模块

为何要应用日志? 进行程序(代码)的调试程序运行过程中的问题定位和剖析收集程序运行的状况logging模块日志事件级别默认的级别是 WARNING,意味着只会追踪该级别及以上的事件,除非更改日志配置。所追踪事件能够以不同模式解决。最简略的形式是输入到控制台。另一种罕用的形式是写入磁盘文件。级别数值何时应用DEBUG10细节信息,仅当诊断问题时实用。INFO20确认程序按预期运行WARNING30表明有曾经或行将产生的意外(例如:磁盘空间有余)。程序仍按预期进行ERROR40因为重大的问题,程序的某些性能曾经不能失常执行CRITICAL50重大的谬误,表明程序已不能继续执行# -*- coding:utf-8 -*-import logging# 应用basicConfig()来指定日志级别和相干信息logging.basicConfig( level=logging.DEBUG # 设置日志输入级别 ,filename="demo.log" # log日志输入的文件地位和文件名 ,filemode="w" # 文件的写入格局,w为从新写入文件,默认是追加 # 日志输入的格局, -8示意占位符,让输入左对齐,输入长度都为8位 ,format="%(asctime)s - %(name)s - %(levelname)-9s - %(filename)-8s : %(lineno)s line - %(message)s" ,datefmt="%Y-%m-%d %H:%M:%S" # 工夫输入的格局)# 默认的warning级别,只输入warning以上的logging.debug("This is DEBUG !!")logging.info("This is INFO !!")logging.warning("This is WARNING !!")logging.error("This is ERROR !!")logging.critical("This is CRITICAL !!")# 在理论我的项目中,捕捉异样的时候,如果应用logging.error(e),只提醒指定的logging信息# 不会呈现为什么会错的信息,所以要应用logging.exception(e)去记录。try: 3/0except Exception as e: # logging.error(e) logging.exception(e)日志输入后果如下: 2022-08-01 16:46:18 - root - DEBUG - test.py : 14 line - This is DEBUG !!2022-08-01 16:46:18 - root - INFO - test.py : 15 line - This is INFO !!2022-08-01 16:46:18 - root - WARNING - test.py : 16 line - This is WARNING !!2022-08-01 16:46:18 - root - ERROR - test.py : 17 line - This is ERROR !!2022-08-01 16:46:18 - root - CRITICAL - test.py : 18 line - This is CRITICAL !!2022-08-01 16:46:18 - root - ERROR - test.py : 27 line - division by zeroTraceback (most recent call last):File "/Users/yg/Documents/test.py", line 24, in <module>3/0ZeroDivisionError: division by zero日志组件logging采纳了模块化设计,次要蕴含四种组件: ...

October 7, 2022 · 5 min · jiezi

关于python:Python面向对象-类属性二

传送门:Python类属性一 一、属性的获取机制(向上查找)在python中属性的获取存在一个向上查找的机制。向上查找始终找不到会报错。     1.1代码 + 画图演示查找执行过程:利用 对象.类属性 输入总数后果:  class Tool(object): # 应用赋值语句定义类属性,记录所有工具对象的数量 # 初始数量是0 count = 0 def __init__(self, name): self.name = name # 每减少一个工具对象,让类属性的值加1 Tool.count += 1# 1. 创立工具对象tool1 = Tool("扳手")tool2 = Tool("老虎钳")tool3 = Tool("斧头")# 2. 输入工具对象的总数# print(Tool.count)print("工具对象总数 %d" % tool1.count)执行后果:  留神:无论是tool1.count,还是tool2.count还是tool3.count后果都3   图解:  文字解释:  Python的解释器在执行代码时是从上向下程序执行的,当来到第一行发现是个类,此时并不会立刻执行而是向下寻找能够执行的代码,第13行代码在内存中创立一个叫做扳手的工具,在工具对象中只会记录工具的名称name,同时在执行初始化办法的时候要批改办法中类属性的值(这个代码Tool.count =+ 1)所以count数值从0变成1。初始化办法实现,扳手这个工具对象在内存中也曾经存在了,那么代码持续向下执行,在第14行又创立了一个老虎钳的工具,在执行初始化办法时,又会把count的数值加1,此时count数值变成2,初始化办法实现,代码持续向下执行到15行持续在内存中创立一个水桶的工机具,同时在执行初始化办法时会把count的数值加1,此时count数值变成3。  关键时刻: 此时执行19行代码,打印tool1的count属性,在打印tool1的count属性时Python解释器是这样执行的:首先Python解释器会在tool1的对象中来查找有没有count这个属性,如果有就间接输入,没有就会依照向上查找的形式来向上查找创立工具对象的类,在这个类中查找有没count这个类属性,如果找到就把类属性的值在控制台中输入。   1.2 因而,要拜访类属性有2种形式:类名.类属性对象.类属性(不举荐) 二、对象.类属性 形式的陷阱:代码: class Tool(object): # 应用赋值语句定义类属性,记录所有工具对象的数量 # 初始数量是0 count = 0 def __init__(self, name): self.name = name # 每减少一个工具对象,让类属性的值加1 Tool.count += 1# 1. 创立工具对象tool1 = Tool("扳手")tool2 = Tool("老虎钳")tool3 = Tool("斧头")# 2. 输入工具对象的总数tool1.count = 100print("工具对象总数 %d" % tool1.count)print("类中类属性的值====> %d" % Tool.count)执行后果:误导后果是100 ...

October 7, 2022 · 1 min · jiezi

关于python:Python面向对象类属性一

一、专业术语——实例1.1 对象创立过程:1. 应用面向对象开发,第一步是设计类2. 应用类名()创建对象,创建对象的步骤有2步: 在内存中为对象调配空间调用初始化办法__init__,为对象初始化3. 对象创立后,内存中就有了一个对象的实实在在的存在————咱们叫做实例  因而,通常也会把:  1. 创立进去的对象叫做——类的实例2. 创建对象的动作叫做——实例化3. 对象的属性叫做——实例属性4. 对象调用的办法叫做——实例办法 1.2执行过程在程序执行时:2.1对象各自领有本人的实例属性2.2 调用对象办法,能够通过self. 拜访本人的属性 调用本人的办法2.3论断1.每一个对象都有本人独立的北村空间,保留各自不同的属性2.多个对象的办法,在内存中只有一份,在调用办法时,须要把对象的援用传递到办法外部  二、类是一个非凡的对象——类对象Python中所有皆对象 class AAA:定义的类 属于 类对象 obj1 = AAA() :属于 实例对象 在程序运行时,类同样会被加载到内存,在python中,类是一个非凡的对象——类对象。在程序运行时,类对象在内存中只有一份,应用一个类能够创立出很多个对象实例,除了封装实例的属性和办法外,类对象还能够领有本人的属性和办法。 2.1 类属性、类办法拜访类的属性 或者 调用类的办法: 类名.  2.2  类属性和实例属性2.2.1概念:类属性就是给类对象中定义的属性,通常用来记录与这个类相干的特色,类属性不会用于记录具体对象的特色。  应用赋值语句定义类属性,赋值语句左侧的变量命名就是类属性名。   2.2.2应用:示例需要:  定义一个工具类每件工具都有本人的名字name需要——晓得应用这个类创立了多少个工机具对象 *](/img/bVc2OxQ)  示例代码:  class Tool(object): # 应用赋值语句定义类属性,记录所有工具对象的数量 # 初始数量是0 count = 0 def __init__(self, name): self.name = name # 每减少一个工具对象,让类属性的值加1 Tool.count += 1# 1. 创立工具对象tool1 = Tool("扳手")tool2 = Tool("老虎钳")# 2. 输入工具对象的总数print(Tool.count)执行后果: 更多相干Python教程能够移步去Python自学网(www.wakey.com.cn/)从根底入门收费课程开始,逐渐深刻学习python全栈体系课程,适宜新手入门到精通全栈开发。 

October 7, 2022 · 1 min · jiezi

关于python:论-rabbitmqnameko-可以支撑多大规模的业务

来谈谈 rabbitmq+nameko 的技术选型 —— 什么场景下能够选用 『rabbitmq+nameko』,将从优缺点两个层面剖析。次要以毛病为主 首先来看看 rabbitmq 的瓶颈在哪里 再来看看 nameko 的瓶颈

October 7, 2022 · 1 min · jiezi

关于python:Python-312-目标还可以更快

依照公布打算,Python 3.11.0 将于 2022 年 10 月 24 日公布。 据测试,3.11 相比于 3.10,将会有 10-60% 的性能晋升,这个成绩次要归功于“Faster CPython”我的项目,即“香农打算”。 对于“香农打算”的详情,可查看 Python 之父的主题分享,以及他的一则播客访谈。 3.11 版本为 Python 的提速开了一个激动人心的好头。接下来,3.12 还会有更多动作。 以下文章翻译自“香农打算”的《Python 3.12 Goals》,大家先一睹为快吧! 作者:Mark Shannon 译者:豌豆花下猫@Python猫 英文:https://github.com/faster-cpython/ideas/wiki/Python-3.12-Goals 本文内容可能会改变,以理论版本为准! 本文是 Faster CPython 打算在 3.12 中实现的次要内容的概要。 跟踪优化器Python 3.11 晋升速度的次要办法是用更快的与上下文相干的操作码(自适应的专门化操作码)替换个别的操作码,下一个大的改良办法是优化多个操作码的运行。 为此,现有的许多高级操作码将被替换成低级操作码,例如,用于查看版本号和援用计数的操作码。这些更简略的操作码更容易进行优化,例如,能够删除冗余的援用计数操作。 这些更底层的操作码还能让咱们失去一组适宜用于生成机器代码的指令(在 CPython 和第三方 JIT 我的项目中都实用)。 为了做到这点,解释器循环(interpreter loop)将基于申明性的形容而生成。 这可缩小一部分为了放弃解释器循环与某些相干函数同步而产生的 bug(mark_stacks、stack_effect 等函数),同时也让咱们能够对解释器循环作较大的更改试验。 多线程并行Python 以后每个过程有一个全局解释器锁(GIL),妨碍了多线程的并行。 PEP-684:https://peps.python.org/pep-0684 PEP-554:https://peps.python.org/pep-0554 PEP-684 提出了一个计划,即保障所有的全局状态都是线程平安的,并挪动到每个子解释器的全局解释器锁中应用。 PEP-554 提出了让 Python 创立子解释器的计划(目前只是一个 C API 个性),从而实现真正的多线程并行。 Python猫注:PEP-554 早在 2017 年就提出了,指标是落地在 Python 3.8-3.9 版本,然而大失所望。早在 2019 年的时候,我还翻译了一篇《Has the Python GIL been slain?》。屠刀已挥出,让它再飞一会~~更多专门化咱们剖析了哪些字节码将从专门化中获益最多,打算在 3.12 实现其余的高收益的改良。 ...

October 6, 2022 · 1 min · jiezi

关于python:ping命令的多种玩法以前竟然只用它来测试网速

作为开发人员,ping命令无疑是应用比拟多的工具,咱们常常在须要判断与服务器的连贯是否连桶时须要应用ping命令来测试。 【浏览全文】 个别状况下应用ping命令来判断路由地址是否连通,再配合应用telnet判断该地址得网络端口是否可能实现申请。明天才发现一个简略的ping命令的应用居然有这么多的妙用。 对于ping命令的作用这里就不多讲了,大家必定都是常常用到。咱们次要来阐明一下ping命令执行当前的返回后果中的值都代表着什么样的意思,这往往是大家可能疏忽的中央,最初再阐明一下除了咱们平时应用的ping命令如果给它带上一些不同的参数命令又会有什么不一样的成果。 下面这是一个咱们常常应用的ping -t的命令应用它来始终申请服务器查看网络成果,应用它来查看一下返回值中的各个字段代表的含意是什么? bytes 值:数据包大小,也就是字节。 time 值:响应工夫,这个工夫越小,阐明你连贯这个地址速度越快。 TTL 值:Time To Live, 示意 DNS 记录在 DNS 服务器上存在的工夫,它是 IP 协定包的一个值,通知路由器该数据包何时须要被抛弃。能够通过 Ping 返回的 TTL 值大小,粗略地判断指标零碎类型是 Windows 系列还是 UNIX/Linux 系列。 通过一些返回的简略的后果判断就能断定一些根本的网络及服务器的状况,这也是ping命令的根本利用,接下来看看ping命令还有哪些其余重要的参数可能帮忙咱们查看一些重要的信息。 间接应用万能的--help命令来显示一下ping命令到底有哪些能够应用的参数来辅助咱们,而后咱们挑一些比拟的罕用的来进行阐明并测试。 ping -t -t参数的应用在后面的实例中曾经应用到了,就是能够始终的向服务器发送申请,直到服务器被强制断开才行。个别应用ping -t参数始终拜访服务器能够测试很长一段时间内的网络状况。 ping -n ping命令在默认的状况下是发送四个数据包,下面如果应用ping -t命令的话能够始终发送数据包,然而想要发送肯定数量的数据包并查看反悔了多少数据包。这个时候能够应用-n参数,自定义要发送多少个数据包而后查看返回的后果数量。 从后果来看,咱们发送了10个数据包并且返回了10个数据包,在肯定水平上也能阐明网络状况。 ping -a -a 解析计算机名与 NetBios 名,就是能够通过 ping 它的 ip 地址,能够解析出主机名。这样相当于通过具体的IP地址反向解析出了域名,个别在内网的多个虚构服务器上应用起来比拟不便。 个别在配置了网络拜访的主机名称之后,通过-a参数能力解析进去。 ping -l 能够通过-l参数指定须要向服务器发送的数据包的大小来测试发送比拟大的数据包时服务器的响应状况,因为默认状况下发送的数据包的大小只有32个字节在须要非凡验证的状况下不能阐明问题。 在应用-l参数时,咱们将发送的数据包的大小调整到了1000个字节能够显著的看出比发送默认的32个字节时响应速度慢了将近2-3ms。发送最大的数据包能够达到65500字节,当发送最大字节的数据包时间接会time out超时,阐明我家里的网络还是有待进步。 ping -r -r参数也是特地有意思,它能够实现对发送申请过程中的路由地址的跟踪从而达到肯定的监听成果简略的排查网络在哪一个层面上出了问题,个别最多只能跟踪到9个路由地址,咱们应用-n指定发送一个数据包并且跟踪了一下网关。

October 5, 2022 · 1 min · jiezi

关于python:oeasy教您玩转python-0004-万行代码之梦

持续运行 回顾上次内容上次从1行代码进化到了2行代码 yy 复制1行代码到剪贴板p粘贴剪贴板中的内容将剪贴板中的代码粘贴9999次 9999p真的实现了万行代码梦是真·圆梦没有扯谎的那种不过圆梦之后多少有点充实能够看看人家的程序怎么写的么?去哪里找程序呢?github这就要去传说中的github了 点击链接https://github.com能够在本地的浏览器中关上 这个网站是世界制作软件的中央这里的确有各种各样的源代码 linuxpythonblender等等各种开源的仓库都在这里用社交的形式开发和迭代值得注册(signup)和深度应用 留神蓝桥云零碎中不能拜访邮箱须要在本地失去邮箱验证码那oeasy的python教程的代码在哪呢?搜寻搜寻oeasy+python 能够找到这个我的项目仓库而后点开这个我的项目仓库的连贯仓库细节仓库上方有三个根本按钮 star 点赞 为我的项目点赞用实际行动反对这个我的项目期待着您为oeasy点个⭐️这样也便于再次找到 另外两个按钮干什么用呢?forkfork 复制我的项目 把以后这个我的项目复制到本人的我的项目库中这样更容易找到在以后我的项目根底上能够做批改做出本人我的项目也能够反哺(pull-request)源我的项目 这是github生命力的源泉 各种我的项目一直遗传变异 watch按钮示意什么呢?watchwatch 察看 就是你对这个我的项目有疯狂的趣味这个我的项目的一举一动你都要接到告诉 能够抉择告诉级别 Paricipating and @mentions 相干的或者被@到了才告诉All Activity 所有都告诉Ignore 回绝所有告诉Custom 定制告诉类型这个我的项目具体怎么下载呢?下载我的项目点击那个复制按钮 链接就被复制到了剪贴板再按下图所示 将命令粘贴到下图地位并点击保留这样就把复制的文本粘贴到了网页中蓝桥云的零碎剪贴板粘贴关上终端先输出git clone 而后鼠标右键调出菜单点击终端菜单的Paste命令 回车运行 进行下载如果不能下载 能够ctrl+c勾销重复多试几次这样就能够玩游戏了游戏在哪呢?进入目录能够进入游戏目录玩游戏 cd ~/oeasy-python-tutorial/samples/000002pwdpython3 game.py也能够向方才那样把下面的这个代码复制进入终端而后玩游戏玩游戏 想方法赢一把源代码vi game.py 能够看看游戏源代码 都写的一清二楚能够间接读 两种职业的初始值和成长性一清二楚找找外面有没有 函数这个程序能够批改么?批改屠龙刀找到奖品屠龙刀的地位 加点什么好呢?增加爱心能够把❤复制粘贴到虚拟机的剪贴板 找到刀柄的地位i进入插入状态 留神左下角显示的以后状态粘贴爱心 如果不能正确粘贴 尝试下载安装最新版的火狐浏览器真的会有爱心吗?试验后果尝试一下 真的能够失去有一颗爱心的屠龙刀了这就是爱心屠龙刀esc 退回到失常状态:w|!python3 % 保留并运行以后这个程序看看最终奖励品是否变了 能够把所有的8都变成❤么?批量替换:99,107s/8/❤/g : 进入底行命令模式99,107 行的范畴内s 替换8 被替换模式❤ 替换为的模式g 全局替换(不止一次替换) 替换后果 能够把这颗心变个色彩么?红色爱之宝石能够把这颗心变成红色 照着这个代码抄就能够前面会有具体的原理解说这里先看看成果 失去了红色爱心屠龙刀这真的酷啊~~~拍照纪念!!!咱们先总结一下这次内容吧总结这次写了10000行代码10000行代码 都是写在明面上的 人家一下载 py 文件就能看个明明白白批改或者运行程序都很不便这程序全都这么公开出来 ...

October 5, 2022 · 1 min · jiezi

关于python:Python-获取一个函数的参数的默认值

能够应用 inspect 模块的 signature 办法来实现 示例代码如下: from typing import Unionfrom types import UnionTypefrom inspect import signaturefrom loguru import loggerdef get_score(name: str | None = None) -> float | None: passtyped_signature = signature(get_score).parameters.items()for index, (parameter_name, parameter) in enumerate(typed_signature): logger.debug(parameter.default)输入 2022-10-04 18:59:53.893 | DEBUG | __main__:<module>:15 - None

October 4, 2022 · 1 min · jiezi

关于python:python语言print的用法

python print是用于打印输出的一个常见的函数,其应用语法是“print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)”。 Python print() 函数形容print() 办法是用于打印输出的一个常见的函数。print 在 Python3.x 是一个函数,但在 Python2.x 版本不是一个函数,只是一个关键字。 语法print() 办法的语法是: print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)参数objects -- 复数,示意能够一次输入多个对象。输入多个对象时,须要用 , 分隔。sep -- 用来距离多个对象,默认值是一个空格。end -- 用来设定以什么结尾。默认值是换行符 \n,咱们能够换成其余字符串。file -- 要写入的文件对象。flush -- 输入是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。 返回值无。 实例以下展现了应用 print 函数的实例:Python3 下测试 >>>print(12.500) 12.5 >>> print("Hello World") Hello World >>> a = 1.>>> b = 'float'>>> print(a,b)1.0 float >>> print("aaa""bbb")aaabbb>>> print("aaa","bbb")aaa bbb>>> >>> print("www","runoob","com",sep=".") # 设置距离符www.runoob.com应用 flush 参数生成一个 Loading 的成果:实例 ...

October 3, 2022 · 1 min · jiezi

关于python:oeasy教您玩转python-0003-编写-py-文件

https://www.bilibili.com/vide... 编写 py 文件 回顾上次内容次在解释器里游玩 理解到字符串就是给一堆字符两边加引号 能够是单引号也能够是双引号这样游乐场就晓得 这个不是一个名字而是一个字符串字符串能够用print函数进行输入 然而print千万不要打错就连大小写都不能错 咱们在游乐场玩了这么久 是否写一个真正的python文件啊?编辑 py 文件我想要编辑一个残缺的 python文件保留好之后再执行那就要先退出解释器#退出解释器quit()回到 shell 环境 新建 py 文件退出 python3 的 游乐场 环境回到 shell 之后 用 vi 新建一个叫 oeasy.py 的文件 vi 是编辑神器 是咱们次要的编辑工具也是咱们的练武场 命令剖析#用vi关上并编辑oeasy.pyvi oeasy.pyvi 的指标是 oeasy.py 用 vi 来编辑 oeasy.pyoeasy.py oeasy 是文件名前面的扩展名 py 代表 python扩展名能够让用户晓得这个文件能够用python3执行 vi 和 oeasy.py 之间有个空格 示意用 vi 这个命令关上 oeasy.py进入 vi而后进入了 vi 的界面了 左下角如下图 留神写的是 "oeasy.py" [新文件] 特地要时刻留神终端左下角这个地位就像小地图一样重要编辑 py 文件按 i 键进入编辑模式 再察看左下角如下图所示变成显示 --插入(粘贴)--能够进行插入文字了 在下面输出 print("oeasy") ...

October 1, 2022 · 2 min · jiezi

关于python:Python面向对象特性多态基本概念代码示例

一、面向对象三大特色:1)封装: 依据职责将属性和办法封装到一个形象的类中  定义类的准则  2)继承: 继承实现代码的反复利用,雷同的代码不须要反复的编写  设计类的技巧子类针对本人的特有需要,编写特定的代码  3)多态:不同的子类对象调用雷同的父类办法,产生不同的执行后果 多态能够减少代码对的灵便度以继承和重写父类办法为前提是调用办法的技巧,不会影响到类的外部设计   二、多态案例演练:需要:  1. 在Dog类中封装办法gamel 一般的狗只会简略的游玩  定义XiaoTianQuan继承自Dog,并且重写game办法 XiaoTianQuan还会在天上游玩 定义person类,并且封装一个和狗玩的办法l 在办法外部,间接让狗对象调用game办法  1. 局部代码: class Dog(object): def __init__(self, name): self.name = name def game(self): print("%s 失常游玩----" % self.name)class XiaoTianQuan(Dog): def game(self): print("%s 入地游玩----" % self.name)class Person(object): def __init__(self, name): self.name = name def game_with_dog(self, dog): print("%s 和 %s 开心游玩" % (self.name, dog.name)) # 让狗游玩 dog.game()# 1. 创立狗对象xiaobai = Dog("小白")# 2. 创立小夏对象xiaoxia = Person("小夏")# 3. 让小夏调用和狗狗游玩的办法xiaoxia.game_with_dog(xiaobai)执行后果: 2.持续接下来代码: 正文掉一般小白 # xiaobai = Dog("小白")  减少会飞的小白,XiaoTianQuan类创立另外一个小白对象 ,其余代码不变 xiaobai = XiaoTianQuan("会飞的小白")    ...

September 30, 2022 · 1 min · jiezi

关于python:JS-逆向百例猿人学系列-web-比赛第五题js-混淆-乱码增强详细剖析

逆向指标猿人学 - 反混同刷题平台 Web 第五题:js 混同,乱码加强指标:抓取全副 5 页直播间热度,计算前 5 名直播间热度的加和主页:https://match.yuanrenxue.com/...接口:https://match.yuanrenxue.com/...逆向参数: url 申请参数:m、fCookie 参数:m、RM4hZBv0dDon443M逆向过程抓包剖析进入网页,点击右键查看页面源代码,搜寻不到直播间相干数据信息,证实是通过 ajax 加载的数据,ajax 加载有非凡的申请类型 XHR,关上开发者人员工具,刷新网页进行抓包,在 Network 的筛选栏中抉择 XHR,数据接口为 5?m=XXX&f=XXX,在响应预览中能够看到各直播间热度数据: 接口 url 有两个申请参数 m 和 f,当初还不晓得具体怎么来的: 本题提醒 cookie 有效期仅为 50 秒钟,即 cookie 值是在动态变化的,通过比照剖析,cookie 中有两个动态变化的参数 m 和 RM4hZBv0dDon443M,接下来须要定位到其生成的地位: 逆向剖析Cookie 加密参数剖析能够通过 Hook Cookie 的形式定位参数地位,这里通过 Fiddler 编程猫插件进行 Hook,相干插件在 K哥爬虫公众号发送【Fiddler插件】即可获取,Hook 代码如下: (function () { 'use strict'; var cookieTemp = ''; Object.defineProperty(document, 'cookie', { set: function (val) { if (val.indexOf('RM4hZBv0dDon443M') != -1) { debugger; } console.log('Hook捕捉到cookie的值->', val); cookieTemp = val; return val; }, get: function () { return cookieTemp; }, });})();将以上代码写入插件中,注入 Hook: ...

September 30, 2022 · 5 min · jiezi

关于python:利用-Python-进行数据分析-4-数据的导入导出

在数据分析中,咱们个别不会像前几篇文章那样本人发明数据,而是须要利用内部数据。本篇要解决两个问题: 如何将内部数据导入,并转换为 DataFrame?如何将 DataFrame 导出为罕用的文件格式?4.1 读取文本数据本篇文章用到的数据,能够从 GitHub 上下载:https://github.com/wesm/pydat... 4.1.1 csv 数据:解决题目行咱们能够从 csv 数据动手,看看如何将 csv 数据导入为 DataFrame: in: df = pd.read_csv('examples\ex1.csv') dfout: a b c d message 0 1 2 3 4 hello 1 5 6 7 8 world 2 9 10 11 12 foo如果你用的是 PyCharm IDE 的话,看看 Console 中的变量局部,变量 “df” 的左边会有一个 “view as DataFrame” 的按钮。点击它,你能够看到这样的视图: 这个视图在数据量很大的时候很有用,能帮你粗略地检视数据。 除了 pd.read_csv() 外,pandas 还提供了读取其余模式数据的办法,如 pd.read_table(), pd. read_json(), pd.read_excel() 等。 pd.read_table('examples\ex1.csv', sep=',') # 因为 pd.read_table() 的默认分隔符是 tab,咱们须要手动指定一下,以关上咱们的文件如果文件没有题目行(字段名/列名),该怎么做? ...

September 29, 2022 · 4 min · jiezi

关于python:利用-Python-进行数据分析-3-pandas-入门

上一篇咱们理解了 NumPy 的基本功能,本篇引入一个新的 python 数据处理库——pandas。 NumPy 更适宜解决对立的数值数组数据。Pandas 是基于 NumPy 数组构建的,专门解决表格和混淆数据。接下来,让咱们来理解一下 pandas 的根本应用吧。 首先让咱们导入 pandas 库: import pandas as pdimport numpy as np # 后续也会应用到 numpy,在此先导入进来3.1 pandas 的数据结构pandas 有两个根本的数据结构:Series 和 DataFrame。 3.1.1 Series咱们能够把 Series 了解为带有索引的一维 np 数组。让咱们创立进去比照一下: in: obj = pd.Series([4, 7, -5, 3]) # 能够将一个 list 转换为 Series objout: 0 4 1 7 2 -5 3 3 dtype: int64 in: np_obj = np.array([4, 7, -5, 3]) np_objout: array([ 4, 7, -5, 3])能够看到,用 pd.Series() 创立的 Series 比 np.array() 创立的 ndarray 多了索引值——0, 1, 2, 3。 ...

September 29, 2022 · 9 min · jiezi

关于python:python-解析-yaml-环境变量替换-value

import osimport refrom functools import partialimport yamlhas_regex_module = FalseENV_VAR_MATCHER = re.compile( r""" \$\{ # match characters `${` literally ([^}:\s]+) # 1st group: matches any character except `}` or `:` :? # matches the literal `:` character zero or one times ([^}]+)? # 2nd group: matches any character except `}` \} # match character `}` literally """, re.VERBOSE)IMPLICIT_ENV_VAR_MATCHER = re.compile( r""" .* # matches any number of any characters \$\{.*\} # matches any number of any characters # between `${` and `}` literally .* # matches any number of any characters """, re.VERBOSE)RECURSIVE_ENV_VAR_MATCHER = re.compile( r""" \$\{ # match characters `${` literally ([^}]+)? # matches any character except `}` \} # match character `}` literally ([^$}]+)? # matches any character except `}` or `$` \} # match character `}` literally """, re.VERBOSE,)def _replace_env_var(match): env_var, default = match.groups() value = os.environ.get(env_var, None) if value is None: # expand default using other vars if default is None: # regex module return None instead of # '' if engine didn't entered default capture group default = '' value = default while IMPLICIT_ENV_VAR_MATCHER.match(value): # pragma: no cover value = ENV_VAR_MATCHER.sub(_replace_env_var, value) return valuedef env_var_constructor(loader, node, raw=False): raw_value = loader.construct_scalar(node) # detect and error on recursive environment variables if not has_regex_module and RECURSIVE_ENV_VAR_MATCHER.match( raw_value ): # pragma: no cover raise Exception( "Nested environment variable lookup requires the `regex` module" ) value = ENV_VAR_MATCHER.sub(_replace_env_var, raw_value) if value == raw_value: return value # avoid recursion return value if raw else yaml.safe_load(value)def setup_yaml_parser(): yaml.add_constructor('!env_var', env_var_constructor, yaml.SafeLoader) yaml.add_constructor( '!raw_env_var', partial(env_var_constructor, raw=True), yaml.SafeLoader ) yaml.add_implicit_resolver( '!env_var', IMPLICIT_ENV_VAR_MATCHER, Loader=yaml.SafeLoader )# copy from nameko https://github.com/nameko/nameko/blob/v2.14.1/nameko/cli/main.py写个单元测试 ...

September 27, 2022 · 2 min · jiezi

关于python:羊了个羊但是Python简li单pu版

大家好,欢送来到 Crossin的编程教室 !要说最近最热门的游戏,那必定是《羊了个羊》没跑了。 间断上了好几天热搜,火到连央视都来揭示谨防有人利用游戏之名欺骗。但游戏爆火的另一面,也是有数玩家对于第二关难度的吐槽和不满。 如果你也像我一样,因为过不了关而不爽,不如本人用 Python 来写一个简略版,想过几关过几关甚至还能够调个无解关卡去霍霍其他人 我这个版本不仅难度简略,代码也很简略,一共不到100行。代码已开源:python666.cn/c/8可下载,可批改,可商用,但公开公布需署名起源:Crossin的编程教室做了一个同样简略的整活视频,供大家一乐: https://www.bilibili.com/vide... 略微解释一下思路和代码: 1.游戏用了 pygame-zero 这个库(所以能力这么少的代码实现),运行前须要装置 pgzero 库: pip install pgzero(或者通过 IDE 装置) 2.运行时须要带上我的项目里的 images 和 music 文件夹(你能够替换外面的图片和音乐) 3.每一张牌是一个 Actor 对象(相当于个别游戏开发中的精灵类),具备品种(12种各12张)、层级、状态(不可点/可点/已收集)等属性。开局时随机打乱后摆放,依据品种显示不同图片。除了最上层的牌可点,其余均不可点。 # 初始化牌组,12*12张牌随机打乱ts = list(range(1, 13))*12random.shuffle(ts)n = 0for k in range(7): # 7层 for i in range(7-k): #每层减1行 for j in range(7-k): t = ts[n] #获取排品种 n += 1 tile = Actor(f'tile{t}') #应用tileX图片创立Actor对象 tile.pos = 120 + (k * 0.5 + j) * tile.width, 100 + (k * 0.5 + i) * tile.height * 0.9 #设定地位 tile.tag = t #记录品种 tile.layer = k #记录层级 tile.status = 1 if k == 6 else 0 #除了最顶层,状态都设置为0(不可点)这里是个简化实现 tiles.append(tile)4.判断鼠标点击的地位是否处于某张可点的牌内,是的话就从所有牌列表中移除,加到下方牌堆列表里。而后遍历与这张牌有重叠的下一层牌,对于每张上层牌,反过来查看是否有其余下层牌笼罩它,如果没有,就把它变成可点。 ...

September 27, 2022 · 1 min · jiezi

关于python:日系怎样系列新版升级一本书讲透程序运行的方方面面

置信不少读者都是从 Windows 时代开始接触计算机的,或是从 Java、Python 之类的高级编程语言开始接触编程的。 在这个便当的时代,轻松双击程序图标就能够运行程序,让人们能够在不关注计算机外部操作的状况下,能够轻松编写程序。尽管很多开发者在学生时代上过程序相干的课程,然而不少人示意很多内容都早已还给了老师。 即便有了肯定的编程能力,很多人在编写原创程序的时候,还是会遇到困难,理解程序的底层工作原理十分必要,即“机器语言程序被加载到内存,而后由 CPU 进行解释和执行,从而实现对计算机系统的管制和数据运算等工作”。通过了解程序的工作原理,能力真正把握利用能力。 明天给大家介绍一本书,让你用最省时、最便当的方法,轻松理解程序的底层逻辑,它也是很多读者的老朋友了,最近这本书出了升级版,书中更新了很多内容,更加合乎开发者对当下新技术的谋求。 这是一本怎么的书?精确地说,这不只是一本书,是一个系列书,全系列一共五本,涵盖程序员必知的计算机常识,从基础知识到进阶技能,它帮忙数以万计在入门计算机时迷茫的技术人,所以,很多读者亲切地为这一系列取了个名字——日系“怎么”系列。而《程序是怎么跑起来的》作为该系列中的一本,自 2015 年出版以来,以良好的口碑,受到读者的欢送和认可。这本书中文版本销量行将冲破 8 万册,上一版豆瓣评分 8.0。日文原版更是重印了 41 次。 豆瓣的读者这样评估这本书: @SunSun:算是科普书,作者扼要而通透地讲解了软硬件如何撑持程序运作起来,绝对于领导实际的书,这本说明根底逻辑和原理的书起到了授之以渔的作用。 @咩哑:是很底层的基础知识,举的例子很容易了解。有的局部是学校素来没教过的,能够帮忙了解一些程序编写时的规定,但可能是用不太到,也就疏忽了。 @WitchInCabinet :计算机组成原理的繁难入门书籍的感觉?以程序运行为骨干会集了对于数据存储,代码编译和汇编,硬件管制及ai相干的常识。读第十章播种应该是最大的,作者放了不少汇编语言的片段并且进行了具体解释,略微减少了我对汇编的一丢丢熟练度。而后就是伪随机数,作者给了公式解释了它的周期性,终于将我葱硬背的世界里援救进去了。 扎实的内容,轻松的语言,作者堪称是十分懂读者,他用图文并茂的形式解说了软硬件是如何撑持起程序运作的,没有简单的术语叠加,你能够看作是“计算机组成原理”这门课程的图解版,帮忙读者疾速理解程序的实质,起到了授人以渔的作用。 另外,这本书可读性强,内容轻松易读,甚至有人评估此书为“蹲马桶就能看懂的编程读物”,快来让蹲马桶的工夫变得有效率起来吧~ 第 3 版新增哪些内容?除了连续上一版的易懂、实用外,本书第 3 版还对书中的内容进行了更新,并补充了大量正文,让初学者更加易懂。第 3 版降级了书中用到的软件产品和开发工具,并在注释和正文中补充了大量内容。对于旧版中颇受好评的硬件相干章节,更新了 C 语言的样例代码。书末附录对于 C 语言的内容也降级至最新规范。第 12 章新增了 Python 机器学习的内容,让初学者可能轻松体验人工智能的乐趣。附录也减少了对 Python 语言的介绍。 我适宜浏览这本书吗?如果你是对计算机程序感兴趣的初、高中学生甚至是文科生,这本能够作为你关上程序世界的第一本读物; 如果你是正在大学被计算机原理困扰的大学生,这本书能够说会为你的程序生涯打下松软的根底;如果你是初入职场的菜鸟程序员,每天被工作焦头烂额的围绕,那么不要进行学习,这本书能够助你理解计算机底层逻辑,实现入门到进阶。 如果你是中级程序员,那么这本书能够用来做查缺补漏之用; 如果你是高手程序员,这本书能够作为向家人科普计算机常识的教材。 本书正确应用办法看过上一版的读者,对本书的章节设置应该不生疏,如果你是第一次浏览本书,那么肯定要来理解一下作者在章节设置上花的“小心理”,章节设置合乎读者习惯,不仅有实践,还设有实际、自我检测环节,让你精准把握书中常识。 本书共分为 12 章,各章由“热身筹备”“本章要点”和注释三个局部组成。对专业术语的解析放在了注释的脚注局部。有些章节还设置了“专栏”。另外,本书在开端以附录的模式对 C 语言和 Python 的根本语法进行理解说, 刚开始学习编程的读者,务必浏览一下。热身筹备:各章的结尾会给出几个简略的问题,请各位读者肯定挑战一下。这样,大家就能够带着问题来浏览注释了。本章要点:这部分是对注释内容的高度总结。通过浏览这部分,能够确认本章内容和本人想理解的内容是否统一。注释:在这部分中,作者以深入浅出的形式,从各章主题登程来解说程序运行的原理。尽管注释中会呈现 C 语言的代码和 Python 的代码,但其中做了大量的正文,即便没有相干常识的读者也能读懂。专栏“如果是你,你会怎么讲呢?” 在这部分中,作者会以问答的模式向齐全没有编程教训的人解说程序运行的原理。向他人解说能够确认本人是否曾经齐全了解了这些常识。大家能够边读边思考本人该如何解说。 作译者简介作者:矢沢久雄 YAZAWA股份有限公司董事长兼总经理。GrapeCity信息技术团体参谋。电脑作家之友会会长。 曾在某大型电子公司从事过电脑生产,在Software House做过程序员,现次要从事软件开发工作。工作之余笔耕不辍,从电路到编程语言均有波及。 代表作有《计算机是怎么跑起来的》《应用C语言学习程序设计的根底》《驯服C++类和继承》等。自称软件艺人。 译者:周自恒 出名技术图书译者、编程和自然科学爱好者。初中时曾获信息学奥赛天津赛区一等奖,曾任某治理征询公司策略技术总监。当初陪儿子Vita(B站@小学生Vita君)一起学习编程。 译作有《网络是怎么连贯的》《图解明码技术》《30天自制操作系统》《乏味的二进制》《代码的将来》《家用游戏机简史》《图解CIO工作指南(第4版)》《大数据的冲击》《计算机世界大冒险》《物理是什么》等。精美实拍 头图:freepik.com

September 24, 2022 · 1 min · jiezi

关于python:关于进阶这件事这位Python大佬有话说

上世纪90年代末,一位爱看计算机杂志的自豪少年在机缘巧合下,加入了一场技术团聚。“过后我就震惊了!”这位少年起初说道。除了本人,他发现团聚上的其他人仿佛都学识渊博。对于那些被热烈探讨的编程常识,他只能拍板附和,齐全插不上话。 回到家后,这位少年下定决心要恶补编程常识,至多要在下一次团聚时插得上话啊!日复一日、月复一月,他在浩瀚的代码陆地里挣扎。当下一次技术团聚终于来长期,他依然只能拍板附和。正所谓学海无涯,上岸太难…… 所幸,这位少年最终脱离了苦海,并成长为 Python 意见首领。他就是 Al Sweigart。Python大佬Al Sweigart 要说Python社区的大佬,Al Sweigart相对算得上一位。他是Python软件基金会的Fellow,也是十分沉闷的Python常识传播者。Al Sweigart 的 YouTube 频道有 10 万以上的粉丝,他的 Python 在线课程则已笼罩寰球 100 万以上的学生。 或者,你更相熟他的 Python 入门书《Python编程疾速上手》(Automate the Boring Stuff with Python)——原版封面上写着销量已超 50 万册。但正如他说的,即使是他本人,在试图沿着编程之路走得更远时,也不免磕磕绊绊。 “软件开发远不止循环和函数。一旦你学完入门教程或者读完编程入门书,试图探寻进阶法门时,却总是会兜兜转转找到另外一个Hello World级别的入门疏导。你在不同的学习材料之间漫无目的地彷徨,感觉本人毫无出息。你早就不是初学者了,但教训又少得可怜,基本没法解决简单一些的问题。”Al Sweigart太相熟这种感觉了。他把这个阶段称为程序员的“失望沙漠”。 如果你正艰巨地行走在这个“失望沙漠”中,那么好消息是,Al Sweigart 专门写了一本书来引领你找到走出沙漠的路。这本书适宜谁这本书旨在成为你在Python进阶路上的引路人。如果你刚学完《Python编程:从入门到实际(第2版)》(蟒蛇书)或者 Al Sweigart 的Python入门书《Python编程疾速上手》,渴望进一步晋升Python常识,那么你就是这本书的最佳读者。 你能够学到什么01 正确发问哎呀!你好不容易写的程序又报错了。这个时候,你很容易对计算机产生怨气。尽管花了几个月的工夫学习Python,但仍须要频繁地从网上搜寻答案,这很容易让人产生挫败感。不过请记住,即便是业余的程序员,也须要通过在网上搜寻或者查阅文档来解决编程中遇到的麻烦。Stack Overflow的考察甚至显示,有62%的程序员每天会花半小时以上的工夫在网上查找解决问题的办法[1]。如果了解Python的报错音讯,并高效地在网上寻求帮忙,相对值得好好学习。这本书用了一章的篇幅来帮你取得这项必备技能。 02 写可读性强的代码如果你发现共事写了一个名为gooseDownload() 的函数,你会作何反馈?你们的我的项目筹备提供大鹅下载性能吗? 当然不是!Al Sweigart 在书中讲了他的亲身经历。原来,写这个函数的共事心愿通过该函数放慢产品的下载速度,而少有人晓得,goose 能够作为动词,比方 goose the engine 的意思是让发动机转得更快。 命名有什么考究,又有什么陷阱?在为变量、函数、类等编程中的元素命名时,简洁而有形容意义的名称可能大大晋升程序代码的可读性。这其中有哪些奇妙的办法?Al Sweigart 在这本书中为你娓娓道来。 03 代码的底层逻辑Al Sweigart 在书中应用了 Python Tutor,这是一个便捷的在线代码可视化工具,能够帮忙你逐行了解代码的底层逻辑。来看一个例子。 04 更多内容助你从老手到高手目录第一局部 起步第 1 章 处理错误和寻求帮忙第 2 章 环境设置和命令行第二局部 最佳实际、工具和技巧第 3 章 应用 Black 进行代码格式化第 4 章 抉择易懂的名称第 5 章 揪出代码的坏滋味第 6 章 编写Python格调的代码第 7 章 编程术语第 8 章 常见的Python陷阱第 9 章 Python的奇异难懂之处第 10 章 编写高效的函数第 11 章 正文、文档字符串和类型提醒第 12 章 通过Git治理我的项目第 13 章 性能测量和大O算法剖析第 14 章 我的项目实战第三局部 面向对象的Python第 15 章 面向对象编程和类第 16 章 面向对象编程和继承第 17 章 Python格调的面向对象编程:属性和魔术办法 ...

September 24, 2022 · 1 min · jiezi

关于python:关于-python-虚拟环境管理器的选择

比拟高级的 python 虚拟机环境和包管理器,有两个计划:pipenv 和 poetry 这两个货色,不仅仅能够帮咱们做『虚拟环境治理』: 创立虚拟环境删除虚拟环境还能够帮咱们做『包治理』 然而,我不倡议,用他们做包治理!为什么?因为狗拿耗子。 pipenv、poetry 安装包的时候,十分喜爱狗拿耗子,帮咱们额定做一堆的版本抵触查看: 慢,不晓得这两货的查看逻辑是什么,十分的慢。pip 自身也是有 『版本抵触查看』。然而 pipenv、poetry 做的更多,导致轻易装置个货色都会 waiting 小时(相比之下,间接会应用 pip 只有几秒)自作聪明,如果你创立虚拟环境的『以后门路』下有 requirements.txt 的话,他们会主动帮你装置 requirements.txt 中的所有的包,因为下面的『慢』起因,这会导致你的体验不穷无尽的蹩脚。所以:不要用 pipenv 和 poetry 做包治理(同时,不要把 requirements.txt 叫做 requirements.txt ,而是应该叫做 requirements-prd.txt 和 requirements-dev.txt) 然而能够用 pipenv 和 poetry 做包治理,因为对应 unix 这类自带 python 的 os 来说,虚拟环境是刚需。 那 pipenv 和 poetry 两者之间如何抉择? 我抉择 pipenv 为什么? pipenv 的 api 和 pip 高度类似。相比 poetry api 的不三不四,学习成本低很多 之前看网上有很多批评 pipenv 的文章,在 2022 年看都是放屁。

September 24, 2022 · 1 min · jiezi

关于python:k哥爬虫普法爬虫第一案侵犯个人隐私入侵短视频服务器

我国目前并未出台专门针对网络爬虫技术的法律标准,但在司法实际中,相干裁决已不足为奇,K 哥特设了“K哥爬虫普法”专栏,本栏目通过对实在案例的剖析,旨在进步宽广爬虫工程师的法律意识,通晓如何非法合规利用爬虫技术,警钟长鸣,做一个违法、护法、有准则的技术人员。案情介绍江苏省无锡市梁溪区人民法院审结了一起提供侵入计算机信息零碎程序罪案件,也就是网上传遍的“首例短视频平台畛域网络爬虫案”,案情原文(源自最高人民法院):https://mp.weixin.qq.com/s/P8... 2021年9月,丁某在网上结识了丁某某,丁某某示意其有一款“爬虫”软件能够获取某短视频平台用户数据,通过输出关键词搜寻,能够疾速抓取用户信息,次要包含用户名、评论、账户UID等。如果丁某感兴趣,能够购买代理权,做软件的推广,从中赚取差价。 丁某在试用后感觉不错,便决定代理,并对软件“面目全非”后对外进行销售。 某信息公司员工吴先生在网上巡逻时发现有人在抛售一款“爬虫”软件,该软件竟然能够“爬取”本人公司后盾数据和直播间用户的相干信息,随即报警。经侦察,公安机关很快锁定了丁某。 梁溪法院经审理查明,被告人丁某在经营公司期间,从丁某某(另案处理)处购买一款“爬虫”软件代理权后,在明知该款软件系未经受权、专门用于入侵某短视频服务器后非法获取用户昵称、UID 等数据的状况下对外销售。2021年10月至12月期间,丁某组织公司销售人员通过网络向多人销售上述软件,守法所得共计24360元。 裁决状况法院认为,被告人丁某伙同他人提供专门用于侵入计算机信息零碎的程序,情节严重,其行为已形成提供侵入计算机信息零碎程序罪。最初,法院判处被告人丁某有期徒刑1年6个月,缓刑2年,并处罚金3万元,没收丁某的守法所得。同时,禁止丁某在缓刑考验期内从事互联网相干经营流动。 反思总结依据视频中梁溪公安局网安大队民警介绍,原告次要是用这款软件抓取了直播间的用户昵称、UID 等信息,通过这些信息去精准分割客户,进行精准营销,视频中展现了该爬虫的相干性能,尽管不是很清晰,但还是能够依稀看到次要有以下信息:UID、SEC_UID、抖音号、姓名、性别、生产总数、排名、生产等级等,此外还有采集视频、采集同城视频、查问用户、搜寻用户、监控粉丝/评论、监控用户作品、热门话题、采集好物、采集直播榜单、采集直播间弹幕等等,值得注意的是,视频中咱们看到软件采集的姓名,蕴含了一些特殊符号、字符串也很长,能够猜想并不是用户实在姓名,有可能是昵称之类的。 作为程序员,置信大家都看得出来案情中形容的入侵短视频服务器这种说法,实际上并不是一种业余的形容,“入侵”应该是黑客行为,目标是拿到一些内部人员、或者须要权限能力拿到的信息,而本案中 UID、昵称等信息,事实上关上浏览器自带的开发者工具,抓包到接口就能够间接看到的,所以并不存在“入侵”这种说法,冲破反爬措施,破解申请参数,这种说法更正当一些。值得注意的是,法院裁决是非法侵入计算机,按情理来说侵入的是短视频平台的服务器,然而本案中,全程并没有看到短视频平台的官网人员染指,也没有看到短视频平台向警方提供了什么无力的入侵证据,难道就凭借一个软件就判断入侵了对方服务器吗?这显然是不合理的。 从工程师的角度来说,本案的重点其实应该是采集了用户信息之后,去精准分割客户,进行精准营销,这相当于进犯了公民个人隐私,K哥认为本案判处进犯公民个人信息罪更加正当,本案在网上的文章有很多,大多是一些非技术人员编辑的,文章弱化了对精准分割客户、精准营销的形容,过于强调了爬虫,并且应用了不业余的“入侵”词汇来形容爬虫。 对于爬虫工程师来讲,但凡波及到个人信息,哪怕是虚构的个人信息(指用户在互联网产品上的惟一标识、昵称等信息),都得留神,一旦你的业务波及到个人信息数据,或者通过这些数据盈利,或者通过这些数据对人家造成骚扰,那么必然是守法的,在个人信息方面肯定要有这个意识。 而且还有一点须要留神,本案中报警的人是公司员工,甚至不是公司发现了爬虫行为进行报警,即只有你的爬虫行为切实进犯了个人隐私、别人利益,那么无论是数据的公布方,又或者是数据的生产者,都能够对工程师进行举报,所以谨记,爬虫切勿守法违规操作!

September 24, 2022 · 1 min · jiezi

关于python:apple-silicon-的-mac-如何安装新版本-cpython-解释器

cpython 从 python3.9 反对 apple silicon 的 mac(这里指的是 cpython 官网提供了编译好的 arm 版本的 cpython 解释器) 不是说 apple silicon 的 mac 就装置 python3.7、python3.8。 真要装置旧版本,能够通过:1. 从源码编译装置一个 arm 版本的 python;2. 应用 brew 装置旧版本 3. 间接装置旧版本(就是 x86 版本的 python),通过 Rosetta 2 本义运行如果须要装置 arm 版本的 cpython3.10 或者 cpython3.6 ,有两个方法: 计划一:官网下载安装:https://www.python.org/downloads/ 计划二:通过 brew 装置brew install [email protected]brew install [email protected]以前也能通过 brew 装置 python3.8,然而最近不行了。 如果要问起因,我猜想:mac 零碎的更新,是滚动更新,一年前拿到这个 macbook pro13.3 apple silicon 的时候,自带的 python3 版本是 python3.8,当初通过几次零碎更新,那个 python3.8 曾经不存在了,取而代之的内置 python3 版本是 3.9 了。所以当初 brew 装置不了 python3.8 的起因是:根底环境没了 ...

September 24, 2022 · 1 min · jiezi

关于python:python-处理-signal-的回调函数的时候如何添加类型注释

signal 的回调函数, 须要两个参数:signum 和 frame signum 的 type 是一个 int frame 的 type 是什么呢? frame 的 type 是 frame class frame class 在哪里?是内建的 怎么 import 后加正文?无奈导入,然而 python 在 types 中提供了 FrameType 来给咱们做 typing hint import signalimport osfrom loguru import loggerimport timefrom types import FrameTypedef shutdown(signum: int, frame: FrameType): try: logger.debug(signum) logger.debug(type(signum)) logger.debug(frame) logger.debug(type(frame)) logger.debug('没了') assert isinstance(frame, FrameType) finally: exit(0)signal.signal(signal.SIGTERM, shutdown)signal.signal(signal.SIGINT, shutdown)while True: time.sleep(1)输入如下: ^C2022-09-24 13:20:33.687 | DEBUG | __main__:shutdown:9 - 22022-09-24 13:20:33.687 | DEBUG | __main__:shutdown:10 - <class 'int'>2022-09-24 13:20:33.687 | DEBUG | __main__:shutdown:11 - <frame at 0x7f56f1111a40, file '/home/bot/Desktop/ideaboom/011.py', line 25, code <module>>2022-09-24 13:20:33.687 | DEBUG | __main__:shutdown:12 - <class 'frame'>2022-09-24 13:20:33.688 | DEBUG | __main__:shutdown:13 - 没了

September 24, 2022 · 1 min · jiezi

关于python:深度学习的最新进展三行代码实现AI绘画

近期对于多模态方向的研究进展十分炽热,尤其是文生图方向,国内外ERNIE-ViLG、Stable-Diffusion、Disco-Diffusion相继开源凋谢,对于想要疾速尝试学术界最新成绩的同学,不防试一试开源的工具PaddleHub,只需三行代码就能够生成高质量图片,成果十分惊艳~ 是时候施展本人想象力的时候了~ 传送门GitHub Code: https://github.com/PaddlePadd... Huggingface Space: https://huggingface.co/spaces... import paddlehub as hub module = hub.Module(name=" stable_diffusion ") results = module.generate_image(text_prompts=[" close-up maximalist illustration of lion, by makoto shinkai, akihiko yoshida, yoshitaka amano, super detailed "])

September 21, 2022 · 1 min · jiezi

关于python:利用-Python-进行数据分析-2-NumPy-基础

什么是 NumPy?依据其官网文档的介绍: NumPy 是Python中科学计算的根底包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组疾速操作的各种API,有包含数学、逻辑、形态操作、排序、抉择、输入输出、离散傅立叶变换、根本线性代数,根本统计运算和随机模仿等等。 NumPy 的外围是一个非凡的数组对象——ndarray 对象。当运算波及到 ndarray 对象时,默认通过预编译的 C 代码对一一元素操作,在运算大量数据时,运算速度极快。此外,咱们还能够看到 NumPy 的语法更简略。 乍一看有些抽象。那么,就让咱们一点一点,揭开 NumPy 的面纱。 2.1 ndarray: 一种多维数组对象想应用 NumPy,首先让咱们导入 NumPy 包: import numpy as np2.1.1 创立 ndarray 对象NumPy 的所有运算简直都是围绕数组( ndarray 对象)开展的。那么如何创立数组呢? 简略的,咱们能够将一个序列转换为数组。 in : data1 = [6, 7.5, 8, 0, 1] arr1 = np.array(data1) # np.array() 能够将所有序列型的对象转换为一个数组 arr1out: array([6. , 7.5, 8. , 0. , 1. ])in : data2 = [[1, 2, 3, 4], [5, 6, 7, 8]] arr2 = np.array(data2) # 等长嵌套序列将被转换为多维数组 arr2out: array([[1, 2, 3, 4], [5, 6, 7, 8]])也有其余的函数能帮忙咱们间接创立一些非凡数组。 ...

September 21, 2022 · 8 min · jiezi

关于python:2022版最新最详细Manim开发环境搭建

装置前提醒Python版本要求: Python3.7+应用 pip 装置时,最好应用镜像,负责可能会因为网络装置失败,因为装置依赖较多且依赖包较大。以豆瓣源镜像示例: pip install 包名 -i https://pypi.douban.com/simple提前降级 pip 到最新版本,否则会在本地装置依赖包时会报错提醒因版本问题要求更新 pip ,命令如下: python -m pip install --upgrade pip同样也能够抉择用镜像减速装置,比方: python -m pip install --upgrade pip -i https://pypi.douban.com/simple版本装置阐明manim 分为 个人版 和 社区版 装置阐明如下: FFmpeg 和 MiKTeX 这两个是必装依赖 依赖装置按版本需要执行对应命令,可应用下面提到的镜像减速装置 个人版装置# 装置 manimglpip install manimgl# 检测是否能够运行manimgl社区版装置# 装置 manimglpip install manim# 检测是否能够运行manimWindows装置阐明:Windows零碎版本要求为 Windows10+ 装置 FFmpeg 。装置 LaTeX 发行版。举荐应用 MiKTeX 。装置残余的 Python 包。P.S.可先在文末下载好所需的文件 装置 FFmpeg将下载好的FFmpeg压缩包解压进去,把文件夹名称改为 ffmpeg ,而后将文件夹剪切或复制到C盘根目录配置环境变量。顺次关上 Windows设置->零碎->对于->高级零碎设置->高级->环境变量 ,而后依据需要在user或者零碎变量里的 Path 中减少一条FFmpeg的bin门路,如: C:\ffmpeg\bin ,而后顺次点击确定敞开所有窗口。用快捷键 Windows键 + r 关上cmd,输出 ffmpeg 命令看是否失常运行,也可通过 ffmpeg 查看FFmpeg版本信息。P.S.Windows键也就是Windows零碎图标的那个键,个别在 Ctrl 旁边 ...

September 18, 2022 · 1 min · jiezi

关于python:继GitHub的Copilot收费后亚马逊推出了-CodeWhisperer感觉不错哟

Copilot 是 Github 推出的一款人工智能编程助手,推出仅一年就受到大量开发者的追捧(据官网统计有 120 万用户)。然而,自 2022 年 6 月起,它改为了付费订阅模式(每月 10 美元或每年 100 美元)。 咱们暂且不探讨训练代码可能波及的版权及受权许可问题,能够必定的是,利用机器学习训练出智能编程 AI 模型,这会是将来的大势所趋! 偶合的是,仅在 Copilot 发表免费的几天后,Amazon 就推出了一款竞品 CodeWhisperer!置信在不久的未来,相似的产品会如雨后春笋般涌现,到那时,程序员和编程学习者们就更加有福了! 作者:Brian Tarbox 译者:豌豆花下猫@Python猫 英文:https://blog.symops.com/2022/... 转载请保留作者&译者&起源信息 代码补全最早呈现在 1985 年的一个名为 Alice 的 Pascal 编辑器上。它反对主动缩进、主动补全 BEGIN/END 控制结构,甚至反对语法着色。 争议也随之而来:在 Alice 的晚期,人们放心代码补全使得编写软件过于简略。但它实际上只是一个语法助手。 代码补全能够帮你写出语法正确的、可编译的代码,但它不能帮你写出语义正确的代码,甚至不能写出任何有用的代码。 GitHub 的 CoPilot 和 Amazon 的 CodeWhisperer 扭转了这一点,它们除了提供语法辅助,还能生成语义上正确的代码。它们不仅能提供 if 语句的纲要,还能创立出残缺的代码样例。 但在 2022 年,一个代码辅助工具到底能好到什么水平呢? 本文将重点介绍 CodeWhisperer,尝试答复这个问题。 试用:用 Python 从 S3 读取数据亚马逊在 2022 年 6 月公布了 CodeWhisperer 预览版,当初它反对 Python、Java 和 JavaScript。 ...

September 17, 2022 · 3 min · jiezi

关于python:史上flask框架最全知识点集合共4大部分近60页MD文档

史上flask框架最全知识点汇合,共4大部分,近60页,MD文档学些了Flask这么久,收集了好多好多的学习材料,而后整顿成md文档筹备随时应用,切实是太爽了。 学习笔记共4大部分,近60页,从0到我的项目一步步手把手教程。 想要的小伙伴间接去这获取: https://zhuanlan.zhihu.com/p/... 笔记目录: 1 笔记内容Flask简介Web应用程序的实质Web(World Wide Web)诞生最后的目标,是为了利用互联网交换工作文档。 Web框架什么是Web框架? 帮助开发者疾速开发 Web 应用程序的一套性能代码开发者只须要依照框架约定要求,在指定地位写上本人的业务逻辑代码例如:在某个区须要成立一家医院,有两种形式: 圈地,打地基,盖楼,装修,入驻买楼,装修,入驻为什么要用Web框架?web网站倒退至今,特地是服务器端,波及到的常识、内容,十分宽泛。这对程序员的要求会越来越高。如果采纳成熟,持重的框架,那么一些根底的工作,比方,安全性,数据流管制等都能够让框架来解决,那么程序开发人员能够把精力放在具体的业务逻辑下面。应用框架的长处: 稳定性和可扩展性强能够升高开发难度,进步开发效率。HelloWorld程序创立 Python 我的项目关上 Pycharm,创立 Pure Python 类型的我的项目,创立我的项目实现之后抉择之前创立的 py3_flask 作为虚拟环境 第 4 步门路能够通过在指定虚拟环境下,输出 which python 取得示例:新建文件helloworld.py导入Flask类from flask import FlaskFlask函数接管一个参数__name__,它会指向程序所在的包 app = Flask(__name__)装璜器的作用是将路由映射到视图函数 index@app.route('/')def index(): return 'Hello World'Flask应用程序实例的 run 办法 启动 WEB 服务器if __name__ == '__main__': app.run()在程序运行过程中,程序实例中会应用 url_map 将装璜器路由和视图的对应关系保存起来,打印后果如下图: 路由根本定义明确路由定义的参数,申请形式指定PostMan 的应用指定路由地址# 指定拜访门路为 demo1@app.route('/demo1')def demo1(): return 'demo1'给路由传参示例有时咱们须要将同一类 URL 映射到同一个视图函数解决,比方:应用同一个视图函数来显示不同用户的个人信息。 # 路由传递参数@app.route('/user/<user_id>')def user_info(user_id): return 'hello %s' % user_id路由传递的参数默认当做 string 解决,也能够指定参数的类型# 路由传递参数@app.route('/user/<int:user_id>')def user_info(user_id): return 'hello %d' % user_id这里指定int,尖括号中的内容是动静的,在此临时能够了解为承受 int 类型的值,实际上 int 代表应用 IntegerConverter 去解决 url 传入的参数指定申请形式装璜器路由具体实现梳理 ...

September 16, 2022 · 1 min · jiezi

关于python:celery-学习笔记整理总结共4大章

残缺笔记能够去我的博客查看: https://zhuanlan.zhihu.com/p/... 笔记目录: 问题抛出咱们在做网站后端程序开发时,会碰到这样的需要:用户须要在咱们的网站填写注册信息,咱们发给用户一封注册激活邮件到用户邮箱,如果因为各种起因,这封邮件发送所需工夫较长,那么客户端将会期待很久,造成不好的用户体验.那么怎么解决这样的问题呢?celery介绍Celery是一个性能齐备即插即用的工作队列。它使得咱们不须要思考简单的问题,应用非常简单。celery看起来仿佛很宏大,本章节咱们先对其进行简略的理解,而后再去学习其余一些高级个性。 celery实用异步解决问题,当发送邮件、或者文件上传, 图像处理等等一些比拟耗时的操作,咱们可将其异步执行,这样用户不须要期待很久,进步用户体验。 celery的特点是: 简略,易于应用和保护,有丰盛的文档。高效,单个celery过程每分钟能够解决数百万个工作。灵便,celery中简直每个局部都能够自定义扩大。celery十分易于集成到一些web开发框架中. Celery应用简略,配置也非常简单。Celery有很多配置选项可能使得celery可能合乎咱们的须要,然而默认的几项配置曾经足够应酬大多数利用场景了。 配置信息能够间接在app中设置,或者通过专有的配置模块来配置。 1.间接通过app来配置from celery import Celeryapp = Celery('demo')# 减少配置app.conf.update( result_backend='redis://:332572@127.0.0.1:6379/2', broker_url='redis://:332572@127.0.0.1:6379/1',)1.间接通过app来配置from celery import Celeryapp = Celery('demo')# 减少配置app.conf.update( result_backend='redis://:332572@127.0.0.1:6379/2', broker_url='redis://:332572@127.0.0.1:6379/1',)from celery import Celeryimport celeryconfig# 咱们这里案例应用redis作为brokerapp = Celery('demo')# 从独自的配置模块中加载配置app.config_from_object('celeryconfig')更多配置: http://docs.celeryproject.org...

September 16, 2022 · 1 min · jiezi

关于python:Python-笔记

Python简介Python 由 Guido van Rossum(荷兰 )开发。 Python 是一门解释型语言、动静类型(弱类型)语言。 Python 的名字来源于 Monty Python's Flying Circus。 保留词不能应用保留词(reserved words)来命名变量名称,这样的词有: False, class, return, is, finally, None, if, for, lambda, continue, True, def, from, while, nonlocal, and, del, global, not, with, as, elif, try, or, yield, assert, else, import, pass, break, in, raise Python 的关键字很靠近自然语言: True,False 布尔值,相当于“真,假”,相似于其余语言中的 true, false。None 相当与“空”,相似于其它语言中的 null。is,is not 运算符用于逻辑表达式,前者的意思是“和什么雷同”,类似于 ==,然而更强。is 同时查看值和类型,罕用在 None 或者布尔值的判断,相似 JavaScript 中的 ===。0 == 0.0 # True0 is 0.0 # False构建块赋值赋值就是把变量名和数值分割起来,定义函数就是把函数名和表达式分割起来。 ...

September 16, 2022 · 11 min · jiezi

关于python:python学习必备基础知识

Python函数的定义函数是代码封装的一种形式。一个函数蕴含一段能够反复执行的代码。当须要应用这些代码时,只须要调用函数运行函数中的代码即可。 python 函数这么定义:def 函数名称(参数1, 参数2): 函数体(要运行的代码)比方一个很简略的函数定义:def add(a, b): return a + b当初咱们举个例子阐明函数的作用。 print('关上高级车门')print('开发动机')print('安全带')print('踩油门')print('把握方向')如果要开很屡次车,那么每次都须要敲雷同的 5 行代码,这样会造成几个问题: 很容易编写不同的代码,或者代码呈现谬误代码冗余,可读性不强不容易保护,当须要批改某个步骤时,要批改多处。Python函数的调用当初,咱们能够将上述代码封装在函数中。当咱们须要运行这些代码的时候,咱们能够间接调用函数,这样就缩小了很多复制粘贴或者手动编写多行代码的步骤。性能的名称也示意代码的性能。当咱们须要批改一些逻辑的时候,咱们只须要批改函数体。 def run_car(): print('关上高级车门') print('动员发动机') print('系上安全带') print('踩油门') print('把握方向')run_car()# 其余代码run_car()Python函数的返回值Return是指函数执行后,你心愿函数外的程序失去函数执行的后果。返回值能够是任何数据类型。 def add(a, b): return a + bresult = add(3,4)print(result)函数体当中的代码, 遇到 return 会终止运行。函数的返回后果能够是任意类型,包含 None当函数体当中没有 return ,默认返回 NonePython函数能够返回多个值,只需在多个值之间加逗号,失去元组类型。 def add(a, b): return a, b四种类型的参数Return示意函数向内部返回的值,而参数示意函数从内部接管的值。函数定义时的参数叫形参,其实就是变量名,函数调用时的参数叫实参,相当于给变量赋值。 def get_coffee(suger): if suger > 100: return '甜咖啡' elif suger < 1: return '美式' else: return '莫名其妙的咖啡'result = get_coffee(100)print(result)留神,形参的个数要和实参的个数一样,程序要统一。这种办法称为地位参数。如果形参数与实参数不统一,程序不能独自赋值: def add(a, b): c = a + b - 1 return cadd(5, 7, 8) # NO关键字:调用函数时,做一个关键字标记,避免参数传递谬误和失落。次要是参数很多,记不住程序的时候,用关键字来标识数据的含意。 ...

September 16, 2022 · 1 min · jiezi

关于python:Python多继承多继承顺序多继承顺序实力分析新式类和旧式类

上一篇文章讲述了多继承的概念、语法、代码演练、应用注意事项,有趣味的能够看下,这篇文章是基于上篇文章的扩大科普,简略晓得一下就好。 一、Python中的MRO —— 办法搜寻程序【多继承程序】所谓办法搜寻程序,就是让某个对象调用某个办法时,python的解释器是依照什么样的程序在创立这个对象的类,以及父类之间搜寻办法的。在python中针对类提供了一个内置属性 mro ,能够查看办法搜寻程序。(mro前后两个下划线) MRO是 method resolution order缩写,次要用于在多继承时判断办法、属性的调用门路。 确定C类对象调用办法的程序:上篇文章中代码不变,在前面输入:print(C.__mro__) 具体代码: class A: def test(self): print("A --- test办法") def demo(self): print("A --- demo办法")class B: def demo(self): print("B --- demo办法") def test(self): print("B --- test办法")class C(B, A): pass# 创立子类对象c = C()c.test()c.demo()print(C.__mro__)执行后果: 后果过程阐明: 在控制台输入了一个元组。当让C类创立的对象办法时,Python解释器会首先在C类中查找有没有这个办法,如果有就会间接执行,而不会向后搜寻。如果没有找到这个办法,就会依照元组的程序从左向右查找第二个类中是否有这个办法,如果在B类中找到就会间接执行也不会向后搜寻。如果没有找到就会依照从左向右的程序持续向下寻找,在第三个类中A类中持续查找有没有提供这个办法,如果找到就执行,如果没有找到持续向后寻找下一个类object类,如果还没找到程序就会报错。(在python3中object是所有类的基类,也就是只有定义一个类,这个类的最终基类都是object类,简略来讲object是python中所有类的祖宗类) 总结: 在搜寻办法时,是依照__mro__ 的输入后果从左向右的程序查找的如果在以后类中找到办法,就间接执行,不再搜寻如果没有找到,就查找下一个类中是否有对应的办法,如果找到,就间接执行,不再搜寻如果找到最初一个类,还没有找到办法,程序报错 二、旧式类和新式(经典)类【科普】object是python为所有对象提供的基类,提供一些内置的属性和办法,能够应用dir函数来查看。 旧式类: 以object为基类的类,举荐应用。经典类: 不以object为基类的类,不举荐应用。旧式类和经典类在python2.x和Python3.x之间的区别: 在python3.x中定义类时,如果没有指定父类,会默认应用object作为该类的基类,python3.x中定义的类都是旧式类。 在python2.x中定义类时,如果没有指定父类,则不会以object为基类。代码体验,如图: 基于Python2.0 2.基于Python3.x 旧式类和经典类在多继承时,会影响到办法的搜寻程序。留神:为了保障编写的代码可能同时在python2.x和python3.x运行,今后在定义类时,如果没有父类,倡议对立继承自object class 类名(object): pass更多相干Python教程能够移步去Python自学网(www.wakey.com.cn/)从根底入门收费课程开始,逐渐深刻学习python全栈体系课程,适宜新手入门到精通全栈开发。

September 15, 2022 · 1 min · jiezi

关于python:Python面向对象特性多继承概念构造方法代码演练使用注意事项

Python中面向对象中的三大个性别离是:封装、继承、多态。继承,子类能够领有父类的所有属性和办法,之前讲到过单继承,每个子类只有一个父类这种状况叫做单继承。上面讲继承的另外一种状况,多继承。 一、多继承概念、语法多继承概念:子类能够领有多个父类,并且具备所有父类的属性和办法例如:孩子会继承本人的父亲和母亲的个性 语法: class 子类名(父类名1, 父类名2...): pass代码体验: class A: def test(self): print("test办法")class B: def demo(self): print("demo办法")class C(A, B): pass# 创立子类对象c = C()c.test()c.demo()执行后果: 多继承益处: 能够让子类对象同时具备多个父类的属性和办法。 继承这个个性就是保障咱们在开发过程中尽量的不让雷同的代码反复的编写,升高代码的冗余度,如果两个父类的代码都曾经开发实现,在理论开发中心愿有一个类的对象具备两个父类的办法,就能够创立一个子类,让这个子类继承自多个父类。 二、应用多继承的注意事项问题:如果不同的父类中存在同名的办法,子类对象在调用办法时会调用哪一个父类中的办法呢?开发时,应该尽量避免这种容易产生混同的状况。如果父类之间存在同名的属性或者办法,应该尽量避免应用多继承。 代码体验: class A: def test(self): print("A --- test办法") def demo(self): print("A --- demo办法")class B: def demo(self): print("B --- demo办法") def test(self): print("B --- test办法")class C(A, B): pass# 创立子类对象c = C()c.test()c.demo()执行后果: 此时,class C(A, B)中A在B之前,让子类先继承自A再继承自B,那么咱们再换个程序看看: 尽管说我这里常识简略的换下父类的地位,后果就变了。 情谊提醒:具体调用哪一个父类的办法,在底层上是有专门的解决形式的,并不是在代码中简略的调整下父类的程序。 下一篇文章是基于这篇文章的科普知识,别离是Python中的MRO —— 办法搜寻程序、旧式类和新式(经典)类。 更多相干Python教程能够移步去Python自学网(www.wakey.com.cn/)从根底入门收费课程开始,逐渐深刻学习python全栈体系课程,适宜新手入门到精通全栈开发。 ...

September 15, 2022 · 1 min · jiezi

关于python:APP-逆向百例Frida-初体验root-检测与加密字符串定位

申明本文章中所有内容仅供学习交换应用,不用于其余任何目标,不提供残缺代码,抓包内容、敏感网址、数据接口等均已做脱敏解决,严禁用于商业用途和非法用处,否则由此产生的所有结果均与作者无关! 本文章未经许可禁止转载,禁止任何批改后二次流传,擅自应用本文解说的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】分割作者立刻删除! 逆向指标设施:Google Pixel4,Android 10,已 rootAPP:UnCrackable-Level1.apk(可在公众号回复 APP 获取)APP 检测了 root,如果手机 root 了,会强制退出 APP,过了 root 检测后,还须要输出一个字符串进行校验。装置 ADBadb(Android Debug Bridge)即安卓调试桥,装置后能够在电脑上与手机进行交互,Android Studio 等工具外面会自带 adb,有时候咱们并不想下载这么大的工具,所以这里介绍一下 Android SDK Platform-Tools,它是 Android SDK 的一个组件,它包含与 Android 平台交互的工具,次要是 adb 和 fastboot,官网下载地址:https://developer.android.com... ,下载实现后将该目录增加到环境变量,USB 连贯手机,手机上设置容许 USB 调试,应用命令 adb version 可查看版本信息,adb devices 能够查看以后连贯的设施,如下图所示: 装置 FridaFrida 是一款基于 Python + JavaScript 的 Hook 与调试框架,首先电脑端应用命令 pip install frida-tools 装置 frida 模块(此命令默认会装置最新版的 frida 和 frida-tools,如),而后下载 frida-server,下载地址:https://github.com/frida/frid... frida-server 要依据你电脑端装置的 frida 版本和手机的 CPU 架构来抉择对应的,应用命令 frida --version 能够查看 frida 版本,应用命令 adb shell 进入手机,输出 getprop ro.product.cpu.abi 查看 CPU 架构,如下图所示,我这里 frida 是 15.2.2 版本,手机 CPU 为 arm64,所以我下载的是 frida-server-15.2.2-android-arm64.xz。 ...

September 15, 2022 · 4 min · jiezi

关于python:python实现中文和unicode转换

什么是Unicode?Unicode(对立码、万国码、繁多码)是计算机科学畛域里的一项业界规范,包含字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了对立并且惟一的二进制编码,以满足跨语言、跨平台进行文本转换、解决的要求。 什么是字符串?字符串或串(String)是由数字、字母、下划线组成的一串字符。个别记为 s=“a1a2···an”(n>=0)。它是编程语言中示意文本的数据类型。在程序设计中,字符串(string)为符号或数值的一个间断序列,如符号串(一串字符)或二进制数字串(一串二进制数字)。 一般字符串(在python中字符串默认应用unicode编码)item = "肯德基"unicode字符串,申明字符串用unicode编码item = u"肯德基"将中文转换为unicodeitem = "肯德基"res = item.encode('unicode-escape').decode()print(f"res:{res}")输入:res:\u80af\u5fb7\u57fa有些网站把\转换为了%kw = res.replace("\\", "%")print(f"kw:{kw}")输入:kw:%u80af%u5fb7%u57fa将unicode转换为中文uitem = "\u80af\u5fb7\u57fa"print(f"uitem:{uitem}")输入:uitem:肯德基

September 15, 2022 · 1 min · jiezi

关于python:利用-Python-进行数据分析-1-数据结构函数和文件

本文是我集体学习《利用 Python 进行数据分析》一书的笔记。整个系列于今日起连载。 1.1 数据结构Python 的根本数据结构包含元组、列表、字典、汇合,此外还有一些非凡的数据结构(如 range 对象、字符串等)。 1.1.1 元组(tuple)什么是元组?元组是固定长度、内容不可扭转的序列。 如何创立元组? # 用逗号分隔是创立元组最简略的办法tup = 1, 2, 3tup = "a", "b", "any"tup = (2, 3, 4), (5, 6)# 用 tuple() 能够将一个序列转换为元组tup = tuple([2, 3, 4])元组的内容是不可扭转的,这句话如何了解呢? in: tupout: (2, 3, 4) in: tup[0] = 5 # 该行命令是无奈运行的,这是因为元组内的值是不能扭转的# 然而,如果元组内的某对象是能够扭转的,能够在其对应地位上进行批改 in: tup = (1, [1, 2, 3], 2) tup[1].append(4) tupout: (1, [1, 2, 3, 4], 2)尽管元组的内容是不可扭转的,然而元组能够串联和拆分。 # 串联元组(1, 2, 4) + ('haha', [2, 3], True) # 利用加号能够串联元组(1, 2) * 3 # 利用乘号能够对元组进行复制串联# 拆分元组a, b, c = (1, 2, 3)a, b, (c, d) = (1, 2, (3, 4)) # 甚至元组内的元组也会被拆分 in: info = 'name', 'age', 'job', 'zipcode' a, b, *_ = info # 能够从元组的结尾选取想要的值,其余的值保留在 *_ 中 print('a={}, b={}'.format(a, b))out: a=name, b=age元组的办法不多,罕用的是 count()。 ...

September 14, 2022 · 4 min · jiezi

关于python:Python学习笔记

Python学习笔记装置最新版sudo apt-get install software-properties-commonsudo add-apt-repository ppa:deadsnakes/ppasudo apt-get update如果报错:ModuleNotFoundError: No module named 'apt_pkg',是用为存在多个python3版本先复原3.6:sudo ln -sf /usr/bin/python3.6 /usr/bin/python3,或update-alternatives切换命令行版本sudo update-alternatives --config pythonsudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2sudo update-alternatives --config pythonsudo update-alternatives --config python3

September 14, 2022 · 1 min · jiezi

关于python:django基础到高手知识笔记总结50页笔记共10大模块

Django框架次要内容我的项目创立运行配置文件路由配置 (View)request和response对象 (View)类视图 (View)中间件数据库 (Model)模板(Template)admin站点管理学了这么多python的常识,如果连django都不会的话,那有点说不过去。想要的小伙伴间接去我的博客拿就行: django笔记 MD文档 超丰盛 目录笔记的总目录为: 工程搭建把握虚拟环境应用把握Django我的项目和利用的创立把握Django我的项目的运行把握Django视图和模板的初步应用虚拟环境装置 创立虚拟环境mkvirtualenv django_py3 -p python3留神: 须要联网2. 装置Djangopip install django==1.11.113. 相干命令# 虚拟环境mkvirtualenv      # 创立虚拟环境rmvirtualenv      # 删除虚拟环境workon            # 进入虚拟环境、查看所有虚拟环境deactivate        # 退出虚拟环境# pippip install       # 装置依赖包pip uninstall     # 卸载依赖包pip list          # 查看已装置的依赖包 Django (1.11.11)pip freeze        # 查看已装置的依赖包 django==1.11.11Django我的项目和利用创立一、我的项目组织构造一个 Project 蕴含有多个 App一个 App 就是一个 Python 包,就代表一个功能模块,比方:用户模块,商品模块等各功能模块间能够放弃绝对的独立以包的模式组织代码不便功能模块的复用二、创立我的项目的两种形式通过 pycharm 创立通过 命令行创立1. 通过 pycharm 创立我的项目我的项目创立进去后构造如下:通过命令创立创立我的项目: django-admin startproject 我的项目名创立利用: python manage.py startapp 利用名创立我的项目要创立Django我的项目, 先进入虚拟环境: workon 虚拟环境名应用如下命令创立Django我的项目: django-admin startproject 我的项目名 # 例:要创立的我的项目名为 Django02 django-admin startproject Django02创立利用先进入我的项目根目录下: cd 我的项目根目录执行以下命令创立利用 # manage.py 为上述创立我的项目时主动生成的管理文件 python manage.py startapp 利用名 # 例: python manage.py startapp users申请对象一、客户端传参的几种形式通过 URL门路(path)传递,例如:http://127.0.0.1:8000/news/1/2,两个参数:新闻类别id 和 页码 通过 query string 查问字符串传递例如:http://127.0.0.1:8000/news?ca...对于URL格局: schema://host:port?query-string通过 body 申请体传递,又可依据传递的数据格式,分为:键值对:category=1&page=2表单数据:非表单数据(json, xml) {"category": 1, "page": 2} <news> <category>1</category> <page>2</page> </news>通过 http 协定申请头(header)传递二、HttpRequest对象一、Django申请和响应过程:二、request对象罕用属性:AttributeDescriptionpath申请页面的全门路,不包含域名端口参数。例如: /users/indexmethod一个全大写的字符串,示意申请中应用的HTTP办法,罕用值:GET, POST,DELETE,PUT等。以下三种为 GET 申请: form 表单默认提交(或者method指定为get)在浏览器中输出地址间接申请网页中的超链接(a标签)user已登录:AbstractUser对象;未登录:AnonymousUser对象; 判断是否曾经登录: request.user.is_authenticated(),返回true示意曾经登录GET相似字典的 QueryDict 对象,蕴含 GET 申请的所有参数POST相似字典的 QueryDict 对象,蕴含 POST 申请的所有键值对参数(表单post提交的参数)body获取原始的申请体数据,获取到的数据为bytes类型METApython 字典类型,封装了申请头headers中的数据 - REMOTE_ADDR – 客户端的IP地址 - REQUEST_METHOD — 一个字符串,例如"GET" 或"POST - CONTENT_TYPE – 申请的注释的MIME 类型 留神:对于用户增加到申请头中的键值,Django会给键加上前缀 HTTP_再转换成大写,再把键值保留到request.META中 官网文档参考COOKIES一个规范的 python 字典,蕴含所有的 cookies, 键和值都是字符串session可读可写的相似字典的对象: django.contrib.sessions.backends.db.SessionStore。 Django 提供了 session 模块,默认就会开启用来保留 session 数据类视图一、类视图发帖性能 # url配置 urlpatterns = [ url(r'^post$', views.post), # 显示发帖界面 url(r'^do_post$', views.do_post), # 执行发帖操作 ] # 视图 def post(request): """get申请: 显示发帖界面""" return render(request, 'post.html') def do_post(request): """post申请: 执行发帖操作""" title = request.POST.get('title') content = request.POST.get('content') return HttpResponse('发帖:title=%s, content=%s' % (title, content))通过一个URL和视图同时实现登录性能的 GET 和 POST 申请(留神:可能还有PUT DELETE等); # url配置 urlpatterns = [ url(r'^post$', views.post), # 发帖性能 ] # 视图 def post(request): """发帖性能""" if request.method == 'GET': # get申请: 显示发帖界面 return render(request, 'post.html') else: # post申请: 执行发帖操作 title = request.POST.get('title') content = request.POST.get('content') return HttpResponse('发帖:title=%s, content=%s' % (title, content))类视图 实现以函数的形式定义的视图称为函数视图在Django中还能够通过类来定义一个视图,称为类视图类视图 的应用定义一个类,继承Django提供的View类 from django.views.generic import View class PostView(View): def get(self, request): """get申请: 显示发帖界面""" return render(request, 'post2.html') def post(self, request): """post申请: 执行发帖操作""" # 代码简略 return HttpResponse('执行发帖操作')调用类视图的 as_view() 办法配置url urlpatterns = [ ... # 类视图注册 url(r'^post2$', views.PostView.as_view()), ]类视图长处:对于函数视图代码可读性和复用性更好笔记太多了,喜爱的小伙伴间接间接去拿就行:

September 12, 2022 · 2 min · jiezi

关于python:史上最全python基础知识点笔记大全-300多页-32个pdf

史上最全python根底知识点笔记大全 300多页 32个pdf 本文次要介绍一些平时常常会用到的python根底知识点,用于加深印象,也算是对于学习这门语言的一个总结与回顾。笔记整顿一共300+多页,共32章节,32个pdf文件,md语法,用来十分棘手,能够说是史上最全的python知识点汇合。 学习笔记在我的博客: python根底知识点大全 MD文档 自己在长期的学习过程中,收集了大量的学习材料,当初分享给各位,一共300多页,从根底到高级的python常识都有。 适宜小白入门,以及坚固常识的老铁们。 自己将Python的知识点进行总结与演绎,节选局部在数据分析过程中用到比拟多的一些常识,例如字符串、列表、元组、字典等的用法,以及控制流if、for、while的用法,上面一起来学习。Python 是一种解释型、面向对象、动静数据类型的高级程序设计语言。Python基础知识蕴含Python数据类型,数据结构,控制流等,与其余高级语言相似,程序语句、条件语句、循环语句等是其根本构造。资源图示:最根底的:python数据转换:python运算符:python列表:python函数:函数的作⽤函数的使⽤步骤函数的参数作⽤函数的返回值作⽤函数的阐明⽂档函数嵌套python函数增强(包含案例):应⽤:学员管理系统递归lambda 表达式⾼阶函数python面向对象:了解⾯向对象类和对象增加和获取对象属性魔法⽅法 ⾯向对象 继承继承的概念单继承多继承⼦类重写⽗类的同名属性和⽅法⼦类调⽤⽗类的同名属性和⽅法多层继承super()公有属性和公有⽅法 python文件操作⽂件操作的作⽤⽂件的基本操作关上读写敞开⽂件备份⽂件和⽂件夹的操作

September 12, 2022 · 1 min · jiezi

关于python:Python-面向对象的继承性概念语法特点相关术语注意事项代码示例

面向对象三大个性: 封装:依据职责将属性和办法封装到一个形象的类中继承:实现代码的重用,雷同的代码不须要反复的编写多态:不同的对象调用雷同的办法,产生不通过的执行后果,减少代码的灵便度一、问题的抛出——单纯的封装可能会呈现很多反复的代码上面看一张图,能够看出动物类,和狗类,还有哮天犬类都有很多反复的办法代码,这样大大降低了代码的效率,产生很多反复的代码,批改代码也变得麻烦了起来。比方我要批改动物类的吃办法,那么狗类中的吃办法也要反复批改一遍很麻烦等状况,那么解决这个问题就能够用到面向对象中的继承个性来解决。 上面是不应用继承的代码: class Animal(): def eat(self): print("吃") def run(self): print("跑") def drink(self): print("喝") def sleep(self): print("睡")class Dog(): def eat(self): print("吃") def run(self): print("跑") def drink(self): print("喝") def sleep(self): print("睡") def bark(self): print("汪汪叫")# 1. 创立动物类对象 - 小花狗huagou = Animal()# 调用办法huagou.eat()huagou.run()huagou.drink()huagou.sleep()# 2. 创立狗类对象 - 斑点狗bandia = Dog()# 调用办法bandia.eat()bandia.run()bandia.drink()bandia.sleep()bandia.bark() 执行后果: 二、继承的概念、语法和特点1)继承的概念:子类领有父类的所有办法和属性。 应用继承后只须要把子类中特有的属性和办法再次封装一下就能够了,而不须要其余子类中把父类的办法反复编写一遍。 2) 继承的语法:class 类名(父类名): pass 3)特点:子类继承自父类,能够间接享受父类中曾经封装好的办法,不须要再次开发子类中应该依据职责,封装子类特有的属性和办法应用继承批改下面的代码: class Animal(): def eat(self): print("吃") def run(self): print("跑") def drink(self): print("喝") def sleep(self): print("睡")class Dog(Animal): def bark(self): print("汪汪叫")# 1. 创立动物类对象 - 小花狗huagou = Animal()# 调用办法huagou.eat()huagou.run()huagou.drink()huagou.sleep()# 2. 创立狗类对象 - 斑点狗bandia = Dog()# 调用办法bandia.eat()bandia.run()bandia.drink()bandia.sleep()bandia.bark() ...

September 8, 2022 · 1 min · jiezi

关于python:python面向对象子类访问父类的私有属性和私有方法的办法

总结: 1.子类对象不能在本人的办法外部间接拜访父类的公有属性和公有办法援用2.子类对象能够通过父类的私有办法间接拜访到公有属性和公有办法公有属性和办法是对象的隐衷,不对外公开,外界以及子类都不能间接拜访公有属性、办法通常用于做一些外部的事件示例: 后果: B的对象不能间接拜访__num2属性B的对象不能在demo办法内拜访__num2属性B的对象能够在demo办法内调用父类的test办法父类的test办法外部可能懊恼歌文__num2属性和__test办法1)代码验证:在外界不能间接放和煦对象的公有属性、调用对象的公有办法——报错 class A(): def __init(self): self.num1 = 1000 self.__num2 = 2000 def __test(self): print("公有办法 %d %d" % (self.num1, self.__num2))class B(A): pass# 创立一个子类对象b = B()print(b)# 在外界不能间接拜访对象的公有属性、调用公有办法(报错)# print(b.__num2)# b.__test()执行后果如下图: 2)代码验证:子类对象不能在本人的办法外部间接拜访父类的公有属性和公有办法 class A(): def __init__(self): self.num1 = 1000 self.__num2 = 2000 def __test(self): print("公有办法 %d %d" % (self.num1, self.__num2))class B(A): def demo(self): # 1. 在子类的对象办法中,不能拜访父类的公有属性 print("拜访父类的公有属性 %d" % self.__num2) # 2. 在子类的对象办法中,不能调用父类的公有办法 # b.__test() # pass# 创立一个子类对象b = B()print(b)b.demo()执行后果如下图: ...

September 8, 2022 · 1 min · jiezi

关于python:Python面向对象中2种重写父类的方法

应用面向对象继承开发时常常会遇到的一种状况,重写。 继承: 子类领有父类的所有属性和办法。子类继承自父类,乐意间接享受父类中曾经封装好的办法,不须要再次开发。利用场景: 当父类的办法实现不能满足子类需要时,能够对办法进行重写(override) 尽管Dog类中有叫唤的办法,如果因为哮天犬是神犬和一般狗狗叫唤形式不一样,所以Dog类中的Dark办法满足不了,这时就要对这个dark办法重写了。 重写父类办法有2种状况: 笼罩父类的办法 对父类办法进行扩大一、笼罩父类的办法如果在开发中,父类的办法实现和子类的办法实现齐全不同,就能够应用笼罩的形式,在子类中从新编写父类的办法实现。 具体的实现形式: 就相当于在子类中定义了一个和父类同名的办法并且实现,重写之后,在运行时,只会调用子类中重写的办法,而不再会调用父类封装的办法。 代码体验: class Animal(): def eat(self): print("吃") def run(self): print("跑") def drink(self): print("喝") def sleep(self): print("睡")class Dog(Animal): def bark(self): print("汪汪叫")class XiaoTianQuan(Dog): def fly(self): print("老子会飞,哈哈哈哈") def bark(self): print("天籁之音")# 创立一个哮天犬对象xtq = XiaoTianQuan()# 如果子类中重写了父类办法# 在应用子类对象调用办法时,会调用子类中重写的办法xtq.bark()执行后果: 留神:如果在XiaoTianQuan类中没有从新编写bark办法,那么执行后果是汪汪叫,因为此时调用的仍旧是父类中的bark办法。 二、对父类办法进行扩大如果在开发中,子类的办法实现中蕴含父类的办法实现,父类本来封装的办法实现是子类办法的一部分,就能够应用扩大的形式。 1.扩大的形式步骤:在子类中重写父类的办法在须要的地位应用 super().父类办法 来调用父类办法的执行代码其余的地位针对子类的需要,编写子类特有的代码实现2.对于super在python中super是一个非凡的类super()就是应用super类创立进去的对象最常应用的场景就是,在重写父类办法时,让super().调用在父类中封装的办法实现代码体验: 性能需要:不仅要会汪汪叫,还要会天籁之音。 class Animal(): def eat(self): print("吃") def run(self): print("跑") def drink(self): print("喝") def sleep(self): print("睡")class Dog(Animal): def bark(self): print("汪汪叫")class XiaoTianQuan(Dog): def fly(self): print("老子会飞,哈哈哈哈") def bark(self): # 1. 针对子类特有的需要,编写代码 print("天籁之音") # 2. 应用super(). 调用本来在父类中封装的办法 super().bark() # 3. 减少其余子类的代码 print("OK啦OK啦OK啦OK啦")# 创立一个哮天犬对象xtq = XiaoTianQuan()xtq.bark()![](/img/bVc2gBa)执行后果: ...

September 8, 2022 · 1 min · jiezi

关于python:Python身份运算符is-is-not

在python中有两个身份运算符,一个是is另外一个是is not。作用:身份运算符用于比拟两个对象的内存地址是否统一——是否对同一个对象的援用。在python中针对None比拟时,倡议应用is判断。 一、Is 与 == 的区别:is 用于判断两个变量援用对象是否为同一个。== 用于判断援用变量的值是否相等。代码验证: a = [1, 2, 3]print(id(a)) # 变量a地址b = [1, 2, 3, 4]print(id(b)) # 变量b地址a.append(4)print(a)print(a is b)print(a == b)执行后果: 二、批改士兵突击面向对象封装案例在之前的面向对象封装士兵突击案例中就用到了None这个关键字,过后是利用==来进行判断的,然而依照编码标准倡议应该应用is来进行判断,所以在这里略微的批改一下代码。上面是之前的士兵突击案例批改is之前的残缺代码:在批改之前代码执行并没有谬误。 class Gun(): def __init__(self, model): # 1. qiang的型号 self.model = model # 2. 子弹的数量,初始值为0 self.bullet_count = 0 def add_bullet(self, count): self.bullet_count += count def shoot(self): # 1. 判断子弹数量 if self.bullet_count <= 0: print("[%s] 没有子弹了" % self.model) return # 2. 发射子弹, -1 self.bullet_count -= 1 # 提醒发射信息 print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count))class Soldier(): def __init__(self, name): # 1. 姓名 self.name = name # 2. qiang = 新兵没有枪 self.gun = None def fire(self): # 1. 判断是否有枪 if self.gun == None: print("[%s]还没有qiang" % self.name) return # 2. 高喊冲锋口号 print("冲啊。。。 [%s]" % self.name) # 3. 装填子弹 self.gun.add_bullet(50) # 4. 发射子弹射击 self.gun.shoot()# 1. 创立qiang对象ak47 = Gun("Ak47")# 2. 调用办法# ak47.add_bullet(50)# ak47.shoot()# 3. 创立士兵对象-张小嘎zhang = Soldier("张小嘎")# 用赋值语句,把ak47交给张小嘎zhang.gun = ak47zhang.fire()# print(zhang.gun)在批改之前能够看出PyCharm给这行代码标注了虚线,那么在批改之后虚线就没了。上面就对于这部分代码进行批改: ...

September 7, 2022 · 1 min · jiezi

关于python:Python对象私有属性和私有方法伪私有属性和伪私有方法

一、利用场景和定义形式利用场景 在理论开发中,对象的某些属性或办法可能只心愿在对象的外部被应用,而不心愿在内部被拜访到公有属性就是对象不心愿公开的属性公有办法就是对象不心愿公开的办法定义形式:在定义属性或形式时,在属性名或者办法名前减少两个下划线,定义的就是公有属性或发办法。如:个别女人的年龄是属于比拟隐衷的代码:class Women(): def __init__(self, name): self.name = name self.age = 28 def secret(self): print("%s的年龄是 %d" % (self.name, self.age))xiaoxia = Women("小夏")print(xiaoxia.age)xiaoxia.secret()执行后果: 1.上面利用公有属性来批改代码:执行后果:报错——通知咱们女人这个对象没有__age属性总结:公有属性在外界是不可能被间接拜访的 2. 把print(xiaoxia.__age)这段代码正文掉,来看看带有公有公有属性的办法能不能执行答案:能够执行 总结:在对象的办法外部,是能够拜访对象的公有属性的 3. 看看公有办法能不能执行,批改代码:总结:公有办法在外界也是不可能被间接拜访的 二、【科普】伪公有属性和伪公有办法提醒:在日常开发中,不要应用这种形式,拜访对象的公有属性或公有办法。Python中,并没真正意义的公有。 在给属性、办法命名时,理论是对名称做了一些非凡解决,使得外界无法访问到解决形式:在名称后面加上 _类名 =》 _类名_名称*把公有属性和公有办法革新后让其在外界也能被拜访到:革新之前:* 革新之后: 在日常开发中并不要去拜访对象的公有属性或者公有办法,因为公有属性和公有办法是对象的隐衷,既然是隐衷在外界就不要轻易去拜访。 更多对于Python基础知识和进阶常识都能够去Python自学网(www.wakey.com.cn/)学习,还有Python学习路线解说。

September 7, 2022 · 1 min · jiezi

关于python:解决fastapi-中-APScheduler-与-uvicorn-冲突问题qbit

问题形容环境 Ubuntu 20.04Python 3.8.5APScheduler 3.8.x/3.9.xuvicorn 0.15.0 - 0.17.6在上述环境下,APScheduler 的定时工作不能运行uvicorn 0.14.0 与 APScheduler 搭配无此问题在 Windows 下 uvicorn 与 APScheduler 任意版本搭配也无此问题解决办法在 app 的 startup 事件中启动定时器即可 @app.on_event("startup")async def start_scheduler(): AsyncSched = AsyncIOScheduler(timezone="Asia/Shanghai") scheduler.add_job(...) scheduler.start()参考 uvicorn can't reload when i use apscheduler and fastapi together本文出自 qbit snap

September 6, 2022 · 1 min · jiezi

关于python:Python面向对象封装案例3士兵突击

分装: 封装是面向对象编程的一大特点面向对象编程的第一步:将属性和办法分装到一个形象的类中外界应用类创建对象,而后让对象调用办法对象办法的细节都被封装在累的外部留神:一个对象的属性能够是另外一个类创立的对象一、士兵突击案例需要剖析需要: 士兵张小嘎 有一把 Ak47士兵 能够 停火qiang 可能 发射子弹qiang 须要 装填子弹----减少子弹数量依据需要,划分类,共划分两个类,一个是士兵类,一个是qiang类,因为创立士兵类中用到qiang,所以在创立类的时候先创立qiang类。 二、创立qiang类依据下面的类图表格来创立qiang类。model是qiang的型号,bullet_count是子弹的数量,add_bullet(self, count)装填子弹办法,Shoot(self)是发射子弹办法。代码: class Gun(): def __init__(self, model): # 1. qiang的型号 self.model = model # 2. 子弹的数量,初始值为0 self.bullet_count = 0 def add_bullet(self, count): self.bullet_count += count def shoot(self): # 1. 判断子弹数量 if self.bullet_count <= 0: print("[%s] 没有子弹了" % self.model) return # 2. 发射子弹, -1 self.bullet_count -= 1 # 提醒发射信息 print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count))# 1. 创立qiang对象ak47 = Gun("Ak47")# 2. 调用办法ak47.add_bullet(50)ak47.shoot()执行后果: ...

September 6, 2022 · 2 min · jiezi

关于python:Python面向对象封装案例2摆放家具

上一篇文章曾经有一个面向对象分装案例了叫“小夏爱跑步”,绝对这个摆放家具案例是非常简单的,知识点是回顾初始化办法__init__和__str__办法,还有拓展一个知识点——多个的对象属性之间互不烦扰。 一、面向对象封装案例——摆放家具需要剖析需要:1.房子(House)有户型、总面积和家具名称列表(1)新房子没有任何家具 家具(HouseItem)有名字和占地面积,其中(1) 席梦思(bed)占地4平方米(2) 衣柜(chest)占地2.5平方米(3) 餐桌(table)占地2平方米3.将以上三件家具增加到房子中4.打印房子时,要求输入:户型、总面积、残余面积、家具名称列表剖析:其中增加家具的增加办法应该定义在房子类中,因为房子初始是没有家具的,应用增加家具的办法add_item(self, item)就能够把家具这个参数item对应的家具名称追加到item_list列表,这样每调用一次办法房子中的家具列表中就会多一个家具,因而应该把增加家具的办法定义在房子中。 残余面积: 在创立房子对象时,定义一个残余面积的属性,初始值和总面积相等当调用add_item办法,向房子增加家具时,让残余面积-=家具面积思考一个问题:有两个类,应该先开发哪一个类?答案:家具类起因: 家具类简略房子类要应用到家具,被应用的类,通常应该先开发。不然如果先开发房子类,再开发到家具那一块代码时不得终止再转向来开发家具类这种办法不太理智。二、开发家具类以及创立家具对象依据上图中家具类能够看出有2个形参,别离是家具名字和占地面积代码: class HouseItem: # 初始化办法:简化对象的创立 def __init__(self, name, area): # self.属性 = 形参 self.name = name self.area = area # 内置办法__str__(self):简化对象的输入 def __str__(self): # 这个办法须要留神必须要返回一个字符串 # .2f 示意在遇到小数的时候只保留2位小数 return "[%s] 占地面积是%.2f 平方米" % (self.name, self.area)# 1. 创立家具对象bed = HouseItem("席梦思", 4)chest = HouseItem("衣柜", 2.5)table = HouseItem("餐桌", 2)print(bed)print(chest)print(table)执行后果: 三、定义房子类在上述代码中再增加房子类。看最下面的图,能够看出在房子类中有四个属性,其中房子户型和总面积这两个参数应该由外界传递,而残余面积free_area怎么办?一个新房子没有任何的家具初始状况下残余面积就等于总面积,所以残余面积不须要外界参数传递。第四个参数家具名称列表item_list,新房子一开始没有家具,初始的时候只是一个空列表,所以在筹备参数的时候只须要筹备两个形参别离是house_type和area。代码: class HouseItem: # 初始化办法:简化对象的创立 def __init__(self, name, area): # self.属性 = 形参 self.name = name self.area = area # 内置办法__str__(self):简化对象的输入 def __str__(self): # 这个办法须要留神必须要返回一个字符串 # .2f 示意在遇到小数的时候只保留2位小数 return "[%s] 占地面积是%.2f 平方米" % (self.name, self.area)class House(): def __init__(self, house_type, area): self.house_type = house_type self.area = area # 残余面积 self.free_area = area # 残余面积初始值是总面积 # 家具名称列表 self.item_list = [] # 家具列表一开始是一个空列表 def __str__(self): # python小技巧: Python可能主动的将一对括号外部的代码连贯在一起不出错,因为代码过程所以这里用了小括号 return ("户型:%s\n总面积:%.2f [残余面积:%.2f]\n家具:%s" % (self.house_type, self.area, self.free_area, self.item_list)) # 增加家具办法 def add_item(self, item): print("要增加%s" % item)# 1. 创立家具对象bed = HouseItem("席梦思", 4)chest = HouseItem("衣柜", 2.5)table = HouseItem("餐桌", 2)print(bed)print(chest)print(table)# 2. 创立房子对象house1 = House("两室一厅", 80)# 调用增加办法,把家具都增加到新房子中house1.add_item(bed)house1.add_item(chest)house1.add_item(table)print(house1)执行后果: ...

September 6, 2022 · 2 min · jiezi

关于python:protoc工具使用python

下载地址 https://github.com/protocolbuffers/protobuf/releases依据本人运行环境下载对应zip包解压缩并将protoc.exe运行的bin目录增加到环境变量创立xxx.proto文件 syntax = "proto3";#前边为参数类型,后边为对应的参数名message PolicyInfoByTypeIdParam{ string city=4; uint32 pageNum=8;};依据命令生成python可调用文件 protoc -I=./ policy.proto --python_out=./-I:.proto文件门路python_out:生成的python可调用文件门路python调用办法 导入办法名,此名对应.proto文件办法名from xxx import PolicyInfoByTypeIdParampolicy = PolicyInfoByTypeIdParam()policy.city = ''policy.pageNum = 1#输入转换后的后果print(policy.SerializeToString())

September 6, 2022 · 1 min · jiezi

关于python:使用-Mypy-检查-30-万行-Python-代码总结出-3-大痛点与-6-个技巧

作者:Charlie Marsh 译者:豌豆花下猫@Python猫 英文:Using Mypy in production at Spring (https://notes.crmarsh.com/usi...) 在 Spring ,咱们保护了一个大型的 Python 单体代码库(英:monorepo),用上了 Mypy 最严格的配置项,实现了 Mypy 全笼罩。简而言之,这意味着每个函数签名都是带注解的,并且不容许有隐式的 Any 转换。 (译注:此处的 Spring 并不是 Java 中那个驰名的 Spring 框架,而是一家生物科技公司,专一于找到与年龄相干的疾病的疗法,2022 年 3 月曾取得比尔&梅琳达·盖茨基金会 120 万美元的赞助。) 诚然,代码行数是一个蹩脚的衡量标准,但可作一个粗略的预计:咱们的代码仓有超过 30 万行 Python 代码,其中大概一半形成了外围的数据平台,另一半是由数据科学家和机器学习研究员编写的终端用户代码。 我有个大胆的猜想,就这个规模而言,这是最全面的加了类型的 Python 代码仓之一。 咱们在 2019 年 7 月首次引入了 Mypy,大概一年后实现了全面的类型笼罩,从此成为了高兴的 Mypy 用户。 几周前,我跟 Leo Boytsov 和 Erik Bernhardsson 在 Twitter 上对 Python 类型有一次简短的探讨——而后我看到 Will McGugan 也对类型大加赞叹。因为 Mypy 是咱们在 Spring 公司公布和迭代 Python 代码的要害局部,我想写一下咱们在过来几年中大规模应用它的教训。 ...

September 5, 2022 · 5 min · jiezi

关于python:python的环境你再也不用愁conda

Conda Guide Conda简介conda是一个包,依赖和环境管理工具,实用于多种语言,如: Python, R, Scala, Java, Javascript, C/ C++, FORTRAN。 利用场景:比方在A服务器开发了一个利用,装置了N个包。当初要迁徙到B服务器,又要重新安装一遍,还不晓得A服务器上哪些包是必须的。conda就是解决这种问题,把该利用须要的包都装置到利用所在的环境中,迁徙的时候,只有把环境导出,再导入到B环境即可。 Conda的装置装置过程windows的装置就不演示了,间接在网上搜miniconda安装包,而后一路点下一步即可装置实现。下边解说linux下的装置 创立condarc.mirror文件 channels: - conda-forge - bioconda - defaultsshow_channel_urls: truedefault_channels: - https://mirrors.bfsu.edu.cn/anaconda/pkgs/main - https://mirrors.bfsu.edu.cn/anaconda/pkgs/r - https://mirrors.bfsu.edu.cn/anaconda/pkgs/msys2custom_channels: conda-forge: https://mirrors.bfsu.edu.cn/anaconda/cloud msys2: https://mirrors.bfsu.edu.cn/anaconda/cloud bioconda: https://mirrors.bfsu.edu.cn/anaconda/cloud menpo: https://mirrors.bfsu.edu.cn/anaconda/cloud pytorch: https://mirrors.bfsu.edu.cn/anaconda/cloud simpleitk: https://mirrors.bfsu.edu.cn/anaconda/cloudcurl -L -o /tmp/miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-py39_4.11.0-Linux-x86_64.sh/bin/bash /tmp/miniconda.sh -b -p /opt/condarm /tmp/miniconda.shconda clean -tipsyfind /opt/conda -follow -type f -name '*.a' -deletefind /opt/conda -follow -type f -name '*.pyc' -deleteconda clean -afycp ./condarc.mirror /root/.condarc更新condaconda update conda镜像服务器conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/freeconda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forgeconda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/biocondaconda config --set show_channel_urls yes# 执行完上述命令后,会在Users目录生成.condarc环境治理查看所有环境conda env list新建环境conda create --name [name] python_or_othersps: conda create --name FastAPI python=3.9.12进入环境conda activate env_name退出环境conda deactivate删除环境conda remove -n env_name --all复制环境conda create --clone ENVNAME --name NEWENVpackage治理列出packageconda list列出指定环境中的所有软件包 ...

September 5, 2022 · 1 min · jiezi

关于python:python-and-运算符的妙用优雅的切换-range-和-count

有这么一个问题,如何优雅的实现一个函数,当参数 limit 为 0 的时候,应用有限迭代,当 limit 大于 0的时候,无限迭代: 间接解谜后果: from loguru import loggerfrom itertools import countdef func(limit: int = 0): for i in limit and range(limit) or count(): yield ifor i in func(): logger.debug(i)如果你对这个 limit and range(limit) or count() 语法不了解,能够先看看官网文档:布尔运算 --- and, or, not 咱们来一点点解析这个语法: 当 limit 为 0 的时候,咱们来看看是个什么状况吧: In [8]: limit=0In [9]: limit and range(limit)Out[9]: 0能够看到,当 limit 不成立的时候,limit and range(limit) 的后果就是 limit In [12]: from itertools import countIn [13]: 0 or count()Out[13]: count(0)当 limit 成立的时候,limit and range(limit) 就是后者 ...

September 4, 2022 · 1 min · jiezi

关于python:eventlet-的-link-函数用法

在看 nameko 的源码的时候,常常看到 gt.link(self._handle_thread_exited) 的用法 def spawn_managed_thread(self, run_method): """ Spawn a lifecycle-managed thread, which calls the ``run_method`` once it has been started. Any errors raised inside the ``run_method`` cause the container to be killed. It is the entrypoint provider's responsibility to react to ``stop()`` calls and terminate it's spawned threads. Threads are killed automatically by the container if they are still running after all their providers have been stopped. Entrypoints may only create separate threads using this method, to ensure they are life-cycle managed. """ gt = eventlet.spawn(run_method) self._active_threads.add(gt) gt.link(self._handle_thread_exited) return gteventlet 的文档中,并没有形容这个 api 是干嘛的,所以我看了一下 eventlet 源码,其中有对于他的正文: ...

September 4, 2022 · 2 min · jiezi

关于python:Python面向对象封装案例1小夏爱跑步案例扩展多个对象之间属性互不干扰

一、理解面向对象的封装封装是面向对象编程的一大个性,当咱们面向对象编程的时候第一步就是先做需要剖析而后依据明确的职责将不同的属性和办法封装到一个又一个形象的类中。之所以说是形象的类,因为在开发程序中类是不能间接应用的,当定义好一个类之后,在外界也就是类的代码内部来应用类创建对象,而后再让这个对象去调用咱们封装在类中的各个办法。 强调一点:对象办法的细节都是被封装在类的外部的,在外界只须要应用类创建对象,而后让对象调用办法。 总结: 封装是面向对象编程的一大特点面向对象编程的第一步:将属性和办法分装到一个形象的类中外界应用类创建对象,而后让对象调用办法对象办法的细节都被封装在累的外部二、封装案例——小夏爱跑步2.1 需要剖析需要: 小夏体重55.5公斤小夏每次跑步会减体重0.5公斤小夏每次吃货色体重会减少1公斤当看到需要后,应该用名词提炼法把需要中的名词提炼出。在需要中能够看出有个叫小夏的人类,那么能够定义一个叫做Person的类,在这类中而后看出这个人类的其余属性特色,比方名字和体重别离用name和weight来记录。以上是需要中的名词属性接下来看需要中的动词,不难看出跑步和吃货色是动词,那么在类中定义两个办法,一个run(self)一个eat(self)。再看需要,跑步和吃饭都会影响到体重这个属性,每次跑步会减体重0.5公斤,每次吃货色体重会减少1公斤。 这个案例次要温习之前的__init__初始化办法,利用这个初始化办法来简化对象的创立,同时温习一下__str__这个内置办法,通过这个办法来简化一下小夏对象的输入。 2.2 代码下图是实现了一大半的代码,剩下两个办法没有实现,目前用pass占位符代替,只是先看看代码总体有没有出错,是否能够失常运行,结果显示时没问题的。接下来在写类中具体的两个办法。 残缺代码: class Person: # 初始化办法:简化对象的创立 def __init__(self, name, weight): # self.属性 = 形参 self.name = name self.weight = weight # 内置办法__str__(self):简化对象的输入 def __str__(self): # 这个办法须要留神必须要返回一个字符串 # .2f 示意在遇到小数的时候只保留2位小数 return "我的名字叫 %s 体重是%.2f 公斤" % (self.name, self.weight) def run(self): print("%s 爱跑步,跑步能够锻炼身体也能够减肥" % self.name) # 每次跑步体重缩小0.5公斤 self.weight -= 0.5 def eat(self): print("%s 爱吃,是个吃货" % self.name) # 每次吃货色体重增加1公斤 self.weight += 1# 创立小夏对象xiaoxia = Person("小夏", 55.5)xiaoxia.run()xiaoxia.eat()print(xiaoxia)运行后果: ...

September 3, 2022 · 1 min · jiezi

关于python:某课构建数据工程师能力模型实战八大企业级项目wu密

download:百度网盘需要对于须要前端实现无痛刷新Token,无非就两种: 申请前判断Token是否过期,过期则刷新申请后依据返回状态判断是否过期,过期则刷新 解决逻辑实现起来也没多大差异,只是判断的地位不一样,外围原理都一样: 判断Token是否过期 没过期则失常解决过期则发动刷新Token的申请 拿到新的Token保留从新发送Token过期这段时间内发动的申请 重点: 放弃Token过期这段时间发动申请状态(不能进入失败回调)把刷新Token后从新发送申请的响应数据返回到对应的调用者 实现 创立一个flag isRefreshing 来判断是否刷新中创立一个数组队列retryRequests来保留须要从新发动的申请判断到Token过期 isRefreshing = false 的状况下 发动刷新Token的申请 刷新Token后遍历执行队列retryRequests isRefreshing = true 示意正在刷新Token,返回一个Pending状态的Promise,并把申请信息保留到队列retryRequests中 import axios from "axios";import Store from "@/store";import Router from "@/router";import { Message } from "element-ui";import UserUtil from "@/utils/user"; // 创立实例const Instance = axios.create();Instance.defaults.baseURL = "/api";Instance.defaults.headers.post["Content-Type"] = "application/json";Instance.defaults.headers.post["Accept"] = "application/json"; // 定义一个flag 判断是否刷新Token中let isRefreshing = false;// 保留须要从新发动申请的队列let retryRequests = []; // 申请拦挡Instance.interceptors.request.use(async function(config) { Store.commit("startLoading"); const userInfo = UserUtil.getLocalInfo(); if (userInfo) { ...

September 3, 2022 · 2 min · jiezi

关于python:django-获取带-count-的-queryset-对应的-sql-语句

参考文章:如何查看Django ORM查问集的原生SQL?Django如何查看ORM对应的sql 语句

September 2, 2022 · 1 min · jiezi

关于python:python

变量作用域 . global: 模块文件顶部的变量,函数外部默认不容许批改global的变量,如果要批改,须要在函数外部先申明a = "i am global"def fun1(): global a # global 申明 a += ", I am changed" # 批改全局变量 print(a). local:函数外部定义的待补充参考:变量作用域 文件查找

September 2, 2022 · 1 min · jiezi

关于python:重装系统后Python打开原来项目文件不能使用原有的虚拟环境的问题

问题形容:因为原来零碎运行速度变慢,重装了win10零碎。然而在关上原来的一个工程项目的时候,不能配置原有的虚拟环境,报谬误:Python packaging tools not found.install packaging tools。 1 配置原有虚拟环境办法关上file->settings->Project,而后依照上面操作把原来本人的虚拟环境配置上来。而后抉择原来我的项目的虚拟环境,如下操作。 2 报错提醒要我依照包文件,点击install packaging tools进行装置,于是报上面的谬误。提醒No Python at "C:\Program Files\python3.7" 点击OK平安,持续报错Invalid Python SDK.cannot set up a python SDK at Python 3.7....The SDK seems invalid. 既然提醒是No Python at "C:\Program Files\python3.7",那么咱们查一下重装系统之后的python文件是在哪个目录。发现以后零碎装置的python在C:\Users\Administrator\AppData\Local\Programs\Python\Python37,的确与原有的零碎的门路不统一。剖析应该就是此起因引起的报错,那么应该在哪里批改呢?既然能读取到原有我的项目的python文件目录,阐明是写在配置文件中,于是关上原来虚拟环境上面的文件查找一下,发现pyevnv.cfg就是配置文件。关上此文件,外面的内容如下: home = C:\Program Files\python3.7include-system-site-packages = trueversion = 3.7.4 3 解决办法果然,home配置的是原来的门路,那么把此门路在批改一下,而后把version也批改一下。留神:version最好是统一,如果曾经装置,那么至多必须是3.7.x的版本,不能是3.8或者往后的版本,不然很容易呈现兼容性问题。依照我目前的python版本零碎,批改配置文件如下: home = C:\Users\Administrator\AppData\Local\Programs\Python\Python37include-system-site-packages = trueversion = 3.7.9而后依照 1 配置原有虚拟环境的办法 操作再执行一边,就根本能够了。

September 2, 2022 · 1 min · jiezi

关于python:Flet基于Flutter的Python跨平台开发框架

什么是FletFlet是一个框架,容许用你喜爱的语言构建交互式多用户Web,桌面和挪动应用程序,而无需领有前端开发的教训。 次要特点在几分钟内从想法到应用程序为您的团队,周末我的项目,数据输出表单,kiosk应用程序或高保真原型提供的外部工具或仪表板 - Flet是一个现实的框架,能够疾速破解一个好看的交互式应用程序,为一组用户提供服务。 简略的架构没有更简单的架构与JavaScript前端,REST API后端,数据库,缓存等。应用Flet,您只需在Python中编写一个整体式有状态应用程序,即可取得多用户实时单页应用程序(SPA)。 包含电池要开始应用 Flet 进行开发,您只须要本人喜爱的 IDE 或文本编辑器。没有 SDK,没有成千上万的依赖项,没有简单的工具 - Flet 具备内置的 Web 服务器,其中蕴含托管资产和桌面客户端。 由Flutter提供能源Flet UI是用Flutter构建的,所以你的应用程序看起来很业余,能够交付到任何平台。Flet通过将较小的“小部件”组合成具备命令式编程模型的即用型“控件”来简化Flutter模型。 语言无关Flet 与语言无关,因而团队中的任何人都能够用本人喜爱的语言开发 Flet 应用程序。Python曾经失去反对,Go,C#和其余产品紧随其后。 交付到任何设施将 Flet 利用部署为 Web 利用,并在浏览器中查看它。将其打包为实用于Windows,macOS和Linux的独立桌面应用程序。将其作为PWA装置在挪动设施上,或通过实用于iOS和Android的Flet应用程序查看。 装置应用pip install flet一个简略的计数示例import fletfrom flet import IconButton, Page, Row, TextField, iconsdef main(page: Page): page.title = "Flet counter example" page.vertical_alignment = "center" txt_number = TextField(value="0", text_align="right", width=100) def minus_click(e): txt_number.value = int(txt_number.value) - 1 page.update() def plus_click(e): txt_number.value = int(txt_number.value) + 1 page.update() page.add( Row( [ IconButton(icons.REMOVE, on_click=minus_click), txt_number, IconButton(icons.ADD, on_click=plus_click), ], alignment="center", ) )flet.app(target=main)运行程序: ...

September 2, 2022 · 1 min · jiezi

关于python:kombu-的-serializer-选择-json-和-yaml-有什么区别

前言kombu 投递 message 的时候,反对多种序列化形式: jsonyamlpickle明天的主题就是,看看一个 dict 别离被这三种序列化形式序列化后,message 会长成什么样子(以 rabbitmq 治理界面的样子为准) 试验先筹备一个 dict ,value 的 type 有 str、int、datetime、sub dict 等多种类型 data = { 'name': 'jike', 'age': 18, 'birthday': get_utc_now_timestamp(), 'score': { 'math': 100, 'science': 99.5, 'english': 59 }}咱们先来看看不指定 serializer 是一个什么后果: with Connection(amqp_uri) as conn: with conn.channel() as channel: started_at = time.time() message = Message(channel=channel, body=data) producer = Producer( channel, exchange=imdb_exchange ) res = producer.publish( body=message.body, routing_key='to_refresh', headers=message.headers ) ended_at = time.time() logger.debug(f'pay time {ended_at-started_at} s')能够看到,因为 message 的 body 是 dict,所以 kombu 即使在 serializer 缺失的状况下,也抉择依照 json 进行序列化 ...

September 2, 2022 · 2 min · jiezi

关于python:人均瑞数系列瑞数-5-代-JS-逆向分析

申明本文章中所有内容仅供学习交换应用,不用于其余任何目标,不提供残缺代码,抓包内容、敏感网址、数据接口等均已做脱敏解决,严禁用于商业用途和非法用处,否则由此产生的所有结果均与作者无关! 本文章未经许可禁止转载,禁止任何批改后二次流传,擅自应用本文解说的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】分割作者立刻删除! 前言 瑞数动静平安 Botgate(机器人防火墙)以“动静平安”技术为外围,通过动静封装、动静验证、动静混同、动静令牌等技术对服务器网页底层代码继续动静变换,减少服务器行为的“不可预测性”,实现了从用户端到服务器端的全方位“被动防护”,为各类 Web、HTML5 提供弱小的平安爱护。 在 K 哥往期的文章《人均瑞数系列,瑞数 4 代 JS 逆向剖析》中,具体介绍了瑞数的特色、如何辨别不同版本、瑞数的代码构造以及各自的作用,本文就不再赘述了,不理解的同志能够先去看看之前的文章。 Cookie 入口定位本文案例中瑞数 5 代网站为:aHR0cHM6Ly93d3cubm1wYS5nb3YuY24vZGF0YXNlYXJjaC9ob21lLWluZGV4Lmh0bWw= 定位 Cookie,首选 Hook 来的最快,通过 Fiddler 插件、油猴脚本、浏览器插件等形式注入以下 Hook 代码: (function() { // 谨严模式 查看所有谬误 'use strict'; // document 为要hook的对象 这里是hook的cookie var cookieTemp = ""; Object.defineProperty(document, 'cookie', { // hook set办法也就是赋值的办法 set: function(val) { // 这样就能够疾速给上面这个代码行下断点 // 从而疾速定位设置cookie的代码 console.log('Hook捕捉到cookie设置->', val); debugger; cookieTemp = val; return val; }, // hook get 办法也就是取值的办法 get: function() { return cookieTemp; } });})();断下之后往上跟栈,能够看到组装 Cookie 后赋值给 document.cookie 的代码,相似如下构造: ...

September 1, 2022 · 5 min · jiezi

关于python:Python对象的内置方法del和str的介绍和使用

一、内置办法: 1.1 __del__办法在python中,当应用类名()创建对象时,为对象调配完空间后,主动调用__init__办法,当一个对象被从内存中销毁前,会主动调用__del__办法。(__del__英文状态下的del左右一边各两个下划线) 利用场景:init : 革新初始化办法,能够让创建对象更加灵便。del :如果心愿在对象被销毁前再做一些事件,能够考虑一下__del__办法。 生命周期:一个对象从调用类名()创立,生命周期开始。一个对象的__del__办法一旦被调用,生命周期完结。在对象的生命周期内,能够拜访对象属性或者让对象调用办法。 1.1.1 __del__代码演练首先先来一段没有__del__办法的代码 class Cat: def __init__(self, new_name): self.name = new_name print("%s来了" % self.name)black = Cat("小黑")print(black.name)执行后果: 再来一段有__del__办法的代码 class Cat: def __init__(self, new_name): self.name = new_name print("%s来了" % self.name) def __del__(self): print("%s走了" % self.name)black = Cat("小黑")print(black.name)执行后果: 执行后果有小黑走了,然而咱们并没有调用__del__办法,因为这个办法是在对象被从内存中销毁之前由零碎主动调用的。再次革新以上代码,减少一个分隔线: class Cat: def __init__(self, new_name): self.name = new_name print("%s来了" % self.name) def __del__(self): print("%s走了" % self.name)black = Cat("小黑")print(black.name)print("-" * 30)问题:此时能够猜一猜,小黑走了是在分隔线下面输入还是上面输入?答案:在分隔线下方输入。起因:因为black这个变量在以后模块中是全局变量,所以当所有的代码实现执行之后,零碎会把black这个变量进行回收,在回收之前就主动执行了__del__办法。执行后果: 应用del办法删除black对象代码: class Cat: def __init__(self, new_name): self.name = new_name print("%s来了" % self.name) def __del__(self): print("%s走了" % self.name)black = Cat("小黑")print(black.name)del blackprint("-" * 30)执行后果:小黑走了在下划线下方输入 ...

September 1, 2022 · 1 min · jiezi

关于python:Python中面向对象初始化方法什么时候被调用怎么设置初始值

一、在类的内部减少属性 - 存在问题上一篇中在类的内部给对象减少属性,这种减少属性的办法存在问题。先将案例代码进行调整,察看一下执行后果: 先调用办法再设置属性 AttributeError: 'Cat' object has no attribute 'name': 属性谬误:Cat对象没有’name’属性 提醒:在日常生活中,不举荐在类的内部给对象减少属性,如果在运行时没有找到属性,程序会报错,对象蕴含那哪些属性,应该封装在类的外部。 二、初始化办法2.1创建对象时主动调用调用初始化办法在应用类名()创建对象时,解释器会主动执行以下操作: 为对象在内存中调配空间-------》创建对象为对象的属性设置初始值-------》初始化办法(init)这个初始化办法就是__init__办法,__init__是对象的内置办法 在python中,__init__办法是专门用来定义一个类具备哪些属性的办法。 在Cat中减少__init__办法,验证该办法在创建对象时会被主动调用: class Cat: def __init__(self): print("这是一个初始化办法")# 应用类名()创建对象的时候,会主动调用初始化办法 __init__black = Cat() 执行后果: 2.2 在初始化办法外部定义属性在__init__办法外部应用self.属性名 = 属性的初始值  就能够定义属性。 定义属性之后,再应用Cat类创立的对象,都会领有该属性。 class Cat: def __init__(self): print("这是一个初始化办法") # self.属性名 = 属性的初始值 self.name = "黑黑" def eat(self): print("%s爱吃罐头" % self.name)# 应用类名()创建对象的时候,会主动调用初始化办法 __init__black = Cat()print(black.name)black.eat() 执行后果: 2.3 初始化的同时设置初始值在开发中,如果心愿在创建对象的同时就设置的对象的属性,能够对__init__办法进行革新 把心愿设置的属性值,定义成__init__办法的参数在办法外部应用self.属性 = 形参  接管内部传递的参数在创建对象时,应用类名(属性1,属性2...)调用下面代码中,如果你在创立一个对象,并调用eat(),仍旧是黑黑爱吃罐头,这样name属性就被固定死了,就不能很灵便的被使用,所以要进行革新。 革新后代码如图:给办法加个形参 更多相干Python面向对象知识点可关注python自学网 www.wakey.com.cn

September 1, 2022 · 1 min · jiezi

关于python:Python面向对象基本语法2引用概念方法中的self参数

一、强调援用的概念在面向对象开发中,援用的概念是同样实用的。在python中应用类创建对象后,tom变量中依然记录的是对象在内存中的地址,也就是tom变量援用了新建的猫对象。应用print输入对象变量,默认状况下,是可能输入这个变量援用的对象是由哪一个类创立的对象,以及在内存中的地址(十六进制示意)提醒: 在计算机中,通常应用十六进制示意内存地址。 (1) 十进制和十六进制都是用来表白数字的,只是示意的形式不一样(2) 十进制和十六进制的数字之间能够来回转换%d能够以十进制输入数字%x能够以十六进制输入数字代码: class Cat: def eat(self): print("小猫爱吃鱼") def drink(self): print("小猫要喝水")# 创立猫对象名字叫tomtom = Cat()# 调用对象的办法tom.eat()tom.drink()# 应用print输入对象变量print(tom)# 利用函数id()查问数据在内存中的地址addr = id(tom)print("%d" % addr) # %d能够以十进制输入数字print("%x" % addr) # %x能够以十六进制输入数字执行后果: __main__:前面介绍模块式再具体的阐明一下Cat:这个是下面代码中创立的猫类:object:示意对象的意思0x0000000002901160:内存地址Cat object at 0x0000000002901160:猫类创立的对象地址是0x0000000002901160 二、案例进阶需要:应用Cat类再创立一个对象black问题1:tom和black是同一个对象吗?问题2:black_2 和 black是什么关系?代码验证: class Cat: def eat(self): print("小猫爱吃鱼") def drink(self): print("小猫要喝水")# 创立猫对象名字叫tomtom = Cat()# 调用对象的办法tom.eat()tom.drink()print(tom)# 再创立一个对象叫blackblack = Cat()black.eat()black.drink()print(black)black_2 = blackprint(black_2)执行后果: 问题1答案:tom和black是同一个对象,因为从执行后果能够看出对象的地址是一样的问题2答案:black_2和black是同一个对象同一个猫,因为从执行后果能够看出对象的地址是一样的 在第22行代码中,在内存中为black调配一个小格子,而后把black这个标签贴在了这个小格子身上,在第29行代码,让black_2等于black就设想等把black_2也贴在了这个小格子身上。不论black_2也好还是black也好都是同一只猫。总结:在应用面向对象开发程序时,类能够只有一个,然而能够应用雷同的类创立出很多个不同的对象。 三、办法中的self参数3.1 案例革新 - 给对象减少属性在python中,要给对象设置属性非常容易,只须要在类的内部的代码中间接通过点.设置一个属性即可,然而不举荐应用,因为对象属性的封装应该封装在类的外部。留神:这种形式尽管简略,然而不举荐应用代码演示: # 能够应用.属性名 利用赋值语句就能够了tom.name = "Tom"black.name = "黑黑"残缺代码和执行后果如下图: 3.2 利用self在类封装的办法中输入对象属性由哪一个对象调用的办法,办法内的self就是哪一个对象的援用。在类封装的办法外部,self就示意以后调用办法的对象本人。在调用办法时:程序员不须要传递self参数在办法外部: 能够通过self. 拜访对象的属性,也能够通过self. 调用其余的对象办法. ...

September 1, 2022 · 1 min · jiezi

关于python:15款Python编辑器你都使用过哪一款

写 Python 代码最好的形式莫过于应用集成开发环境(IDE)了。它们不仅能使你的工作更加简略、更具逻辑性,还可能晋升编程体验和效率。 每个人都晓得这一点。而问题在于,如何从泛滥选项中抉择最好的 Python 开发环境。高级开发者往往面临这个问题。 本文将概述最受程序员欢送的 Python IDE,以及其余值得思考的选项。在此之前,咱们先来看看 IDE 是什么。 什么是 IDE?IDE 有什么用? IDE 是开发者创立程序时应用的软件包。它通过简略的用户界面集成多个高度关联的组件,从而最大化程序员的生产效率。实质上,IDE 是一种改良代码创立、测试和 debug 流程的工具,它使这些工作更加简略。 IDE 应用的工具包含: 文本编辑器编译器和/或解释器拆卸自动化工具(assembly automation tool)调试器(debugger)有一个与 IDE 类似的术语——代码编辑器(code editor)。咱们先来探讨二者的异同。 什么是代码编辑器? 代码编辑器是一个可能突出显示语法和安顿代码版式的文本编辑器。高级代码编辑器能够开发和批改代码。 IDE 和代码编辑器的显著特色 IDE 和代码编辑器有哪些独特长处?它们均可帮忙开发者: 存储和从新关上脚本运行代码debug突出显示语法最受 Python 开发者欢送的 IDE PyCharm 下载地址:https://www.jetbrains.com/pyc... PyCharm 由驰名软件开发公司 JetBrains 开发。在波及人工智能和机器学习时,它被认为是最好的 Python IDE。最重要的是,Pycharm 合并了多个库(如 Matplotlib 和 NumPy),帮忙开发者摸索更多可用选项。 兼容性:Windows、MacOS、Linux 次要插件和性能: 内置开发者工具近程开发能力实时编辑模式IPython Notebook长处: PyCharm 反对 web 开发框架,如 Pyramid、Flask 和 Django。提供智能代码性能,能够执行更准确、疾速的 bug 修复。在 Docker 和 Vagrant 连贯和 ssh 终端的帮忙下,容许在近程主机上进行程序开发。毛病: ...

September 1, 2022 · 2 min · jiezi

关于python:python将2个列表合并为一个字典-字符串转列表

# key 和 value 个数统一x = [1,2,3,4,5]y = ['a','b','c','d','e']res = dict(zip(y,x))print(res)print("===================")# key 和 value 个数不统一## key多x = [1,2]y = ['a','b','c']res = dict(zip(y,x))print(res)print("===================")## key少x = [1,2,3,4]y = ['a','b','c']res = dict(zip(y,x))print(res)print("===================")# 将字符串转换为列表temp_str = "['肯德基','麦当劳','华莱士']"temp_list = ast.literal_eval(temp_str)print(temp_list)print(type(temp_list))输入后果: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}{'a': 1, 'b': 2}{'a': 1, 'b': 2, 'c': 3}['肯德基', '麦当劳', '华莱士']<class 'list'> 原文链接:https://blog.csdn.net/qq_1724...

September 1, 2022 · 1 min · jiezi

关于python:Python中的类和对象

古代编程语言简直都反对面向对象编程,面向对象编程是最无效的软件编写办法之一。你能够用类和对象来示意事实当中的任何的事物和行为。 编写类时,你会定义某一类货色通用的特色和行为。而后通过类创建对象,每个对象都主动具备这个类的特色和行为,还能够赋予每个对象独特的共性。 通过这种形式,你简直能够把看到的任何事物用代码来示意。 比方咱们来形容一下“我开车去下班,车到半路没油了,于是我先加油” 这个一般的场景。 在这个场景中,波及到的人和物,有 “我”, "车", “油”, 这些人和物就能够通过对象来示意。 我是一个人,属于人这个类, 我的车属于 车这个类, 油就是属于油这个类。 还有动作和行为, 开车属于我的动作,加油也是属于我的动作。 出了动作和行为外,还有属性和状态,比方车没油, 加完油当前,有油了。 类和对象的语法略微有点简单,要了解的确有一点难度,这也是大多数学习编程的人最初抉择了放弃。 但其实只有学会把生存的当中的示例形象进去,类和对象没有想的那么难。 什么是类类是具备独特特色和独特行为的事物的统称。 所谓人以群分,物以类聚。 类的示意通常采纳驼峰式命名。 class Car: passclass Mobile: pass什么是对象对象(Object)是一类事物中的一个成员(个体), object 的中文是货色,对象又被称为实例,是一个实实在在存在的货色。 我的车你的车隔壁邻居的车 通过类失去对象,这个过程叫实例化,相似函数的调用。 my_car = Car()your_car = Car()类和对象的关系类就相当于建造房子时的施工图纸(blueprint),是一个模板,是负责创立房子(对象)的,通过类能够失去对象。 就如同玩动物大战僵尸的游戏,上方的卡片就相当于类, 拖动卡片就能够在下方的空地上失去一个对象。 my_car = Car()car_class = Carprint(type(my_car), type(car_class))属性整个类的特色,所有成员都统一,又被称为类变量。 class Car: wheel = True material = ["塑料", "铁", "铝合金", "橡胶"]获取类属性 print(Car.wheel)实例获取类属性 Car().wheel批改类属性 Car.wheel = False__init__ 初始化办法*__init__* 叫初始化办法,代表一个对象产生时的初始化过程。 比方一部手机生产进去后,须要贴 logo,设计型号,壁纸,屏幕亮度。 class Mobile: def __init__(self, brand, model, brightness): self.brand = brand self.model = model self.brightness = brightness print("Mobile 的品牌:{},型号:{},亮度:{}".format(brand, model, brightness))这个初始化办法有点非凡,在实例化一个对象时,会主动调用这个办法。 办法的第一个参数是 self, 它是一个固定的语法,示意对象自身,其余的 brand, model, brightness 这些参数和一般的函数参数一样,改传值的时候传入理论参数就能够。 ...

August 30, 2022 · 1 min · jiezi

关于python:subprocess-会阻塞-eventlet-的并发吗

如果不打猴子补丁,就会阻塞: import eventlet# eventlet.monkey_patch()from loguru import loggerimport subprocessdef func(): p = subprocess.Popen('time sleep 3', stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True, close_fds=True) out_str, err_str = p.communicate() p.wait() _process_result = out_str.decode(encoding='utf-8') logger.debug(_process_result)pool = eventlet.GreenPool()pool.spawn_n(func)pool.spawn_n(func)pool.spawn_n(func)pool.waitall()一共花了 9 秒 ─➤ time python -u "/home/bot/Desktop/ideaboom/test_evenetlet/need_lock_with_sleep.py"2022-08-30 01:04:52.159 | DEBUG | __main__:func:22 - 0.00user 0.00system 0:03.00elapsed 0%CPU (0avgtext+0avgdata 2240maxresident)k0inputs+0outputs (0major+124minor)pagefaults 0swaps2022-08-30 01:04:55.163 | DEBUG | __main__:func:22 - 0.00user 0.00system 0:03.00elapsed 0%CPU (0avgtext+0avgdata 2240maxresident)k0inputs+0outputs (0major+124minor)pagefaults 0swaps2022-08-30 01:04:58.172 | DEBUG | __main__:func:22 - 0.00user 0.00system 0:03.00elapsed 0%CPU (0avgtext+0avgdata 2208maxresident)k0inputs+0outputs (0major+122minor)pagefaults 0swapspython -u "/home/bot/Desktop/ideaboom/test_evenetlet/need_lock_with_sleep.py" 0.29s user 0.03s system 3% cpu 9.316 total如果打猴子补丁,就会不会阻塞: ...

August 30, 2022 · 1 min · jiezi

关于python:python基础知识Python函数

Python函数的定义函数是代码封装的一种伎俩,函数中蕴含一段能够反复执行的代码,在须要用到这些代码时,只须要调用函数,就会运行函数中的代码。 python 函数这么定义: def 函数名称(参数1, 参数2): 函数体(要运行的代码)比方一个很简略的函数定义: def add(a, b): return a + b当初咱们举个例子阐明函数的作用。 print('关上高级车门')print('开发动机')print('安全带')print('踩油门')print('把握方向')如果要开很屡次车,那么每次都须要敲雷同的 5 行代码,这样会造成几个问题: 很容易编写不同的代码,或者代码呈现谬误代码冗余,可读性不强不容易保护,当须要批改某个步骤时,要批改多处。Python函数的调用当初咱们能够把上述代码封装在函数中,当须要运行这些代码时,调用函数就能够了,这样缩小了很多复制粘贴或者手工编写多行代码的步骤,函数的名称也表明了代码的作用,当须要批改局部逻辑,只须要批改函数体就能够了。 def run_car(): print('关上高级车门') print('动员发动机') print('系上安全带') print('踩油门') print('把握方向')run_car()# 其余代码run_car()Python函数的返回值return 示意当函数执行完之后,想让函数里面的程序失去函数执行的后果, return 的值能够任意的数据类型。 def add(a, b): return a + bresult = add(3,4)print(result)函数体当中的代码, 遇到 return 会终止运行。函数的返回后果能够是任意类型,包含 None当函数体当中没有 return ,默认返回 NonePython函数能够返回多个值, 只须要在多个值之间加上逗号,失去的是元组类型。 def add(a, b): return a, b参数的四种类型return 示意函数返回给内部的值,而参数示意函数从内部接管的值。在函数定义时候的参数叫做形式参数,它其实就是一个变量名称,在函数调用时候的参数叫做理论参数,相当于给变量赋值。 def get_coffee(suger): if suger > 100: return '甜咖啡' elif suger < 1: return '美式' else: return '莫名其妙的咖啡'result = get_coffee(100)print(result)留神,形式参数的个数和理论参数的个数要一样,而且程序要统一,这种形式叫做地位参数。(和领导吃饭做地位)如果形式参数和理论参数的个数不统一,会导致程序无奈别离赋值: ...

August 29, 2022 · 1 min · jiezi

关于python:Python自学笔记10for循环和while循环

循环是另一种管制流程的形式,一个循环体中的代码在程序中只须要编写一次,但可能会间断运行屡次。在 python 中次要蕴含两种循环构造: while 循环,示意满足某种条件是,反复运行一段固定代码。for 循环,示意遍历某组数据,每次取出一个,反复运行一段固定代码。while 循环while 循环的语法和 if 条件十分相似: while expression: statement1当 expression 条件满足时,执行 statement1 语句, 语句执行完后,会返回第一行持续判断条件是否满足。如果该条件始终放弃满足状态,循环语句无奈退出,就会呈现死循环的状态。 while True: print("hello, you")为了让程序运行到肯定阶段退出循环体,须要扭转条件,当条件扭转到不满足的状态时,就能够退出循环构造了: times = 0while times < 1000: print(f"hello you {times}") times += 1for 循环for 循环是一种更加罕用的循环构造,次要作用遍历一组数据达到循环执行的成果。这组数据通常是字符串,列表,元素,字典等可迭代的数据。 my_string = 'hello you'for letter in my_string: print(letter)letter 是一个长期变量,示意每一轮循环从 my_string 中取出来的元素,第一轮循环是 h, 第二轮循环是 e 。长期变量在退出循环构造之后会生效。 for letter in my_string: print(letter) # YES print(letter) # NO遍历列表 dalaos = ['小芳', '和煦如初', '小蚊子']for dalao in dalaos: print(dalao)遍历字符串、列表、元组等数据时,能够应用 enumerate 函数同时获取索引和值,常常能够用到。 ...

August 29, 2022 · 2 min · jiezi

关于python:Python自学教程8数据类型有哪些注意事项

数据类型相对来说比较简单,然而有写注意事项不得不留神。 元组注意事项元组是另一种常常应用到的数据类型,看上去和列表差不多。它们之间的区别在于列表是一个可变的数据类型,而元组是不可变的。 #元组a = (1, 2)#列表a = [1, 2]应用列表会更灵便,而元组反对的操作更少,有的人会认为没有必要用元组,间接用列表就能够了。 但正因为元组不可变,限度了性能,从效率上来讲它会更放慢一些,而且,当你不想让用户去批改这个数据的时候,用元组会更适合,数据相对来说更加平安,不容易出bug。 应用元组的时候肯定要记得在元素的前面加逗号,当一个元组只有一个元素的时候,前面不打逗号,是不能示意成元组的,而是元素自身的类型。 a = (1) # 等于 1a = (1,) #这才是元组浮点数注意事项在编程语言当中,浮点数的精度往往不能达到齐全的准确,这会给咱们编程带来一些问题,甚至呢可能带来很大的bug。比如说咱们当初计算一个很简略的小数点的运算,0.1+0.2,大家能够先答复一下这个应该等于多少呢? print(0.1 + 0.2)很显著这是一个小学的数学题,然而呢,当咱们交给Python去运算的话呢,咱们失去后果并不是等于0.3而是等于 0.30000000000000004这是计算机在示意十进制小数的时候会呈现误差。 从直观的感触上看,这种精度如同造成不了太大的影响。然而,在对数据要求十分严格的状况下,这种误差会引发打的问题,尤其是在做测试的时候,如果你你的预期后果和理论后果都不相等,那么你测试用例必定是不会通过的。 在操作银行、证券这类金融业务时,波及到领取和钱的时候肯定要有十分严格的精度管制。 此时,能够应用 decimal 模块来放弃高精度,咱们把须要操作的浮点数先转换成字符串,再作为参数传给 Decimal 类。 from decimal import Decimalprint(Decimal("0.1") + Decimal("0.2"))# 0.3除法注意事项在进行除法运算的时候,肯定要牢记:被除数是不能等于0的。 当你把0作为一个被除数的时候,程序是会报错的。 print(3 / 0)列表注意事项面试题当中列表问题呈现的概率应该有80%以上,因为列表的操作十分频繁,而且比拟容易出错,当初咱们就来看一个经典问题:删除列表元素。 有一个列表如下,请删除列表当中的每一个元素,然而不能间接用clear办法。 names = ["九柄", "八柄", "七柄","六柄","五柄"]依照条件反射,咱们个别会写一个 for 循环,而后顺次执行remove办法或者 pop 办法来删除元素。然而这样失去的后果是不对的,总有几个元素删除不掉。 for name in names: names.remove(name)print(names)# ["八柄", "六柄"]为什么会删不洁净呢?最外围的起因是:删除掉一个元素之后,这个列表产生了变动。 第1次,咱们取到的元素是索引为0的 “九柄”, 它被删掉了之后, 接下来去取索引为 1 的元素,因为“九柄” 曾经被删除,所以索引为0的元素曾经被替换成 "八柄", 索引为1 的元素则为”七柄“, 七柄被删,八柄跳过去了,没有被删除。 ...

August 29, 2022 · 1 min · jiezi

关于python:Python自学教程5字符串有哪些常用操作

任何编程语言,不论是Python、Java 还是 Golang, 字符串都是最重要的一种数据类型。 然而字符串的操作又很多,初学者常常毫无脉络,不晓得从哪儿学起,也不晓得哪些操作用得多,明天九柄就和你来扒一扒Python当中,怎么应用字符串比拟适合。 字符串是什么能够说,你在世界上看到的任意文字都将以字符串的模式展现,任何数据和内容也都能够用字符串示意,为了不便,咱们就把字符串称为文字吧。 在 Python 中示意字符串有很多模式。在数据左右两边加一对引号,能够是单引号,双引号和三引号。引号是英文半角,全角会报错。 # 双引号 a = "jiubing" # 单引号 a = 'jiubing' # 三引号 a = '''jiubing''' a = """jiubing""" # 全角 Error a = ‘jiubing’三引号既能够示意字符串,又能够示意正文。它们的区别在于是否应用变量存储,没有存储的字符串,无奈复用,就是正文。 字符串如何获取某个字符从字面上看,字符串是用字符串起来的,和羊肉串、牛肉串差不多,在吃羊肉串的时候,有的人习惯一口一串,从签子底部用嘴一划,所有的肉都被收进嘴里, 而我看到一些女生,吃羊肉串十分斯文, 她会先用筷子把一块肉挑到碗里再吃。 字符串也能够一个个字符的取,大多数状况下,都能够应用索引形式失去某个繁多字符。索引的作用是取出一个字符,索引从0开始 man = "kang li" print(man[1]) #a print(man[0]) #k索引能够是正数,示意倒数第几个,也就是从字符串的左边数到右边。索引为 -1 示意获取倒数第一个字符,索引为 -2 示意获取倒数第二个字符。为什么正序数的索引从 0 开始,倒序就不能从 0 开始呢?因为索引为 0 不能同时示意两个字符,会造成指令的抵触。 print(man[-1]) #i超出索引范畴报 IndexError 谬误 print(man[8])字符串截取索引一次只能获取一个字符,切片能够一次获取多个。如果想获取字符串的某些子串,能够通过切片实现。切片的示意办法是:var[start: end]。 start 示意开始地位的索引号,end 示意完结地位的索引号, 然而不蕴含 end。 ...

August 29, 2022 · 2 min · jiezi

关于python:Python入门系列十一一篇搞定python操作MySQL数据库

开始装置MySQL驱动 $ python -m pip install mysql-connector-python测试MySQL连接器 import mysql.connector测试MySQL连贯 import mysql.connectormydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword")print(mydb)创立数据库import mysql.connectormydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword")mycursor = mydb.cursor()mycursor.execute("CREATE DATABASE mydatabase")创建表格import mysql.connectormydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="mydatabase")mycursor = mydb.cursor()mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))")插入数据import mysql.connectormydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="mydatabase")mycursor = mydb.cursor()sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"val = ("John", "Highway 21")mycursor.execute(sql, val)mydb.commit()print(mycursor.rowcount, "record inserted.")重要!。留神这个语句:mydb.commit()。它是进行批改的必要条件,否则就不会对表进行批改。插入多行 import mysql.connectormydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="mydatabase")mycursor = mydb.cursor()sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"val = [ ('Peter', 'Lowstreet 4'), ('Amy', 'Apple st 652'), ('Hannah', 'Mountain 21'), ('Michael', 'Valley 345'), ('Sandy', 'Ocean blvd 2'), ('Betty', 'Green Grass 1'), ('Richard', 'Sky st 331'), ('Susan', 'One way 98'), ('Vicky', 'Yellow Garden 2'), ('Ben', 'Park Lane 38'), ('William', 'Central st 954'), ('Chuck', 'Main Road 989'), ('Viola', 'Sideway 1633')]mycursor.executemany(sql, val)mydb.commit()print(mycursor.rowcount, "was inserted.")获取插入的ID ...

August 28, 2022 · 3 min · jiezi

关于python:loguru-serialize-减少字段

loguru serialize 默认的字段太多了,大多数基本不须要,大大节约了日志存储空间: from loguru import loggerimport syslogger.remove()logger.add(sys.stdout, serialize='json')logger.debug(f'哈哈')输入: {"text": "2022-08-28 01:11:45.258 | DEBUG | __main__:<module>:9 - 哈哈\n", "record": {"elapsed": {"repr": "0:00:00.004474", "seconds": 0.004474}, "exception": null, "extra": {}, "file": {"name": "003.py", "path": "/home/bot/Desktop/ideaboom/test_logger/003.py"}, "function": "<module>", "level": {"icon": "", "name": "DEBUG", "no": 10}, "line": 9, "message": "哈哈", "module": "003", "name": "__main__", "process": {"id": 282787, "name": "MainProcess"}, "thread": {"id": 139949730423424, "name": "MainThread"}, "time": {"repr": "2022-08-28 01:11:45.258317+08:00", "timestamp": 1661620305.258317}}}咱们须要缩小这些没用的字段 应用相似『猴子补丁』的形式来实现: from loguru._recattrs import RecordExceptionfrom loguru._handler import Handlerfrom loguru import loggerimport sysimport jsondef _serialize_record(text: str, record: dict): exception: RecordException = record["exception"] if exception is not None: exception = { "type": None if exception.type is None else exception.type.__name__, "value": exception.value, "traceback": bool(exception.traceback), } serializable = { "text": text, "record": { "extra": record["extra"], }, } return json.dumps(serializable, default=str, ensure_ascii=False) + "\n"Handler._serialize_record = staticmethod(_serialize_record)logger.remove()logger.add(sys.stdout, serialize='json')logger.debug(f'哈哈')输入: ...

August 28, 2022 · 1 min · jiezi

关于python:Python入门系列十一篇学会python文件处理

文件解决在Python中解决文件的要害函数是open()函数。有四种不同的办法(模式)来关上一个文件 "r" - 读取 - 默认值。关上一个文件进行读取,如果文件不存在则出错。 "a" - Append - 关上一个文件进行追加,如果文件不存在则创立该文件 "w" - 写 - 关上一个文件进行写入,如果不存在则创立文件 "x" - 创立 - 创立指定的文件,如果文件存在则返回谬误。 此外,你还能够指定文件应以二进制或文本模式解决。 "t" - 文本 - 默认值。文本模式 "b" - 二进制 - 二进制模式(如图像)。 要关上一个文件进行浏览,只需指定文件的名称即可 f = open("demofile.txt")下面的代码与 f = open("demofile.txt", "rt")因为 "r "代表读取,"t "代表文本,是默认值,你不须要指定它们。 留神:确保该文件存在,否则你会失去一个谬误。读取文件open()函数返回一个文件对象,它有一个read()办法用于读取文件的内容 f = open("demofile.txt", "r")print(f.read())如果文件位于一个不同的地位,你将不得不指定文件门路,像这样 f = open("D:\\myfiles\welcome.txt", "r")print(f.read())只读文件的局部内容 f = open("demofile.txt", "r")print(f.read(5))读取行 f = open("demofile.txt", "r")print(f.readline())通过调用readline()两次,您能够读取前两行 f = open("demofile.txt", "r")print(f.readline())print(f.readline())通过遍历文件的各行,您能够逐行读取整个文件 f = open("demofile.txt", "r")for x in f: print(x)最好总是在解决完文件后将其敞开。 ...

August 26, 2022 · 1 min · jiezi

关于python:pythoncom-无法import-win32apiwin32conwin32comwin32gui-问题一次解决

最近写我的项目发现pythoncom 导入 win32api、win32con、win32com、win32gui 等win32相干的包都会呈现或多或少问题,Google一大堆不靠谱的办法试了个遍。特此记录一下解决办法 1.查看是否装置在我的项目的环境中如果你本地有多个运行环境,同时你的库装设置在path门路上的了就会导致该谬误。pycharm默认创立我的项目的时候都会主动创立python环境。你能够在我的项目依赖的环境下面去重新安装,或者把运行环境设置为path门路上的。 2.解决问题如果你未尝试过间接 pip install win32XX请先尝试是否间接装置 如果你尝试过间接 pip install ,同时呈现相似ModuleNotFoundError: No module named 'win32XX'、Getting requirements to build wheel did not run successfully.的相干报错,请接着看 判断你的python版本呈现以上相干报错个别是 python 版本过高或者 python 版本与库不兼容导致。同时自2017年底以来,win32gui 仿佛被称为/曾经成为 pywin32所以个别 python 版本大于 3.6 后就会呈现相似报错 解决办法升高您的python 版本或者寻找与版本兼容的库版本(麻烦,下下策)尝试装置 pywin32 库 pip install pywin32pywin32 补充阐明pywin32 它间接接包装了简直所有的 Windows API ,能够不便地从 Python 间接调用因而它也理所应当的包含 win32api、win32con、win32com、win32gui 等win32相干的 Windows API,间接装置pywin32即可,安转完从新导入索引即可解决问题 其余状况pypiwin32如果你装置的pywin32版本高于223,那就要同时装置 Pypiwin32,能力确保所有模块能失常工作pip install pypiwin32 确保没有依赖关系抵触如果你的本地环境同时存在 Conda ,或者其余依赖关系抵触,请自行查看并解决 conda环境如果你的我的项目是运行在 conda 环境中请尝试应用 conda 来装置库,而不是pip来装置pywin32conda install pywin32 这就是我排除问题的流程,心愿能够可能帮到你,也同时记录一下。 ...

August 25, 2022 · 1 min · jiezi

关于python:django-celery-redis-实现定时任务

前言前段时间,工作中有个要求,是将本来的定时工作,改成应用celery实现。本来我的项目中的定时工作是应用的apscheduler。然而django与celery做定时的教程,网上比拟少,且版本对应不上,最初依据网上的教程+仔仔细细看了好多遍celery官网文档,终于跑通。 当初做一个疾速实现django+celery定时工作的教程/记录。对于这三个组件的基础知识及装置就不赘述了。间接进入配置。 版本Django==3.1.4celery==5.0.5redis==3.5.3 思路步骤配置celery定时工作的思路和步骤次要为 创立celery实例配置工作编写工作函数启动woker和beat存储后果目录层级(供参考) django_demo # 我的项目根目录 ├── scheduler # 这是一个app │ ├── __init__.py │ ├── celery.py # 实例化celery并指定config │ ├── config.py # celery的配置文件 │ └── tasks.py # 工作函数celery.pyfrom __future__ import absolute_importfrom celery import Celeryapp = Celery("scheduler", broker="redis://:12345@localhost:6379/1", backend="redis://:12345@localhost:6379/2", include=["scheduler.tasks"])app.config_from_object("scheduler.config")此文件用于实例化celery,并指定broker和backend为redis(可写入配置文件)include是指向task文件app.config_from_object()指定celery的配置 config.pyfrom __future__ import absolute_importfrom datetime import timedeltaCELERY_TIMEZONE = "Asia/Shanghai"CELERY_ENABLE_UTC = TrueCELERYBEAT_SCHEDULE = { "test": { #工作名,用于开发人员辨认 "task": "scheduler.tasks.test", #task指向工作函数 "schedule": timedelta(seconds=2), #调度工夫 还能够应用crontab "args": () #没有参数能够不写 },}此文件能够写一些celery的配置,以及通过CELERYBEAT_SCHEDULE将定时工作加载。定时的工夫能够应用crontab。例如:crontab(hour="*/24") 示意每24小时执行一次也能够指定工夫,详情参照crontab的应用办法 tasks.pyfrom scheduler.celery import app@app.task()def test(): print("hello") return Noneimport app肯定是从实例化的celery.py中导入的。如果实例化文件不叫celery.py,或者对象不叫app,须要对应扭转。工作函数须要应用@app.task()进行装璜。如果无需返回值,能够不写return。 ...

August 25, 2022 · 1 min · jiezi

关于python:Python自学笔记6列表有哪些常用操作

列表是Python中最重要的数据类型,它应用的频率十分十分的高,最大水平的施展Python的灵活性。 和字符串一样,列表的操作方法也有很多。如果说一头钻进去,可能会导致学习没有重点。在这篇文章当中,首先九柄会跟大家介绍列表的根底操作,而后我会跟大家去说一些列表这个数据类型罕用的实战操作。 争取可能对Python列表有一个大略的意识。 Python列表定义首先咱们来看一下列表的定义。列表通常用来存储多个数据,每一个数据之间用逗号隔开,他们被称为元素,列表的左右两边带有中括号。 a_list = [1, 2, 3, 4]你能够把列表设想成是某种容器,你能够往这个容器外面塞入任何的货色。并且列表当中的元素能够是任意的数据类型,你能够在一个列表当中同时存储数字、字符串,甚至嵌套列表。 a_list = [1, "hello", ["new", "list"]]当然,尽管列表能够存储不同的数据类型,然而大多数状况下,外面元素的数据类型是一样的,你能够简略了解他和其余的编程语言当中的数组差不多。 Python列表的基本操作列表的基本操作分为:增、删、改、查。 ”查“ 次要是去获取列表的某一个元素或者是多个元素,通过索引和切片能够获取。”增“ 次要是对这个列表当中去增加一个新的元素。“删” 次要指咱们对列表当中的某元素进行删除。“改”次要是这个对这个列表当中的元素去进行批改。因为列表自身有多个元素,咱们能够获取它的长度 a = [1, 2, 3]print(len(a)) #3Python列表索引列表的索引的示意基本上和字符串的示意办法差不多,所以你能够间接援用字符串当中的操作,索引从0开始 man = [1, 2, 3]print(man[1]) #2print(man[0]) #1索引能够是正数,示意倒数第几个,也就是从列表的左边数到右边。索引为 -1 示意获取倒数第一个元素,索引为 -2 示意获取倒数第二个元素。为什么正序数的索引从 0 开始,倒序就不能从 0 开始呢?因为索引为 0 不能同时示意两个元素,会造成指令的抵触。 print(man[-1]) #3超出索引范畴报 IndexError 谬误 print(man[8])Python列表切片列表的切片呢也基本上和字符串的切片差不多。所以咱们能够间接用字符串切片的办法。切片的示意办法是:var[start: end]。 start 示意开始地位的索引号,end 示意完结地位的索引号, 然而不蕴含 end。 girl = [1,2,3,4,5,6]part_of_girl = girl[0:1]print(part_of_girl) # [1]切片的索引号也能够是正数,然而在应用的时候要确保 end 是在 start 的左边,end - start > 0 。 ...

August 25, 2022 · 1 min · jiezi

关于python:最小二乘拟合原理python代码

前言拟合在数学建模中利用广泛,而最小二乘拟合又是罕用的拟合办法。 数据拟合又称曲线拟合,俗称拉曲线,是一种把现有数据透过数学方法来代入一条数式的示意形式。迷信和工程问题能够通过诸如采样、试验等办法取得若干离散的数据,依据这些数据,咱们往往心愿失去一个间断的函数(也就是曲线)或者更加密集的离散方程与已知数据相吻合,这过程就叫做拟合(fitting)。&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp--摘自百度百科 最小二乘拟合,咱们从原理登程,给出三个示例并联合python代码,从而加深对最小二乘拟合的了解。 1.原理首先最小二乘拟合是一种思维,通过最小二乘拟合能够进行线性拟合,多项式拟合,指数拟合...等任意模式拟合。拟合:拟合用于解决对于一系列已知的\(x_i,y_i\)求\(y=f(x)\)方程的问题。最小二分思维:咱们通过拟合找到\( \phi(x) \),使得误差平方和Q=\(\sum(\phi(x_i)-y_i)^2\)最小,则认为\(\phi(x)\)近似等于咱们须要的\(f(x)\)。使误差平方和Q=\(\sum(\phi(x_i)-y_i)^2\)最小的准则就是最小二分思维。 \(\phi(x)\)的表达式:如何求\(\phi(x)\)呢,能够依据已知xi,yi画出的图像走势,抉择\(\phi(x)=f(e^x),\phi(x)=f(x^n)+f(x^{n-1})+....\)等方程式进行拟合。此时产生一些参数如\(a*e^x+b\)中的a,b。 误差平方和Q:那么Q的最小值如何求呢?首先引入高等数学的内容 $$ \begin{cases} Q_a=0\\ Q_b=0 \ &+函数间断\Rightarrow求出极值点+边界点\Rightarrow最值点\\ Q_c=0\\...... \end{cases} $$ 有极值的充分条件是Q对于a,b,c...的偏导等于0且Q式间断。 而最值通过极值和边界值比拟确定。这里求Q的最小值,通过求Q对于a,b,c...的偏导等于0,可求得a,b,c...参数,从而求Q的值。有n个方程n个未知数,能够求解。所以依据a,b,c...等参数的值,可失去\(\phi(x)\)的方程,并用来画图比拟拟合预测值和实在值。 2.python代码-多项式拟合次要是对np.polyfit和np.poly1d的应用。 import numpy as npimport matplotlib.pyplot as pltfrom pylab import mplmpl.rcParams["font.sans-serif"] = ["SimHei"]#这两行解决字体问题x = np.arange(1, 101)#改数据y = np.array([11, 5, 4, 7, 6, 6, 5, 7, # 改数据 13, 6, 5, 7, 12, 5, 4, 6, 9, 5, 5, 11, 29, 21, 17, 20, 27, 13, 9, 10, 16, 6, 5, 7, 11, 5, 5, 6, 12, 7, 7, 10, 15, 10, 9, 11, 15, 10, 10, 16, 26, 21, 23, 36, 50, 45, 45, 49, 57, 43, 40, 44, 52, 43, 42, 45, 52, 41, 39, 41, 48, 35, 34, 35, 42, 34, 36, 43, 55, 48, 54, 65, 80, 70, 74, 85, 101, 89, 88, 90, 100, 87, 88, 89, 104, 89, 89, 90, 106, 96, 94, 99])z1=np.polyfit(x,y,deg=100)#deg=100,100次多项式,返回值为系数p1=np.poly1d(z1)#通过多项式系数,返回方程print(p1)#输入方程print(np.polyval(p1,12))#进行预测print(np.polyval(z1,13))#这两种办法都能够,能够p1,或者z1作为参数,12,13为x,输出x失去预测值y_pred=p1(x)#预测值plt.plot(x,y,'*',label='origin value')plt.plot(x,y_pred,'r',color='green',label='pred value')plt.title('多项式拟合')plt.xlabel('xlable')plt.ylabel('ylabel')plt.legend(loc=3, borderaxespad=0., bbox_to_anchor=(0, 0))#画出图例plt.show()有趣味可通过调整多项式次数,钻研适度拟合的状况,这里不过多论述。上面是多项式拟合状况 ...

August 25, 2022 · 2 min · jiezi

关于python:Python入门系列八日期时间数学json

日期工夫Python中的日期自身不是数据类型,但咱们能够导入一个名为datetime的模块,将日期作为日期对象应用。 import datetimex = datetime.datetime.now()print(x)日期输入 import datetimex = datetime.datetime.now()print(x.year)print(x.strftime("%A"))创立日期对象 import datetimex = datetime.datetime(2020, 5, 17)print(x)strftime()办法 import datetimex = datetime.datetime(2018, 6, 1)print(x.strftime("%B"))DirectiveDescriptionExample%aWeekday, short versionWed%AWeekday, full versionWednesday%wWeekday as a number 0-6, 0 is Sunday3%dDay of month 01-3131%bMonth name, short versionDec%BMonth name, full versionDecember%mMonth as a number 01-1212%yYear, short version, without century18%YYear, full version2018%HHour 00-2317%IHour 00-1205%pAM/PMPM%MMinute 00-5941%SSecond 00-5908%fMicrosecond 000000-999999548513%zUTC offset+0100%ZTimezoneCST%jDay number of year 001-366365%UWeek number of year, Sunday as the first day of week, 00-5352%WWeek number of year, Monday as the first day of week, 00-5352%cLocal version of date and timeMon Dec 31 17:41:00 2018%CCentury20%xLocal version of date12/31/18%XLocal version of time17:41:00%%A % character%%GISO 8601 year2018%uISO 8601 weekday (1-7)1数学min()和max()函数可用于查找可迭代中的最低或最高值 ...

August 24, 2022 · 4 min · jiezi

关于python:Python自学教程4数据类型学什么

Hi,我是九柄,全网同号,明天咱们说说Python的数据类型。 python数据类型有什么特点每一门编程语言都要学数据类型的,每种类型的操作会略微有一点区别。Python是一门非常灵活的编程语言,数据类型的指定和其余编程语言会略微有一点区别。 首先,Python 不须要显性申明数据的类型,当定义变量的时候,会智能判断变量存储的类型。 name = "jiubing"age = 19公号 = "九柄"其次,在定义变量时,不须要指定一个数据,这样程序才晓得它的数据类型。 name # 谬误写法,变量没写数据Python是强类型的编程语言你可能常常会据说一门编程语言是强类型还是弱类型,其实你不须要太去深究这个概念,只须要大略晓得,强类型语言不能用两个不同类型的数据进行运算就能够了(不是相对的)。 python 是强类型的,所以运算时,要留神是否同类型。 "jiubing" + 1 #谬误写法"jiubing" * 3 # 但这个是正确的数据类型有哪些Python 外面罕用的数据类型有: str 字符串int 整型float 浮点数bool 布尔list 列表dict 字典tuple 元组set 汇合NoneType 空类型每一个数据类型的示意都有一个小小案例,眼生就够了,前面每种数据类型都会具体讲。 # str"hello"# int3# float3.1# boolTrue# list[1,2,3]# dict{"name": "mingtian"}# tuple(1,2)# set{1,2,3}# NoneTypeNone数据类型判断尽管咱们写了这么多数据,然而并不知道在 python 中他们真的数据类型是什么。isinstance() 这个操作能够判断一个数据是否为某个数据类型。 然而 None 不能用这个判断。 # strprint(isinstance("hello", str))# intprint(isinstance(3, int))# floatprint(isinstance(3.1, float))# boolprint(isinstance(True, bool))# listprint(isinstance([1,2,3], list))# dictprint(isinstance({"name": "mingtian"}, dict))# tupleprint(isinstance((1,2), tuple))# setprint(isinstance({1,2,3}, set))# NoneTypeprint(None is None)TrueTrueTrueTrueTrueTrueTrueTrueTrue有的教程会用 type() 这个操作判断数据类型,然而 isinstance 会更加罕用,我集体认为 type 略微理解就能够了。 ...

August 24, 2022 · 2 min · jiezi

关于python:Python自学教程3英语不好变量怎么命名

变量其实很简略,不过在应用过程中会遇到一些辣手的问题。 比方一个变量我之前曾经用过了,当初我要定义一个相似的变量,该怎么办? 还有,很多小伙伴其实晓得变量应该恪守什么标准,应该代表什么数据,然而大学英语没学好,不晓得怎么给变量取名字。 这些问题,其实都有比拟好的解决方案。 咱们还是从最根本的操作开始吧,这样能加深了解,没准本人就找到了更好的形式。 变量有什么用变量的作用是用来存储数据,当一个数据很大,或者须要应用屡次的时候,就能够通过变量来存储。 假如咱们当初有一串比拟长的数据须要打印屡次,要每次输出这么长的数据就比拟麻烦。 print("明天的天气不错,适宜学习。我拿出一本康熙字典,翻到了第 573 页。") print("明天的天气不错,适宜学习。我拿出一本康熙字典,翻到了第 573 页。") print("明天的天气不错,适宜学习。我拿出一本康熙字典,翻到了第 573 页。") print("明天的天气不错,适宜学习。我拿出一本康熙字典,翻到了第 573 页。") 明天的天气不错,适宜学习。我拿出一本康熙字典,翻到了第 573 页。 明天的天气不错,适宜学习。我拿出一本康熙字典,翻到了第 573 页。 明天的天气不错,适宜学习。我拿出一本康熙字典,翻到了第 573 页。 明天的天气不错,适宜学习。我拿出一本康熙字典,翻到了第 573 页。每次要打很多字,很累,而且并不能保障每次输出的内容是 100% 统一的。而变量把数据存起来之后,每次取出十分不便,还能保障一致性。应用变量之后,代码也变得更加简洁。 notes = "明天的天气不错,适宜学习。我拿出一本康熙字典,翻到了第 573 页。" print(notes) print(notes) print(notes) print(notes) 明天的天气不错,适宜学习。我拿出一本康熙字典,翻到了第 573 页。 明天的天气不错,适宜学习。我拿出一本康熙字典,翻到了第 573 页。 明天的天气不错,适宜学习。我拿出一本康熙字典,翻到了第 573 页。 明天的天气不错,适宜学习。我拿出一本康熙字典,翻到了第 573 页。在这个例子中,= 号右边的 notes 是变量名称,= 号左边的就是变量的值。 变量命名标准变量名称不能轻易取,须要恪守肯定的标准。变量名能够蕴含字母、数字、下划线_, 然而不能以数字结尾,而且不能是 python 的内置关键字。所有的内置关键字都能够通过以下程序获取: import keywordprint(keyword.kwlist)['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']试着判断以下以下哪些是正确的变量名,哪些不是: ...

August 24, 2022 · 1 min · jiezi

关于python:python-修改python插件包的默认安装路径

python 装置好后 ,开发过程中须要下载好多依赖包来应用,默认下载门路会在用户目录下 具体位置: c:\users\julong\appdata\roaming\python\python38\site-packages命令目录:C:\Users\julong\AppData\Roaming\Python\Python38\Scripts1.2.3.目录应用没问题,插件也能够失常应用 然而如果您须要应用其中的命令 就须要定位到此目录中能力应用 ,或者减少环境变量 指向此目录 为了简略不便 咱们能够装置好python根底环境后 批改 插件下载配置文件指定装置目录和python同目录 此处我装置到了C盘 ,留神:装置到此目录 如果须要应用 pip命令下载相干插件包装置 此处可能还须要设置 python38 目录的权限 须要晋升文件夹级别 C:\Program Files\Python38\Lib 在 lib 目录下 找到 site.py 而后编辑(如果应用的编辑软件 须要以管理员形式关上编辑软件,不然误操作批改权限)找到以下地位 而后批改 对应的目录地址 for distutils.commands.installThese values are initialized by the getuserbase() and getusersitepackages()functions, through the main() function when Python starts.批改门路来指定插件下载地位 此形式如果装置到C盘 会有权限问题 须要整体批改 目录的拜访权限USER_SITE = "C:\Program Files\Python38\Scripts"USER_BASE = "C:\Program Files\Python38"USER_SITE = NoneUSER_BASE = None1.2.3.4.5.6.7.8.9.10.11.12.13.14. 对于批改文件夹的权限  》在python38 文件夹上 》右键》属性》平安》找到Users》点击编辑 抉择齐全管制 后点击 》利用 和 确定按钮 ...

August 23, 2022 · 1 min · jiezi

关于python:Python3学习笔记

规范数据类型Python3 中有六个规范的数据类型:Number(数字)String(字符串)List(列表)Tuple(元组)Sets(汇合)Dictionary(字典)Number(数字)Python3 反对 int、float、bool、complex(复数)。 在Python 3里,只有一种整数类型 int,示意为长整型,没有 python2 中的 Long。 像大多数语言一样,数值类型的赋值和计算都是很直观的。 内置的 type() 函数能够用来查问变量所指的对象类型。 a, b, c, d = 20, 5.5, True, 4+3jprint(type(a), type(b), type(c), type(d))后果:<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>1.2.3.当然:此外还能够用 isinstance 来判断: a = 111isinstance(a, int)后果:True1.2.3.isinstance 和 type 的区别在于: class A: passclass B(A): passisinstance(A(), A) # returns Truetype(A()) == A # returns Trueisinstance(B(), A) # returns Truetype(B()) == A # returns False1.2.3.4.5.6.7.8.9.10.区别就是: type()不会认为子类是一种父类类型。isinstance()会认为子类是一种父类类型。留神:在 Python2 中是没有布尔型的,它用数字 0 示意 False,用 1 示意 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们能够和数字相加。 ...

August 23, 2022 · 3 min · jiezi

关于python:Python自学教程2大牛们怎么写注释

在还没开始学代码前,就要先学会写正文。不会写正文的程序员会受到鄙视和鄙弃,甚至在工作中会被人穿小鞋。正文也不是轻易写一下就行,用好正文还是有点考究的。 正文有什么用?正文(Comments)次要是向浏览代码的人解释某些代码的作用和性能,它能够呈现在代码中的任何地位。Python 在执行代码时会疏忽正文,不做任何解决,就如同它不存在一样。正文次要是给人看的,而不是给机器运行的。 举个例子。你写了一段十分厉害的代码,能够让汽车主动驾驶的代码,然而这段代码用了很多简单的算法,别的人很难看懂,所以你就会在这一段代码中增加正文,解释下代码的意思。 这样,就算他人一时间很难了解代码,也能够通过读正文晓得代码做了什么事件。 个别咱们会应用 # 号来示意正文,并且在代码上方写正文来阐明代码的作用。 # 这段代码实现了主动驾驶性能# 应用 CNN 算法实现...do_something_cnn# 应用傅里叶转换do_something正文的最大作用是进步程序的可读性,没有正文的程序对他人来说几乎就是噩梦。 咱们写完代码当前,可能会有代码审查,如果很难了解,公司可能会打回来,让你从新补齐正文。 还有一种状况,当你半个月当前再来看之前写的代码,可能基本想不起来为什么这么写。有了正文,能够迅速帮你回忆之前的实现细节。很多程序员宁愿本人去开发一个利用,也不违心去批改他人的代码,没有正当的正文是一个重要的起因。 千万不要认为你本人写的代码标准就能够不加正文,这样很容易引起共事之间的互相厌弃。 正文的示意办法第一种形式是应用# 号,也就是下面的用法,它只能用来示意某一行是正文,不能示意多行, 如果同时有几行都是正文,就须要每一行后面都增加一个 # 号。 # 第一行正文# 第二行正文# 第三行正文do_something_with_code另一种形式是应用三引号 """""" ,这种形式能够十分不便的写多行正文,比拟罕用在正文比拟长的的中央。 """这段正文比拟长。因为比拟长,所以咱们用的是三个引号,不管怎么换行,都会比拟不便。"""do_something_with_code快捷键当示意正文时,每次都要在后面加上一个# 号是不不便的,所以常常会应用快捷键来示意正文,每个编辑器的快捷键会略微有一点区别,以 Pycharm 为例,当须要示意正文时,咱们把要正文的代码用鼠标选中,而后应用 ctrl + / 快捷键就能够主动在后面加上 # 号, 如果有多行,选中多行就能够了。 快捷键示意正文常常用在咱们写了一些代码,后果临时不想让这些代码运行,就能够应用快捷键,把这些代码迅速转成正文。前面想用的的时候再选中这些正文,再按一下快捷键,就又会转回代码。 大牛们的正文习惯在我接触到的技术大牛中,都有一套本人的正文习惯,尽管每个人会略微有点区别,然而大体上都差不多。当初都还没说开始写代码呢就学大牛,如同有点早,但我认为好的正文习惯能疾速进步写代码的速度。 那么,一套好的正文习惯会蕴含哪些因素呢? 因素一:用正文在每个本人创立的文件上阐明作者、联系方式、创立工夫, 这样如果他人看到这段代码有什么疑难,能够第一工夫分割你。 # -----------------------------------------------# Author: 九柄# 微信号: jiubing1# 公众号: 九柄# -----------------------------------------------在 Pycharm 当中,你并不需要每创立一个文件都手动输出这些正文,能够通过模板创立的形式主动增加。有了模板当前,每创立一个新文件,pycharm 会主动带上这些正文信息。 在 Pycharm中点击 File→Settings→Editor→File and code Templates,右侧找到Python Script,如下图。 工夫这种会变的间接用花括号括起来,不会变的就间接写。 因素二: 在文件的顶部阐明一下这个文件的具体性能,在这里能够阐明一下这个文件的具体用法,甚至能够举一些例子,他人能够照着操作。 """数据操作模块。次要是对数据库操作的封装,包含查问数据,插入数据,更新数据。具体用法如下:..."""因素三: 在每个函数的上面用多行正文写下函数的作用。 ...

August 23, 2022 · 1 min · jiezi

关于python:青软集团蝉联华为云千万俱乐部奖最佳销售黑钻奖两大奖项

在「2021年度华为云市场优良搭档名单」上,青软团体凭借华为云优良解决方案——U+新工科智慧云平台的弱小竞争力、市场高销售额与业余的团队服务,蝉联华为云「千万俱乐部奖」与「最佳销售黑钻奖」两大荣誉奖项。 青软团体深耕产教交融畛域16年,致力于将高校的人才培养过程与企业的人才获取过程买通。聚焦翻新科技实力,通过业余共建、产业学院共建、数字化平台赋能等人才培养解决方案,以及面向产业的数字化转型、技术开发、人力资源等服务,助力高校造就合乎产业需要的高素质人才,推动教育与产业无缝连接。青软U+新工科智慧云平台已于2019年正式入驻华为云商店,与华为携手面向教育端与产业端,提供「平台+内容+服务」的综合解决方案,以数字化引领构建以学习者为核心的全新教育生态。 华为云商店是华为云推出云上精品市场,入选严选自营的商品更是「优中选优 精当选精」。作为华为云优良解决方案的U+新工科智慧云平台,可能提供产业级的开发环境和开发技术,并将华为的技术能力和行业利用融入高校人才培养过程中,为企业提供高符合度的高素质人才。 一方面,青软将华为的产业资源和我的项目引入高校,利用U+平台的撑持,造成大数据、云计算、人工智能、软件技术、鲲鹏等一体化的试验实训体系,为高校提供产业级试验实训环境及案例,为业余外延建设和工程教育认证提供助力。 U+新工科智慧云平台等华为云优良解决方案,为复旦大学、北京邮电大学、华南理工大学、中北大学、西北大学、深圳信息职业技术学院、廊坊职业技术学院等泛滥高校提供了人才培养及数字化转型撑持,全面笼罩本科及高职院校。 另一方面,U+平台融入新工科优训营、岗前实际、 华为ICT认证、华为云人才双选会等翻新模式 ,疾速晋升人才的我的项目开发能力、工程实际能力、团队合作能力和守业待业能力。 培养一批高质量新工科人才,最大化满足企业的数字化人才获取需要,为区域经济助力,为产业倒退赋能。 青软凭借平台建设与业余能力成为华为在ICT人才培养畛域的优良合作伙伴,多年来陆续取得华为云鲲鹏凌云搭档、华为云当先级经销商和华为受权培训合作伙伴等泛滥荣誉称号,也从「华为云当先级合作伙伴」降级成为「华为云策略级合作伙伴」。 此次获奖,也是华为、市场对青软团体数字化人才培养解决方案的必定。 2022年,青软将保持与华为同行,继续晋升研发创新能力,为客户提供有价值力、技术力、创新力的数字化人才培养解决方案,助力高校的高质量人才培养、行业的数字化转型与智能降级。 想理解更多华为云产品相干信息,请分割咱们,电话:950808按0转1

August 23, 2022 · 1 min · jiezi

关于python:实践基地新工科实训-青软与西南大学展开多元校企合作

为了给学生提供更多提前接触产业技术的实际机会,东北大学从实际基地共建、新工科实训等方面着手,推动产教交融深入,构建双元育人格局。 2021年6月22日,青软团体与东北大学达成单干,共建计算机与信息科学学院、软件学院校外大学生实际教育基地,这标记着校企单方在人才开发与技术交换方面实现了良好对接,对推动新工科人才培养起到踊跃作用。   校外大学生实际教育基地 2018级计算机科学与技术、软件工程、自动化业余学生大数据方向新工科实训同步开启,计算机与信息科学学院、软件学院陶丽院长在实训入职典礼上提出,心愿学生借此实训,可能将素日所学的知识点转换为我的项目所需的技能,进一步锤炼实操入手能力。 陶院长在入职典礼上致辞 采纳以后企业广泛采纳的实在技术、实在还原企业开发模式,是本次实训的亮点之一。 实训分4周线下实际+2周线上课程两阶段施行,以《手机用户行为实时剖析零碎》我的项目为主线,依靠U+新工科智慧云平台做全程的教、学、练、评、测、管撑持,并在U+平台深度嵌入的 华为云软件开发平台 环境中施行麻利式开发实战。 联合U+平台中的我的项目指导书,学生可依据我的项目进度,实现需要建设、代码治理及查看、构建、部署、公布、测试等全副的我的项目开发环节。**   我的项目代码查看 代码奉献统计与质量检查 同时,项目组的构建也参照企业模式,学生别离定位成项目经理、技术主管和程序员等角色,青软技术专家以CTO的身份做我的项目领导 。项目组的建设为学生提供在企业工作的角色带入感,有助于团队单干精力和职业意识的建设和晋升。 实训问难暨结业典礼上,各项目组展现了学习和利用Zookeeper、Flume、Spark Streaming等Hadoop生态技术的播种,分享了应用flume监控数据、借助nginx实现负载平衡、在IDEA中做数据分析和集群运行等实操过程,并做我的项目演示。 优良我的项目展现 本次实训,我的项目达标率100%,优良我的项目占比20%,实训体验取得校方统一好评。 “ 从听到跟着做,到最初本人思考实现。这个过程是我心态的转换:最开始的只重视实现工作,不去学习原理,常常碰到报错就找青软专家的帮忙。前面理解了我的项目运行的原理,出了谬误也可能通过本人的调试找进去,这让我更加适应了当前职场上的工作形式。 ——《基于Spark手机厂商用户行为实时剖析统计项目组》 程航   “ 团队单干进步了我的工作效率,青软专家的急躁解说以及团队同学的热心解答帮忙我解决了许多问题,让我发现良好的编程习惯也是我今后的学习方向。此外,通过学习一些理论的应用案例,我领会到了「工欲善其事,必先利其器」的重要性。 ——《手机厂商用户行为实时剖析零碎》项目组 朱珂芯   东北大学是国家首批「双一流」建设高校、「211工程」和「985工程劣势学科翻新平台」建设高校。 通过这次新工科实训,青软将产业我的项目资源、技术和平台引入东北大学,校企联结发力,独特晋升学生的职业胜任力和继续倒退的能力,助力造就合乎产业需要的利用复合创新型人才。 想理解更多华为云产品相干信息,请分割咱们,电话:950808按0转1

August 23, 2022 · 1 min · jiezi

关于python:python-ml

Jupyter Notebookanacondaanaconda install windowsjupyter notebook tutorial dataspell

August 23, 2022 · 1 min · jiezi

关于python:使用python连接ssh服务器

应用pip装置环境依赖通过paramiko包里的sshconnect办法来实现1.paramiko包存在依赖,须要先装置pycrypto2.装置paramiko,在python script目录下cmd执行pip命令装置豆瓣的paramiko源文件 pip3 install paramiko -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com sshConnect.py文件import paramikossh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# ssh.connect("主机名", 端口22, "用户名", "明码", "超时工夫")ssh.connect("192.168.70.134", 22, "root", "ncayu@123", timeout=30)# 执行多条命令间接在exec_command()应用;分隔即可。stdin, stdout, stderr = ssh.exec_command("cd /data/software;ls ; ls -l ; du -sh * ")# 循环打印每一行输入for sysOutput in stdout.readlines(): print(sysOutput)# print(stdout.readlines())ssh.close()

August 22, 2022 · 1 min · jiezi

关于python:Python自学教程1安装pycharm和执行环境

Python尽管简略,然而很多没有接触过的学起来还是比拟艰难的。因而很多人会报班去学,我感觉不须要花那个钱,只有方向正确,加上外围知识点的提炼,自学一个月左右就能上手。 我尝试写下这个自学教程,只探讨外围知识点,跟着做,自学也能够的。 如何学好一门编程语言python 是最容易入门的一门语言,然而精通 python 是十分艰难的。实际上,就算是那种蠢才选手,要精通一门编程语言也须要很多年继续一直的钻研。而咱们普通人,可能穷其毕生,也达不到精通的水平。 当初很多书籍,都越写越厚,很多的教程,都越做越长,这样他们能够收更多的版税,收更高的学费。 然而有教训的人略微翻一翻,就能看到漏洞,很多的内容你这辈子可能都用不到。 所以肯定要挑重点去学编程。什么是重点呢?就是你行将用到的,马上就能够投入使用的,用到什么学什么。以我的项目和实战驱动,去学该学的内容。学习编程语言肯定不要求多,而是要求精。 python 如何装置在任何的电脑上,想运行 python 代码都须要下载 python 解释器,解释器就是一个做好的软件,和其他软件没什么区别,只须要到官网上下载,点击装置就能够实现了。 解释器有很多版本,每个版本都会加一些新性能和个性。通常咱们抉择最新的版本,然而你也能够抉择比拟老的版本。因为大多数的语法常识每个版本都是一样的,所以不须要太纠结。 值的留神的是肯定要应用 python3.x,因为 python2.x 曾经进行保护,逐步退出历史舞台。 具体的安卓过程能够参考 b站的这个视频, 装置的时候抉择一个本人能找到的目录,装置实现当前,如果你能在这个目录中找到一个 python.exe 的可执行文件,就阐明装置没什么问题了。 pycharm 装置运行 python 代码全靠解释器,而编写代码的工具能够自由选择。目前比拟支流的 python 代码编辑工具有 pycharm, vscode, sublime text 等等,这些编辑工具针对一门语言会提供一些不便的性能,比如说代码提醒,主动补全等,其次也集成了运行代码的性能,比你独自去运行会便捷一些。 如果你想写代码写得更快,选一个本人喜爱的编辑器还是比拟重要的, 如果你只是单纯的想敲敲代码,用零碎自带的文本工具也是能够的。 应用 windows 自带的文本编辑器写代码: pycharm 目前应该是最弱小的 python 代码工具,提供了十分多便捷的性能,然而应用它会占用很多电脑内存。而 vscode 的劣势是轻量,不会占用太多电脑内存资源,而且他除了能够写 python 代码,还能够写其余语言。老手还是倡议 pycharm 更好上手,当前再去理解其余编辑器。 pycharm 分为专业版和社区版,专业版免费,社区版收费,个别社区版就足够了。专业版会针对所在的畛域提供额定的性能,具体比照能够看下图: 装置 pycharm 只须要从官网下载,点击装置,和一般软件没什么区别。 如何通过 pycharm 运行第一行代码关上pycharm, 抉择新建我的项目。抉择一个文件目录保留我的项目,之后你能够间接通过这个目录关上我的项目。 接下来抉择 python 解释器,指定由那个python解释器运行代码的程序。在一台电脑上能够装置多个 python 解释器,也能够通过一个解释器生成多个虚构的解释器。 第一次学习 python 不倡议装置多个 python 解释器,也不倡议应用虚拟环境,会造成前面有些问题难于发现。 ...

August 20, 2022 · 1 min · jiezi

关于python:Python入门系列三一学就会基础数据类型

数据类型您能够应用type()函数获取任何对象的数据类型。 x = 5print(type(x))数字类型x = 1 # inty = 2.8 # floatz = 1j # complexInt,或integer,是一个长度不限的整数,负数或正数,不带小数。 x = 1y = 35656222554887711z = -3255522浮点数,或“浮点数”是一个蕴含一个或多个小数的负数或正数。 x = 1.10y = 1.0z = -35.59浮点数也能够是迷信数字,用“e”示意10的幂。 x = 35e3y = 12E4z = -87.7e100复数是用“j”作为虚部写成的 x = 3+5jy = 5jz = -5j您能够应用int()、float()和complex()办法从一种类型转换为另一种类型 x = 1 # inty = 2.8 # floatz = 1j # complex#convert from int to float:a = float(x)#convert from float to int:b = int(y)#convert from int to complex:c = complex(x)Python没有生成随机数的random()函数,但Python有一个内置的模块,名为random,可用于生成随机数 ...

August 19, 2022 · 3 min · jiezi

关于python:GCC支持Host发起的时区同步

1.工作形容须要创立一个脚本,在Windows主机时区发生变化时,通过执行脚本,同步时区变动到Linux服务器上。2.设计思路应用xml文件配置服务器相干参数。应用plink将生成的管制命令推送到服务器上。3.原理tzselect命令无奈批改时区,仅给出时区的城市表示法默认状况下状况下,tz属性是空,这时候是靠/etc/localtime文件来确定的时区。而此文件通常又是一个到/usr/share/zoneinfo/下各种时区文件的软连贯。通过批改/etc/localtime指向的软连贯,进而批改零碎的时区。例如:cp /us/share/zoneinfo/Etc/GMT-8 /etc/localtime须要root权限执行上述操作,故须要事后批改权限限度sudo chmod 777 /etc/localtime4.相干程序1. /Program/CCBConfiguration.xml是配置文件 LoginUser 登录Linux的用户名Password 登录Linux的用户明码HostName Linux设施IP地址其余项暂未应用 <Document><LoginUser>***</LoginUser><Password>***</Password><HostName>*.*.*.*</HostName><UploadPath>pass</UploadPath><InstallParameter>pass</InstallParameter><InstallLogPath>pass</InstallLogPath></Document>2. zone_change.py from __future__ import divisionimport sysimport timeimport osimport globimport stringimport xml.dom.minidom as minidomREMOTE_TARGET_USER = ''REMOTE_TARGET_PWD = ''REMOTE_TARGET_HOST = ''REMOTE_TARGET_UPLOAD_PATH = ''REMOTE_TARGET_INSTALL_PARAMETER = ''INSTALL_LOG_PATH = ''zone_path = '/usr/share/zoneinfo/Etc/'def get_attrvalue(node, attrname): return node.getAttribute(attrname) if node else ''def get_nodevalue(node, index=0): return node.childNodes[index].nodeValue if node else ''def get_xmlnode(node, name): return node.getElementsByTagName(name) if node else []def xml_to_string(filename='user.xml'): doc = minidom.parse(filename) return doc.toxml('UTF-8')# -------------------------------------------------------------------------------------------def read_configxml(text): global REMOTE_TARGET_HOST global REMOTE_TARGET_UPLOAD_PATH global REMOTE_TARGET_USER global REMOTE_TARGET_PWD global INSTALL_LOG_PATH global REMOTE_TARGET_INSTALL_PARAMETER try: dom = minidom.parse(text) root = dom.documentElement node = get_xmlnode(root, 'LoginUser') REMOTE_TARGET_USER = str(get_nodevalue(node[0]).encode('utf-8', 'ignore')) node = get_xmlnode(root, 'Password') REMOTE_TARGET_PWD = str(get_nodevalue(node[0]).encode('utf-8', 'ignore')) node = get_xmlnode(root, 'HostName') REMOTE_TARGET_HOST = str(get_nodevalue(node[0]).encode('utf-8', 'ignore')) node = get_xmlnode(root, 'UploadPath') REMOTE_TARGET_UPLOAD_PATH = str(get_nodevalue(node[0]).encode('utf-8', 'ignore')) node = get_xmlnode(root, 'InstallParameter') REMOTE_TARGET_INSTALL_PARAMETER = str(get_nodevalue(node[0]).encode('utf-8', 'ignore')) node = get_xmlnode(root, 'InstallLogPath') INSTALL_LOG_PATH = str(get_nodevalue(node[0]).encode('utf-8', 'ignore')) print(REMOTE_TARGET_USER) except AttributeError as e: print("config file may lack necessary attribute, please check!\n", e) sys.exit(10) # load install config file errordef change_time_zone(path): msg = "Start change time zone" print(path) #tmpStr = REMOTE_TARGET_USER + "@" + REMOTE_TARGET_HOST + " -pw " + REMOTE_TARGET_PWD tmpStr = REMOTE_TARGET_HOST[2:len(REMOTE_TARGET_HOST)-1] + ' -l ' + REMOTE_TARGET_USER[2:len(REMOTE_TARGET_USER)-1]\ + ' -pw ' + REMOTE_TARGET_PWD[2:len(REMOTE_TARGET_PWD)-1] cmd = "plink.exe -ssh " + tmpStr + " cp " + path + " /etc/localtime" print(cmd) existStr = os.popen(cmd)read_configxml('CCBConfiguration.xml')offset_second = time.timezoneoffset_hour = divmod(offset_second, 3600)if offset_hour[1] == 0: offset = str(offset_hour[0])else: offset = str(offset_second / 3600)if offset_hour[0] < 0: linux_zone = 'GMT' + str(offset)else: linux_zone = 'GMT+' + str(offset)print(linux_zone)zone_path = zone_path + linux_zoneprint(zone_path)change_time_zone(zone_path)

August 19, 2022 · 2 min · jiezi

关于python:Python全能工程师2022版完结含文档源码

download:Python全能工程师2022版完结含文档源码深入剖析Spring Boot 的SPI机制简介SPI(Service Provider Interface)是JDK内置的一种服务提供发现机制,可能用来启用框架扩大和替换组件,次要用于框架中开发,例如Dubbo、Spring、Common-Logging,JDBC等采纳采纳SPI机制,针对同一接口采纳不同的实现提供应不同的用户,从而提高了框架的扩展性。Java SPI实现Java内置的SPI通过java.util.ServiceLoader类解析classPath和jar包的META-INF/services/目录 下的以接口全限定名命名的文件,并加载该文件中指定的接口实现类,以此实现调用。示例说明创建动静接口public interface VedioSPI{ void call();} 复制代码实现类1public class Mp3Vedio implements VedioSPI{ @Overridepublic void call(){ System.out.println("this is mp3 call");}}复制代码实现类2public class Mp4Vedio implements VedioSPI{ @Overridepublic void call(){ System.out.println("this is mp4 call");}}复制代码在我的项目的source目录下新建META-INF/services/目录下,创建com.skywares.fw.juc.spi.VedioSPI文件。 相干测试public class VedioSPITest{ public static void main(String[] args){ ServiceLoader<VedioSPI> serviceLoader =ServiceLoader.load(VedioSPI.class); serviceLoader.forEach(t->{ t.call(); });}}复制代码说明:Java实现spi是通过ServiceLoader来查找服务提供的工具类。 源码分析上述只是通过简略的示例来实现下java的内置的SPI功能。其实现原理是ServiceLoader是Java内置的用于查找服务提供接口的工具类,通过调用load()方法实现对服务提供接口的查找,最初遍从来逐个拜访服务提供接口的实现类。从源码可能发现: ServiceLoader类本身实现了Iterable接口并实现了其中的iterator方法,iterator方法的实现中调用了LazyIterator这个外部类中的方法,解析完服务提供接口文件后最终后果放在了Iterator中返回,并不反对服务提供接口实现类的间接拜访。 所有服务提供接口的对应文件都是搁置在META-INF/services/目录下,final类型决定了PREFIX目录不可变更。 诚然java提供的SPI机制的思维非常好,然而也存在相应的弊病。具体如下: Java内置的方法形式只能通过遍从来获取服务提供接口必须放到META-INF/services/目录下。 针对java的spi存在的问题,Spring的SPI机制沿用的SPI的思维,但对其进行扩大和优化。Spring SPISpring SPI沿用了Java SPI的设计思维,Spring采纳的是spring.factories形式实现SPI机制,可能在不修改Spring源码的前提下,提供Spring框架的扩展性。Spring 示例定义接口public interface DataBaseSPI{ void getConnection();} 复制代码相干实现 DB2实现public class DB2DataBase implements DataBaseSPI{ @Overridepublic void getConnection(){ System.out.println("this database is db2");}} ...

August 18, 2022 · 1 min · jiezi

关于python:百度指数-CipherText百度翻译-AcsToken-逆向分析

K 哥之前写过一篇对于百度翻译逆向的文章,也在 bilibili 上出过相应的视频,最近在 K 哥爬虫交换群中有群友提出,百度翻译新增了一个申请头参数 Acs-Token,如果不携带该参数,间接依照以前的办法进行解决,会呈现 1022 报错,并且如果间接将 Acs-Token 写成定值,前几次可能能胜利,多查问几次也会报同样的谬误,现对其进行逆向剖析,对往期代码进行重构。与此同时,K哥发现百度指数的某些接口有个 Cipher-Text 参数,与百度翻译的 Acs-Token 加密形式差不多,所以就一起剖析一波。申明本文章中所有内容仅供学习交换应用,不用于其余任何目标,不提供残缺代码,抓包内容、敏感网址、数据接口等均已做脱敏解决,严禁用于商业用途和非法用处,否则由此产生的所有结果均与作者无关! 本文章未经许可禁止转载,禁止任何批改后二次流传,擅自应用本文解说的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】分割作者立刻删除! 逆向指标指标:百度翻译最新申请头参数 Acs-Token,百度指数申请头 Cipher-Text主页:https://fanyi.baidu.com/接口:https://fanyi.baidu.com/v2tra...sign、token 参数的逆向办法本文不再赘述,想理解的能够浏览 K 哥往期百度翻译逆向的文章逆向过程抓包剖析先以百度翻译为例,轻易输出文字,能够看到没有刷新页面,翻译后果就进去了,由此能够推断是 Ajax 加载的,关上开发者工具,抉择 XHR 过滤 Ajax 申请,找到接口地位,详细分析举荐浏览 K 哥往期百度翻译逆向的文章,如下图能够看到在申请头中新增了一个 Acs-Token 参数,后面两串数字看起来像工夫戳,具体加密形式须要咱们来进一步剖析: 这里应用 Fiddler 插件 hook 定位 Acs-Token 参数,相干 hook 操作形式可浏览 K 哥往期文章,本文不再赘述: (function () { var org = window.XMLHttpRequest.prototype.setRequestHeader; window.XMLHttpRequest.prototype.setRequestHeader = function (key, value) { console.log(key, ':', value) if (key == 'Acs-Token') { debugger; } return org.apply(this, arguments); };})();革除缓存,点击翻译,能够看到胜利 hook 到 Acs-Token 参数,往下跟栈即可找到其值生成的地位: ...

August 18, 2022 · 3 min · jiezi

关于python:最新小红书数据app爬虫接口

咱们提供封装好的小红书数据采集接口,实时采集,接口稳固。长期保护应用便宜 接口应用详情请参考 接口地址: github 拜访地址https://github.com/ping0206gu...: 全副反对的接口如下,并且反对定制开发返回值与小红书接口一样,对数据进行透传,请依照小红书页面对照了解意思 接口数据展现

August 18, 2022 · 1 min · jiezi

关于python:python将特殊时间格式-几天前-几月前-几年前-几周前-转换为xxxxxxxx格式

import timeimport refrom datetime import datetime,timedeltacurrent_year = datetime.today().strftime("%Y")def converting_time( ori_value): """ 对工夫格局进行转换 把 xxx秒前 xxx分前 xxx小时前 xxx天前 xxx月前 xxx年前 转换为 2019-06-24 这种格局的工夫 params: ori_value return: target_style_time """ current_year = datetime.today().strftime("%Y") num = int(re.findall('\d+', ori_value)[0]) if '秒' in ori_value: s = (datetime.now() - timedelta(seconds=num)) elif '分' in ori_value: s = (datetime.now() - timedelta(minutes=num)) elif '时' in ori_value: s = (datetime.now() - timedelta(hours=num)) elif '天' in ori_value: s = (datetime.now() - timedelta(days=num)) elif '月' in ori_value: s = (datetime.now() - timedelta(days=num * 30)) elif '年' in ori_value: s = (datetime.now() - timedelta(days=num * 365)) else: ori_value += ',' + current_year s = datetime.strptime(ori_value, '%m %d %Y') temp_time = str(int(time.mktime(s.timetuple()))) now = int(temp_time) time_array = time.localtime(now) target_style_time = time.strftime("%Y-%m-%d", time_array) return target_style_time # else: # return Noneresult = converting_time('3月前')print(result)

August 17, 2022 · 1 min · jiezi

关于python:nameko-和-peewee-混合使用会影响-TLS-复用数据库连接吗

会得 peewee 用的是 threading.local 来实现 TLS class _ConnectionLocal(_ConnectionState, threading.local): passnameko 并发模型用的是 eventlet 的 pool。解决每个工作的时候,都会创立一个 greenthread,而后提交到 pool 中去跑。 eventlet 的 pool 和 python 的 thread pool 不一样。 python 的 thread pool 是解决 thread 频繁创立和销毁占用资源的问题。所以 python 的 thread pool 是复用线程的。 然而协程的创立和销毁是十分便宜的,所以,没有复用 greenthread 的需要。eventlet 的 pool 不会复用 greenthread。 eventlet 的用法是:创立一个 greenthread,而后提交到 pool 中,跑完了 greenthread 也就被销毁了!那这个 pool 还有什么用呢?我感觉:能够借助 pool 的 size 不便的管制并发数!

August 16, 2022 · 1 min · jiezi

关于python:Python文件操作with语句目录操作

编码格局Python的解释器应用的编码格局是Unicode(内存).py文件在磁盘上应用UTF-8存储(外存)UTF-8是Unicode的实现。不同编码格局,文件占用空间不同。文件读写的原理文件的读写俗称"IO操作"(input-output)文件读写操作的流程

August 16, 2022 · 1 min · jiezi