学习资源:廖雪峰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) #调用函数示例


关键字参数将多个参数组装成一个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.递归函数





如果一个函数在内部调用函数本身,这个函数就是递归函数



通过栈实现,每调用一层函数,栈就加一层栈帧,每当函数返回,栈就减一层栈帧

优点是逻辑简单清晰,缺点是调用过深会导致栈溢出