- 函数名其实是指向函数对象的应用,可以将这个引用赋给其他变量
>>> a = abs>>> a(-1)1

函数执行完毕也没有
return语句时,自动return None。return None可以简写成return。方法可以有多个返回值
import mathdef move(x, y, step, angle=0):nx = x + step * math.cos(angle)ny = y - step * math.sin(angle)return nx, ny>>> x, y = move(100, 100, 60, math.pi / 6)>>> print(x, y)151.96152422706632 70.0
函数的参数
位置参数
函数根据形参的位置进行传参
默认参数
- 注意:传参时,必填参数在前,默认参数在后,否则解释器会报错 ```python def power(x, n=2): # n为默认参数 pass
power(1, n=3) power(n=3, 1) SyntaxError: positional argument follows keyword argument ```
- 默认参数设计原则:把变化大的参数放前面,变化小的可以设置为默认参数放后面。
- 要牢记:默认参数必须指向不变对象
为什么要设计str、None这样的不变对象呢?因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。
可变参数
传入函数的参数个数可变
其实就是传入了一个tuple
def calc(*numbers):sum = 0for n in numbers:sum = sum + n * nreturn sum
若要将list或者tuple中的元素作为可变参数传入,可以在list或者tuple前加上一个*号,以此把元素作为可变参数传入:
>>> nums = [1, 2, 3]>>> calc(nums) # 这样子的话,相当于将两个列表相乘Traceback (most recent call last):File "<pyshell#8>", line 1, in <module>calc([1,2,3])File "<pyshell#6>", line 4, in calcsum = sum + n * nTypeError: can't multiply sequence by non-int of type 'list'>>> calc(*nums)14
关键字参数
允许调用者传入任意个含参数名的参数
其实就是传入一个dict
def person(name, age, **kw): # kw为关键字参数print('name:', name, 'age:', age, 'other:', kw)>>> person('Michael', 30)name: Michael age: 30 other: {}>>> person('Adam', 45, gender='M', job='Engineer')name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}# 也可以直接传入一个字典,不过得注意要在对应参数前加上**>>> extra = {'city': 'Beijing', 'job': 'Engineer'}>>> person('Jack', 24, **extra)name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
参数组合
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数。参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
