5. Python基础学习笔记——函数

函数

  • Python不仅非常灵活地定义函数,而且本身内置了很多有用的内置函数,可以直接调用。
  • 借助于抽象,我们不会关心底层的具体计算过程,而直接在更高的层次上思考问题。
  • 函数就是最基本的一种代码抽象的方式。

调用函数

  • 可以使用help(function_name)的方式查看function_name的帮助信息。
  • max()可以接受任意多个参数,并且返回最大的那个。

数据类型转换

转换方式 函数调用
字符串转整型 a = int('123')
字符串转浮点型 a = float('123.321)
转换成字符串 s = str(1234)
转换成bool b = bool(13234)
转换成十六进制 h = hex(122)
十六进制转十进制 n = int('0x123', base=16)
  • 函数名称本身就是指向一个函数对象的引用,完全可以把函数名赋值给一个变量。

定义函数

  • 使用def语句定义一个函数,依次给出函数名称、括号、括号中的参数和冒号:,然后在缩进块中编写函数体,函数的返回值用return语句返回。
  • 若函数没有return,则默认返回None.
  • pass可以作为占位符,如没想好怎么写函数代码等
  • isinstance()函数可以检查数据类型。

    返回多个值

  • 实际上是返回一个tuple。return x, y, z等同于return (x, y, z)。前者编写更简单。
    

    小结

  • 定义函数时,需要确定函数名和参数个数
  • 如果需要,可以对参数类型做检查
  • str('%f' % a)也可以格式化。

函数的参数

  • 函数定义后,参数名称和位置确定,接口就确定了。对于调用者,只有能正确使用即可。
  • Python函数定义灵活而简单。除了必须参数,还可以使用默认参数,可变参数,关键字参数。

位置参数

  • def pow(x, n)

默认参数

  • def pow(x, n=2)
  • 必选参数在前,默认参数在后。否则Python解释器会报错。参数基于位置对应的。
  • 当函数有多个参数时,把变化大的参数放在前面,变化小的参数放在后面。变化小的参数就可以作为默认参数。
  • 默认参数降低了函数调用的复杂度,如果需要复杂功能,只需要多传递参数即可。并且只需要定义一个函数。
  • 默认参数必须指向不变的对象!比如list就不可行。

    def add_end(L=None):
    if L is None:
        L = []
    L.append("End")
    return L

可变参数

  • 定义如:def person(*names)
  • 可以传入0个或者任意多个参数
  • 参数添加一个*,会在内部组装成list/tuple
  • 调用时如果是一个list/tuple,可以加*解除
  • 具体参见实例

关键字参数

  • 定义如:def person(name, age, **kw)
  • 可变参数允许传入0个或任意多个参数,这些参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或者任意个含有参数名的参数。这些关键字在函数内部自动组装为一个dict。
  • 使用**kw
  • 满足函数的扩展功能

命名关键字参数

  • 可以指定接受的关键字名称
  • 定义如:def person(name, age, *, city, job)
  • 需要使用`*'作为特殊分割,是个特殊分隔符,而非参数。
  • 命名关键字参数必须传入参数名称,否则就会报错。和位置参数不同。
  • 可以有缺省值:def person(name, age, * , city='Beijing', job)

参数组合

  • 组合顺序必须是:必选参数,默认参数,可变参数/命名关键字参数和关键字参数
  • def f1(a, b, c=0, *args, **kw)
  • def f2(a, b, c=0, *, d, **kw)
  • Python解释器自动按照参数位置和参数名把对应的参数传递进去。
  • 对于任何函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

递归函数

  • 优点:定义简单、逻辑清晰。
  • 防止栈溢出
  • 在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用时,栈帧就会增加一层,每当函数返回,栈帧就会减少一层。
    

你可能感兴趣的:(5. Python基础学习笔记——函数)