现代主流的编程语言都会支持函数,与我们在初中所学的函数类似。编程语言保留了数学上对函数的定义,比如y=f(x)
。函数的作用是将输入做些变化再输出。函数会经常出现在各种编程场景,它的作用是将逻辑划分成更小的可复用单元,使复杂的问题通过一个个小问题来解决。在Python程序里定义一个函数很简单,你只需要给它一个名字-函数名,定义它的输入参数以及输出参数即可。虽然定义一个函数很简单,但是,设计以及维护上万个函数是需要一定的软件设计能力的,就像你掌握了汉语,但是要写出一篇高质量的散文,是需要你反复阅读大量的文章和练习的。
本文将通过以下方面来介绍Python中的函数:
定义一个函数需要以下信息:
以上代码片段来自digwebs,它向我们展示了Python中函数的定义。
def create_controller(root_path, controller_folder, is_develop_mode):
r = Router(is_develop_mode)
controller_modules_path = os.path.join(root_path, controller_folder)
for f in os.listdir(controller_modules_path):
if f.endswith('controller.py') and f != '__init__.py':
import_module = f.replace(".py", "")
m = importlib.import_module(import_module)
#s_m = getattr(m, import_module)
r.add_module(m)
def handle_route(ctx, next):
request_method = ctx.request.request_method
path_info = ctx.request.path_info
f, arg = r.route_to(request_method,path_info)
return f(ctx, *arg)
return (handle_route,10000)
# call function create_controller
create_controller('root_path','controller_folder',False)
def function_name(<args_1>,<args_2>,...):
<function_body>
return <result>
其中尖括号中的内容可有可无,def
、function_name
必须提供。
def handleroute(ctx, next)
就定义在函数def create_controller(root_path, controller_folder, is_developmode)
里function_name(arg_1,arg_2,...)
,比如create_controller('root_path','controller_folder',False)
每个函数都有自己的作用域,也就是说每个函数的函数体之间是互不相干的,比如定义以下2个函数:
def func1(args_1,args_2):
v1 = args_1
v2 = args_2
print(v1)
print(v2)
def func2(args_1,args_2):
v1 = args_1
v2 = args_2
print(v1)
print(v2)
func1('hello','digwebs')
func2('welcome','function')
以上2个函数里的变量v1
相互之间是独立的,也就是说修改func1
里的v1
不会影响到func2
中的v1
。当函数执行结束之后,变量v1
和v2
就会自动销毁。这些能力是由函数的作用域来保证的。
本文介绍了Python中常用的函数,它无处不在,是将复杂问题分解成若干个小问题的基础。然而,为了管理和维护上万个函数,则需要另外一些能力来实现,而这种能力就是面向对象。
{{ c.user.name }}
{{ c.content }}