python延时函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python延时函数相关的知识,希望对你有一定的参考价值。

参考技术A python延时函数是什么?一起来看看吧!

python延时函数即python time sleep() 函数,推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间。该函数没有返回值,sleep()方法语法:time.sleep(t),t表示推迟执行的秒数。

函数接收一个指定函数fn,一个延迟时间ms和指定函数的参数*args,在指定延迟后,返回指定函数fn的调用结果。函数使用sleep()方法来进行延迟,然后调用指定函数。delay函数在调用的时候,可以使用lambda表达式的匿名函数,也可以使用一般函数。需要注意的是当fn存在关键字参数时会发生异常。

例如:
#!/usr/bin/python import time   print "Start : %s" % time.ctime() time.sleep( 5 ) print "End : %s" % time.ctime() Start : Tue Feb 17 10:19:18 2013 End : Tue Feb 17 10:19:23 2013 from time import sleepdef delay(fn, ms, *args):   sleep(ms / 1000)   return fn(*args)# EXAMPLESdelay(   lambda x: print(x),   1000,   'later') # prints 'later' after one second

python延时绑定

关于 [lambda x: x*i for i in range(4)] 理解

 

题目:

lst = [lambda x: x*i for i in range(4)]
res = [m(2) for m in lst]
print res

实际输出:[6, 6, 6, 6]

想要输出 [0, 2, 4, 6] 应该怎么改?如下:

lst = [lambda x, i=i: x*i for i in range(4)]
res = [m(2) for m in lst]
print res

这个问题涉及到了Python的闭包及延时绑定的知识(Python作用域)。

在Python核心编程里,闭包的定义如下:

如果在一个内部函数里,对外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认定是闭包。

总结为三点:

1、是一个内嵌函数

2、对外部函数变量引用

3、外部函数返回内嵌函数

简单的闭包例子:

复制代码
def counter(start_at=0):
    count = [start_at]
    def incr():
        count[0] += 1
        return count[0]
    return incr
复制代码

上面的那道题,可以写成这样:

复制代码
def func():
    fun_list = []
    for i in range(4):
        def foo(x):
            return x*i
        fun_list.append(foo)
    return fun_list
for m in func():
  print m(2)
复制代码

func()是一个包含四个函数的列表:

[<function func at 0x00000000021CE9E8>, <function func at 0x00000000021CEA58>, <function func at 0x00000000021CEAC8>, <function func at 0x00000000021CEB38>]

当我们执行 m(2) 时,运行到foo()内部函数,发现变量 i 并不是foo()中的变量,于是就到外部函数func中寻找变量 i ,但此时外部的 for 已经循环完毕,最后的 i =3 。所以,每次

执行m(2),i 的值都是 3 ,因此,最终结果会是 [6, 6, 6, 6] 。

当在foo()中添加 i=i 后,即:

复制代码
def func():
    fun_list = []
    for i in range(4):
        def foo(x, i=i):
            return x*i
        fun_list.append(foo)
    return fun_list
for m in func():
  print m(2)
复制代码

这样的话,for循环执行时,就已经把 i(0, 1, 2, 3) 的值传给了foo()函数,此时的 i 已经是foo()函数的内部变量,运行到foo()函数时,就不会到外部函数寻找变量 i ,直接运行

x*i(0, 1, 2, 3),因此最终结果会是 [0, 2, 4, 6] 。

 

参考博客:傲娇的草履虫   https://www.cnblogs.com/delav/

以上是关于python延时函数的主要内容,如果未能解决你的问题,请参考以下文章

C语言中 delay 函数如何运用?

这两个延时函数该怎么理解,又怎么使用,请大神指教?

虚幻4延时函数(Delay)对gpu有影响吗 ?

解决延时函数耗费单片机内部资源的问题。可以将延时函数放在中断中……方法解释一下

关于keil延时函数的问题,和硬件不一致

C语言delay函数延时计算