Python中遇到程序执行顺序的问题,大神们帮忙看下

import logging

from time import time as t
import time

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
is_debug = True

def count_time(is_debug):
def handle_func(func):
def handle_args(*args, **kwargs):
if is_debug:
begin = t()
func(*args, **kwargs)
print ‘args2’,‘kwargs2’,args,kwargs
logging.debug( “[” + func.name + "] -> " + str(t() - begin) )
else:
func(*args, **kwargs)
print ‘handle_args’, handle_args
print type(handle_args)

return handle_args

return handle_func

def pr():
for i in range(1,1000):
i = i * 2
time.sleep(0.01)
print “hello world”,t()

def test():
pr()
print ‘test’

@count_time(is_debug)
def test2():
pr()
print ‘test2’

@count_time(False)
def test3():
pr()
print ‘test3’

if name == “main”:
test()
test2()
test3()


结果
C:\Python27\python.exe D:/python/pyworkspcae/testdeco/timedeco.py
hello world 1500518211.89
test
hello world 1500518221.92
DEBUG:root:[test2] -> 10.0350000858
test2
args2 kwargs2 () {}
hello world 1500518232.03
test3
handle_args <function handle_args at 0x00000000029C6518>
<type ‘function’>

Process finished with exit code 0


DEBUG 输出这条信息顺序看不懂
Python中遇到程序执行顺序的问题,大神们帮忙看下


15 回复

作为一个靠缩进的语言,你这样子发别人很难看的清楚,建议发个 gist,或者至少也要注意一下排版


我无法理解你的问题

我纯粹是被标题吸引进来的,就想看看什么大婶这么厉害,还会编程,中关村扫地大婶?

另外,没缩进的 Python 代码我根本读不懂。。。。。。

那些说 python 缩进设计好的人呢?来来来,你来读。

如果这个是个不靠缩进的语言你读不读

我是小可爱,不是大婶

扫地的一般都是拆迁的壕,补个 gist 见上条回复

即使是 C,这种缩进编译器能过,人看的时候也遭不住…

给你抓把糖吧

有啥问题,
这是典型装饰器啊.

简单理解,就是
(is_debug)
def test2():
pr()
print ‘test2’

这是典型装饰器啊.

简单理解,就是
(is_debug)
def test2():
pr()
print 'test2’

单实际执行的是,
def count_time(is_debug):
def handle_func(test2):
def handle_args(*args, **kwargs):
if is_debug:
begin = t()
test2(*args, **kwargs)
print (‘args2’, ‘kwargs2’, args, kwargs)
logging.debug("[" + func.name + "] -> " + str(t() - begin))
else:
func(*args, **kwargs)
print (‘handle_args’, handle_args)
print (type(handle_args))

return handle_args

return handle_func

logging.debug 按代码是输出到了 stderr,print 输出到 stdout
而一般 stdout 是带缓冲的,stderr 不带缓冲立即输出

LZ 可以试试把 stdout 和 stderr 分开输出
python.exe timedeco.py >stdout.txt 2>stderr.txt

一言明了,感谢感谢

缩进本来就是 Python 语言的一部分啊。来来来,看你是用 Java/C/C++/C#还是用什么的,你把花括号全去掉了(也是去掉语言的一部分啊),读出来看看呢

回到顶部