学习资源:廖雪峰Python教程
重点记录与c,java有区别的知识点,红色部分重点注意。
二、函数
1.函数调用
可以把函数名赋给一个变量,相当于给这个函数起了一个别名:
a = abs #abs是绝对值函数
a(-1) #输出1
2.定义函数
①定义一个函数需要使用def语句
def my_abs(x):
if x >= 0:
return x
else:
return -x
②空函数
def none():
pass
③返回多个值
def fun(a,b):
return a + b, a - b
x, y = fun(2, 3)
x,y分别打印5,-1。实际上返回的还是单一的值,只不过是一个tuple。一个tuple中的值可以依次赋给多个变量
3.函数的参数
①位置参数
def fun(a, b, c)
print(a, b, c)
fun(1, 2, 3) #调用函数示例
调用函数时,传入的两个值按位置顺序依次赋给a,b
② 默认参数
def fun(a, b = 2, c = 3)
print(a, b, c)
fun(1) #调用函数示例1
fun(1, c = 5) #调用函数示例2
不按参数顺序提供默认参数时,需把参数名写上
必选参数在前,默认参数在后,否则会报错,默认参数
必须指向不变对象
③可变参数
def calc(*nums)
sum = 0
for n in nums:
sum = sum + n
return sum
在参数前加一个 * 号,此时可以传入任意个参数,nums实际上
接受到的是一个tuple
把lsit或者tuple前加一个 * 号,变成可变参数传递:
nums = [1, 2, 3]
calc(*nums) #调用函数示例
④关键字参数
与可变参数将多个参数组装成一个tuple不同,
关键字参数将多个参数组装成一个dict:
⑤命名关键字参数
def person(name, age, **kw):
pass
person('djs', 23, city = 'Chongqing') #调用函数示例1
person('djs', 23, city = 'Chongqing',gender = 'M') #调用函数示例2
extra = {city : 'Chongqing', gender : 'M'}
person('djs', 20, **extra) #调用函数示例3
调用函数时,需传入参数名
命名关键字参数需要一个分隔符 * 号,* 号后面的参数视为命名关键字参数,限制关键字参数的名字:
def person(name, age, *, city, gender): #只接受city和gender作为关键字参数
pass
person('djs', 23, city = 'Chongqing', gender = 'M') #函数调用示例
没有 * 号将被视为位置参数,
调用函数时,需传入参数名
⑥多种参数混合使用时, 参数定义的顺序必须是:
必选参数,默认参数,可变参数,命名关键字参数,关键字参数
def fun1(a, b = 0, *args, **kw) #其中a为必选参数,b为默认参数,args为可变参数,kw为关键字参数
pass
def fun1(a, b = 0, *, c, **kw) #其中a为必选参数,b为默认参数,c为命名关键字参数,kw为关键字参数
pass
4.递归函数
如果一个函数在内部调用函数本身,这个函数就是递归函数
通过栈实现,每调用一层函数,栈就加一层栈帧,每当函数返回,栈就减一层栈帧
优点是逻辑简单清晰,缺点是调用过深会导致栈溢出