{{ selected_gold.title }}

  • ¥ {{ selected_gold.original_price }}
  • ¥ {{ selected_gold.price }}
  • {{ selected_gold.number_of_order }} 人订阅
  • {{ selected_gold.total_likers_count }}
    由 {{ selected_gold.creator_name }} 编辑

    {{ title }}

    请登录购买({{ selected_gold.price }}元),即可解锁剩余教程
    点击购买

    • Air
    • 2018年9月20日

    函数

    现代主流的编程语言都会支持函数,与我们在初中所学的函数类似。编程语言保留了数学上对函数的定义,比如y=f(x)。函数的作用是将输入做些变化再输出。函数会经常出现在各种编程场景,它的作用是将逻辑划分成更小的可复用单元,使复杂的问题通过一个个小问题来解决。在Python程序里定义一个函数很简单,你只需要给它一个名字-函数名,定义它的输入参数以及输出参数即可。虽然定义一个函数很简单,但是,设计以及维护上万个函数是需要一定的软件设计能力的,就像你掌握了汉语,但是要写出一篇高质量的散文,是需要你反复阅读大量的文章和练习的。

    本文将通过以下方面来介绍Python中的函数:

    • 定义和调用函数
    • 函数的作用域

    定义和调用函数

    定义一个函数需要以下信息:

    1. 定义函数名字
    2. 定义函数的输入参数
    3. 定义函数的返回参数

    以上代码片段来自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>
    

    其中尖括号中的内容可有可无,deffunction_name必须提供。

    • 函数的定义可以放置到函数体内完成,比如上面的def handleroute(ctx, next)就定义在函数def create_controller(root_path, controller_folder, is_developmode)
    • 函数可以有返回结果,也可以没有返回结果,如果有返回结果,Python可以自动推断出返回结果的类型
    • Python的输入参数不需要指定类型,因为Python在自动运行的时候会自动推断输入参数的类型,因此Python具有弱类型特性
    • 调用函数的指令模式为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。当函数执行结束之后,变量v1v2就会自动销毁。这些能力是由函数的作用域来保证的。

    总结

    本文介绍了Python中常用的函数,它无处不在,是将复杂问题分解成若干个小问题的基础。然而,为了管理和维护上万个函数,则需要另外一些能力来实现,而这种能力就是面向对象