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