• Python 快速入门笔记(6):函数


    本系列随笔是本人的学习笔记,初学阶段难免会有理解不当之处,错误之处恳请指正。转载请注明出处:https://www.cnblogs.com/itwhite/p/12298001.html

    函数定义

    示例:

    def add(a, b):
        return a + b;

    默认参数

    默认参数必须在必选参数之后,示例:

    def foo(a, b, c = 123, d = 'ok'):
        print a, b, c, d
    foo(1, 2)       # output: 1 2 123 ok
    foo(1, 2, 456)  # output: 1 2 456 ok

    可变参数:不定参数

    定义参数时,在参数名前面加入星号(*)表示可变参数(实际上是以 tuple 的形式实现的),示例:

    def calc(operation, *numbers):
        if (operation == 'sum'):
            ret = 0
            for n in numbers:
                ret += n
        elif (operation == 'mul'):
            ret = 1
            for n in numbers:
                ret *= n
        else:
            raise Exception("Invalid operation: " + str(operation))
        return ret;
    
    print calc('sum', 1, 2, 3, 4)   # output: 10
    print calc('mul', 1, 2, 3, 4)   # output: 24
    print calc('div', 1, 2, 3, 4)   # Exception: Invalid operation: div

    另外,python还支持将数组或tuple的内容传给可变参数,此时也需要在数组名(或tuple)前加上星号,例如:

    data = [2, 3, 4]
    print calc('sum', *data)        # output: 9
    print calc('sum', *[2, 3])      # output: 5

    关键字参数

    类似与 perl 中以一个 hash 值(python中称为字典)来接收参数的方式,接收字典参数的参数名前需要加上两颗星(**),示例:

    def foo(name, **details):
        print name, details
    
    foo('Jack', age = 23, email = 'jack@gmail.com') # output: Jack {'age': 23, 'email': 'jack@gmail.com'}
    foo('Lucy', age = 19, gender = 'female')        # output: Lucy {'gender': 'female', 'age': 19}

    注意:这里的字典参数的 key 是任意的,如需要限制能够传入的 key 值,需要用到下文中的“命名关键字参数”。

    命名关键字参数

    perl 中允许使用 Params::Validate 模块中的方法来做参数校验,可以限制参数个数和类型,python中目前还不知道如何以简单的方式限制参数类型,但是限制个数还是可以的:使用星号作为一个参数,后面跟允许传入的参数名,示例:

    def foo(name, *, age, gender, email):
        print(name, age, gender, email)
    
    foo('Jack', age = 23, email = 'jack@gmail.com', gender = "male") # Jack 23 male jack@gmail.com
    foo('Lucy', age = 19, gender = 'female')        # TypeError: foo() missing 1 required keyword-only argument: 'email'
    foo('Bob', age = 19, city = 'New York')         # TypeError: foo() got an unexpected keyword argument 'city'

    注意:python 3 才支持这种方式。

    参数组合

    在 Python 中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数 => 默认参数 => 可变参数 => 关键字参数,例如:

    def foo(a, b = 123, *c, **d):
        print(a, b, c, d)
    foo(1)           # (1, 123, (), {})
    foo(1, 2, 3, 4)  # (1, 2, (3, 4), {})
    foo(1, 2, 3, 4, name = "Jack", age = 23)  # (1, 2, (3, 4), {'age': 23, 'name': 'Jack'})

    完。

  • 相关阅读:
    第四章:Django模型——添加 Event发布会的表 报错
    第四章:Django模型——admin后台管理
    第四章:Django 模型 —— 设计系统表
    第三章:3.9 清除 Google 浏览器中的缓存
    第三章:3.9 关上窗户
    第三章:3.9 引用Django 认证登陆
    第三章:3.8 登陆 Django 默认后台
    降脂食物
    决定孩子人生高度的,不是知识而是这个!
    百万保险
  • 原文地址:https://www.cnblogs.com/itwhite/p/12298001.html
Copyright © 2020-2023  润新知