zoukankan      html  css  js  c++  java
  • 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'})

    完。

  • 相关阅读:
    windows下安装redis
    十五oracle 触发器
    Flask 学习 六 大型程序结构
    Flask 学习 五 电子邮件
    Flask 学习 四 数据库
    Flask学习 三 web表单
    Flask学习 二 模板
    Flask学习 一 基本结构
    Python操作Redis
    Python操作MySQL
  • 原文地址:https://www.cnblogs.com/itwhite/p/12298001.html
Copyright © 2011-2022 走看看