python里一切皆对象,是一门面向对象的语言,没有java那么严格。函数也可以作为对象,作为参数传递。写得太烂,请参考下方的博客吧
#__Author: "Skiler Hao" #date: 2017/3/5 11:01 def speak_chinese(): """说中文""" print("你好!") def speak_english(): """说英语""" print("hello!") def greet(say): """调用说话方式,问候一下""" print(say) say() greet(speak_chinese) greet(speak_english)
既然函数能当做参数传递,传递过去还能够运行,那么我们就可以对传递进去的函数做一些装饰,额外补充一些功能
def speak_chinese(): """说中文""" print("你好!") def speak_english(): """说英语""" print("hello!") def greet(say): """对传过来的函数做一个简单装饰,都加上接下来是问候这句话""" print(‘接下来是问候!‘) say()
来一些复杂的装饰
def conn_db(): """连接数据库""" print("连接数据库中。。。") def close_db(): """关闭数据库""" print("关闭数据库。。。") def operation1(): """某些数据库操作""" print("数据库操作1。。。") def operation2(): """某些数据库操作""" print("数据库操作2。。。") def db_wrapper(operation): conn_db() operation() close_db() if __name__ == ‘__main__‘: db_wrapper(operation1)
我原本使用的operation1函数,但是现在使用db_wrapper(operation1)必须把函数作为参数扔到db_wrapper里,怎么办?
参考博客:http://python.jobbole.com/85056/
原文:http://www.cnblogs.com/skiler/p/6509171.html