函数的定义与使用

2022-12-21 Python基础

首先来看函数的定义,注意函数也支持return语句。

def 函数名(参数列表):
    函数体

案例

def add(a, b):
    return a + b

if __name__ == '__main__':
    print(add(1, 2))

# 函数中的参数

# 位置参数

传入的两个整数按照位置顺序依次赋给函数的参数 a 和 b,参数 a 和参数 b 被称为位置参数。就像我们上面那个案例使用的那样,当然也可以是空参函数。

def add(a, b):
    return a + b

if __name__ == '__main__':
    print(add(1, 2))   # a=1,b=2

# 默认参数

在定义函数时,可以为参数提供一个缺省值,如果传递参数时,可以忽略部分参数,如果该参数被调用时没有传递,则会由一个默认值,写法和js相同。

def add_student(name, age, city='nanjing'):
    print(name)
    print(age)
    print(city)

add_student('jerry', 12)

# 可变参数

在函数定义中,在参数前加上符号 * 表示函数可以接受可变数量的参数,如下所示

def 函数(*args):
    函数体

案例如下,注意args的类型是一个元组

def add(*args):
    sum = 0
    for arg in args:
        sum = sum + arg
    print('len = %d, sum = %d' % (len(args), sum))

add(1)
add(1, 2)
add(1, 2, 3)

# 关键字参数

Python 允许调用函数时,以 “参数名 = 参数值” 的形式传递参数

def add(a, b):
    return a + b

add(a=1, b=2)

"参数名 = 参数值" 形式的参数,例如 a = 1 和 b = 2,被称为关键字参数。在函数定义中,在参数前加上符号 ** 参数表示函数可以接收关键字参数,如下所示:

def add(*args, **kwargs):
add(1,2,3, name='CV大魔王',age=33)  # 1,2,3对应*args  
								# name='CV大魔王',age=33 对应**kwargs,**kwargs本质上就是字典

案例

def test(*args, **kwargs):
    for ar in args:
        print(ar)
    print(kwargs.keys())

test(1, 1, 3, name='CV大魔王', age=33)

运行结果如下

1
1
3
dict_keys(['name', 'age'])

# 参数定义类型的方法

参数后加:数据类型即可指定参数的数据类型,这个和TypeScript类似,后面加上=同样可以指定默认数据。

def test(name: str, age: int = 33):
    print(name)
    print(age)

需要注意的是,如果传入的类型和定义的类型不匹配,编译一样可以通过,换句话来说,这就是给程序员看的,python3.7开始支持此写法。

# 匿名函数lambda

f = lambda: 1
print(f())

f1 = lambda x, y: x + y
print(f1(2, 3))

f2 = lambda: print(1)
f2()

是不是感觉没有什么用?来看看实际使用场景,list列表中的sort排序函数,有一个参数key能够根据某个参数进行排序,使用方式如下:

users = [
    {'name': 'name1', 'age': 20},
    {'name': 'name2', 'age': 18},
    {'name': 'name3', 'age': 21},
]

users.sort(key=lambda x: x['age'])  # 根据age进行排序
print(users)
上次更新: 1 年前