美文网首页
2019实战第二期-函数读书打卡

2019实战第二期-函数读书打卡

作者: tipire | 来源:发表于2019-03-19 09:28 被阅读0次

    抽象之函数

    函数可以尽量避免重复的代码,简化代码。函数式结构化编程的核心。

    函数执行特定的操作并返回一个值

    def hello(name):
        return 'Hello, ' + name + '!'
    
    print(hello('world))
    

    运行这些代码后,将有一个名为 hello 的新函数。它返回一个字符串,其中包含向唯一参数
    指定的人发出的问候语

    给函数编写文档:以确保其他人能够理解,可添加注释(以#打头的内容)

    def square(x):
    'Calculates the square of the number x.'
    return x * x
    # 可以像下面这样访问文档字符串:
    print(square.__doc__)
    'Calculates the square of the number x.'
    #__doc__ 是函数的一个属性。属性将在第7章详细介绍。属性名中的双下划线表示这是一个特殊的属性
    

    有些函数什么都不返回,可以称为过程。如果没有声明其返回值,则默认返回None

    参数魔法

    在函数内部给参数赋值对外部没有任何影响

    >>> def try_to_change(n):
    ... n = 'Mr. Gumby'
    ...
    >>> name = 'Mrs. Entity'
    >>> try_to_change(name)
    >>> name
    'Mrs. Entity'
    

    字符串(以及数和元组)是不可变的(immutable),这意味着你不能修改它们(即只能替换
    为新值)。

    1.为何要修改参数

    在提高程序的抽象程度方面,使用函数来修改数据结构(如列表或字典)是一种不错的方式。

    def store(data, full_name):
        names = full_name.split()
        if len(names) == 2: names.insert(1, '')
        labels = 'first', 'middle', 'last'
        for label, name in zip(labels, names):
            people = lookup(data, label, name)
            if people:
                people.append(full_name)
            else:
                data[label][name] = [full_name]
    
    

    函数 store 执行如下步骤。
    (1) 将参数 data 和 full_name 提供给这个函数。这些参数被设置为从外部获得的值。
    (2) 通过拆分 full_name 创建一个名为 names 的列表。
    (3) 如果 names 的长度为2(只有名字和姓),就将中间名设置为空字符串。
    (4) 将 'first' 、 'middle' 和 'last' 存储在元组 labels 中(也可使用列表,这里使用元组只是为
    了省略方括号)。
    (5) 使用函数 zip 将标签和对应的名字合并,以便对每个标签名字对执行如下操作:
    获取属于该标签和名字的列表;
    将 full_name 附加到该列表末尾或插入一个新列表。

    2.如果参数是不可变的

    如果一定要修改参数,可玩点花样,比如将值放在列表中

    3.关键字参数和默认值

    有时候,参数的排列顺序可能难以记住,尤其是参数很多时。为了简化调用工作,可指定参
    数的名称。主要优点是有助于澄清各个参数的作用。

    参数指定默认值后,调用函数时可不提供它!可以根据需要,一个参数值也不提供、
    提供部分参数值或提供全部参数值。

    4.收集参数

    允许用户提供任意数量的参数很有用。

    def print_params(*params):
        print(params)
    def print_params_4(x, y, z=3, *pospar, **keypar):
        print(x, y, z)
        print(pospar)
        print(keypar)
    其效果与预期的相同。
    >>> print_params_4(1, 2, 3, 5, 6, 7, foo=1, bar=2)
    1 2 3
    (5, 6, 7)
    {'foo': 1, 'bar': 2}
    >>> print_params_4(1, 2)
    1 2 3
    ()
    {}
    

    相关文章

      网友评论

          本文标题:2019实战第二期-函数读书打卡

          本文链接:https://www.haomeiwen.com/subject/pjvwmqtx.html