内置函数
Python内置了很多有用的函数,我们可以直接调用。
比如求绝对值的函数abs
1 | abs(100) |
max()求最大值:
1 | max(1, 2) |
Python内置的常用函数还包括数据类型转换函数,比如int()函数可以把其他数据类型转换为整数:
1 | int('123') |
数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:
1 | a = abs 变量a指向abs函数 |
自定义函数
定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
1 | def my_abs(x): |
如果你已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动Python解释器,用 from abstest import my_abs
来导入my_abs()函数,注意abstest是文件名(不含.py扩展名):
1 | from abstest import my_abs |
空函数,可以用pass语句:
1 | def nop(): |
返回多个值:
1 | import math |
关键字参数
函数的参数可以为默认值、可变参数等,其中有一种比较特殊为关键字参数:
主要通过 **kw
这个函数完成
1 | def person(name, age, **kw): |
可以传入任意个数的关键字参数:
1 | person('Bob', 35, city='Beijing') |
关键字参数有什么用?它可以扩展函数的功能。比如,在person函数里,我们保证能接收到name和age这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。
和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去:
1 | extra = {'city': 'Beijing', 'job': 'Engineer'} |
如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下:
1 | def person(name, age, *, city, job): |
匿名函数
当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
1 | list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) |
通过对比可以看出,匿名函数lambda x: x * x实际上就是:
1 | def f(x): |