• python


    怎么判断元素定位到了,这个问题很好判断,给元素加高亮显示:

            self.driver.execute_script(

                "arguments[0].setAttribute('style', arguments[1]);",

                element,

                "border: 2px solid red;" #边框border:2px; red红色

            )

    arguments[0] 这个参数,可以理解为python中的字符串格式化。
    ————————————————
    版权声明:本文为CSDN博主「迷失在人间的小羊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/mdtkzc/article/details/116459909

    python操作Excel的几种方式 - 走看看 

    Python可迭代对象和迭代器 - Ambitious~ - 博客园

    专业话:实现了__iter__方法的对象就是可迭代对象

    实现了__iter__方法的对象就叫做可迭代对象,__iter__方法的作用就是返回一个迭代器对象。 直观理解就是能用for循环进行迭代的对象就是可迭代对象。

    python-生成器_爱吃水饺的小京的博客-CSDN博客_python生成器

    生成器函数:使用常规的def语句编写,但是使用yield语句一次返回一个结果,在每次结果产生之间挂起和恢复他们的状态
    生成器表达式:类似列表推导,但是返回一个按需产生结果的一个对象,而不是创建一个结果列表

    生成器函数定义
    def functionname(参数):
    TODO
    yield 返回值
    TODO
    生成器函数使用yield返回一个值,yield语句会挂起该函数并向调用者传回一个值,但同时也保留了足够的状态使函数能从它离开的地方继续,当继续时,函数在上一个yield传回后立即继续执行

    def gensquares(N):
        for i in range(N):
            yield i**2

    x=gensquares(3)
    print(type(x))
    print(dir(x))

    运行结果:

    <class 'generator'>
    ['__class__', '__del__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__name__', '__ne__', '__new__', '__next__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'gi_code', 'gi_frame', 'gi_running', 'gi_yieldfrom', 'send', 'throw']

    1
    2
    3
    可以看出函数是一个generator,并且内置方法有__iter__和__next__,所以可以用迭代工具,以及next函数

    协程

    又称微线程。协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。 为啥说它是一个执行单元,因为它自带CPU上下文。这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程。 只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的。

    通俗的理解:在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定
     

    协程和线程差异
    在实现多任务时, 线程切换从系统层面远不止保存和恢复 CPU上下文这么简单。 操作系统为了程序运行的高效性每个线程都有自己缓存Cache等等数据,操作系统还会帮你做这些数据的恢复操作。 所以线程的切换非常耗性能。但是协程的切换只是单纯的操作CPU的上下文,所以一秒钟切换个上百万次系统都抗的住。

    协程 - yield
    简单实现协程
    import time

    def work1():
        while True:
            print("---work1---")
            yield
            time.sleep(0.5)
            
            
    def work2():
        while True:
            print("---work2---")
            yield
            time.sleep(0.5)
             
    def main():
        w1 = work1()
        w2 = work2()
        while True:
            next(w1)
            next(w2)
            
    if __name__ == '__main__':
        main()
     


    协程 - greenlet

    为了更好使用协程来完成多任务,python中的greenlet模块对其封装,从而使得切换任务变的更加简单

    使用 pin install greenlet 命令安装greenlet模块

    import time
    from greenlet import greenlet


    def test1():
        while True:
            print("---A---")
            gr2.switch()  # 切换到gr2中运行
            time.sleep(0.5)
            
            
    def test2():
        while True:
            print("---B---")
            gr1.switch()
            time.sleep(0.5)
             
    gr1 = greenlet(test1)
    gr2 = greenlet(test2)


    gr1.switch()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    运行结果:

    在这里插入图片描述

    协程 - gevent

  • 相关阅读:
    阿里、腾讯、京东、拼多多智慧农业斗法
    Unity中Shader抓取屏幕并实现扭曲效果
    scratch学习相关资料汇总
    redis的常用命令及使用特点
    【Axure视频教程】下拉列表控制动态面板
    聊一聊 Valgrind 监视非托管内存泄露和崩溃
    Toronto Research Chemicals盐酸乙环胺应用说明
    python之重写一般方法和重写特殊的构造方法
    【Matplotlib绘制图像大全】(十九):Matplotlib绘制等高线
    软件测试之Web测试流程和方法
  • 原文地址:https://blog.csdn.net/qq_38204134/article/details/125509654