智一面的面试题提供python的测试题
http://www.gtalent.cn/exam/interview?token=f098f775ffa0106d0451f7fd97357f23

装饰器、语法糖、注解
# 这是获取函数开始运行时间的函数
import time 
def runtime(func): 
def get_time(): 
print(time.time())
func()# run被调用
return get_time
@runtime
def run()
print('student run')
 
#运行
run()
 
#结果
当前时间
student run
 
由于有装饰器@runtime的存在,会把run这个函数作为参数丢到runtime(func)里面去,如果调整打印时间代码的位置会有不同结果:
 
# 这是获取函数结束运行时间的函数
import time 
def runtime(func): 
def get_time(): 
func()# run被调用
print(time.time())
return get_time
@runtime
def run()
print('student run')
 
#运行
run()
 
#结果
student run
当前时间
 
这里还要注意,这里还用到了闭包的概念,在运行run函数的时候,调用的实际上是get_time函数。
 
对于多个参数的函数如何调用,看下面例子
 
#有一个参数
import time 
def runtime(func): 
def get_time(i): 
func(i)# run被调用
print(time.time())
return get_time
@runtime
def run(i)
print('student run')
#运行
run(1)
 
#有两个参数
import time 
def runtime(func): 
def get_time(i,j): 
func(i,j)# run被调用
print(time.time())
return get_time
@runtime
def run(i,j)
print('student run')
#运行
run(1,2)
 
可以发现,这样写对于函数的多态不是很好,因此可以写为:
 
#自动适配参数
import time 
def runtime(func): 
def get_time(*arg): 
func(*arg)# run被调用
print(time.time())
return get_time
@runtime
def run(i)
print('student1 run')
 
@runtime
def run(i,j)
print('student2 run')
#运行
run(1)
run(1,2)
 
再次进行扩展,更为普适的写法,可以解决传入类似i=4的关键字参数写法:
 
#自动适配参数
import time 
def runtime(func): 
def get_time(*arg,**kwarg): 
func(*arg,**kwarg)# run被调用
print(time.time())
return get_time
@runtime
def run(i)
print('student1 run')
 
@runtime
def run(*arg,**kwarg)
print('student2 run')
 
@runtime
def run()
print('no param run')
#运行
run(1)
run(1,2,j=4)
run()
————————————————