Python 学习笔记 | 2 函数进阶

本章内容:Python 中函数进阶知识介绍,包括函数的多返回值、函数的多种传参方式、匿名函数等。

所有相关代码可在https://github.com/hzyao/Python-Cookbook
进行查看。有兴趣的话,也可以关注俺的公众号生信小白要知道,谢谢!!!

边学习边实操,及时挖掘真美妙!搭配食用或许口味更佳哟!

顺便再问一嘴,有多少人和我一样点开 Python 就已经在怀念 R 了!

函数进阶

1 函数的多返回值

如果一个函数要有多个返回值,我们只需按照返回值的顺序,写对应顺序的多个变量接受即可,变量之间用逗号隔开,支持不同类型的数据return

# 使用多个变量接收多个返回值
def multi_return():
    return 6, "xmy", True

x, y, z = multi_return()
print(x)
print(y)
print(z)

2 函数的多种传参方式

由于使用方式的不同,函数常见的参数使用方式可分为 4 种:

  • 位置参数
  • 关键字参数
  • 缺省参数
  • 不定长参数

2.1 位置参数

位置参数:调用函数时根据函数定义的参数位置来传递参数。

注:传递的参数和定义的参数顺序及个数必须一致

# 位置参数
def test_func(name, age, gender):
    print(f"姓名:{
      
      name}, 年龄:{
      
      age}, 性别:{
      
      gender}")

test_func("xmy", "17", "male")

2.2 关键字参数

关键字参数:函数调用时通过**“键=值”**形式传递参数。

作用:可以让函数更加清晰且易于使用,同时也清除了参数的顺序需求。

注:函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。

# 关键字参数
def test_func(name, age, gender):
    print(f"姓名:{
      
      name}, 年龄:{
      
      age}, 性别:{
      
      gender}")

test_func("xmy", gender="male", age="17") # 可以与关键字参数混用,且可不按照参数定义顺序

2.3 缺省参数

缺省参数:也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传入该默认参数的值。

作用:当调用函数时没有传递参数,就会默认使用缺省参数对应的值;若为缺省参数传入值则会修改缺省参数的默认值。

注:所有位置参数必须出现在默认参数前,包括函数定义和调用,也就是说默认参数必须定义在最后。

# 缺省参数
def test_func(name, age, gender="male"):
    print(f"姓名:{
      
      name}, 年龄:{
      
      age}, 性别:{
      
      gender}")

test_func("xmy", "17")
test_func("run", 18, gender="female")

2.4 不定长参数

不定长参数:不定长参数也叫可变参数,用于**不确定调用的时候会传递多少个参数(包括不传参)**的场景。

作用:调用函数时若不确定参数个数,可以使用不定长参数。

不定长参数的类型:

  1. 位置传递:以*标记一个形式参数,以元组的形式接受参数,一般命名为args
  2. 关键字传递:以**标记一个形式参数,以字典的形式接受参数,一般命名为kwargs
# 不定长参数
## 位置传递
def test_func(*args):
    print(f"args参数类型是:{
      
      type(args)},内容是{
      
      args}")

test_func(666, "xmy")

## 关键字传递
def test_func(**kwargs):
    print(f"kwargs参数类型是:{
      
      type(kwargs)},内容是{
      
      kwargs}")

test_func(num=666, name="xmy")

3 匿名函数

3.1 函数作为参数传递

在前面的学习中,我们一直使用的函数都是接受数据作为参数传入,像数字、字符串、字典、列表、元组等等。

其实呢,函数本身也是可以作为参数传入另一个函数内进行使用的噢!

作用:计算逻辑的传递,而非数据的传递。任何逻辑都可以自行定义并作为函数传入。

# 函数作为参数传递
## 定义一个函数,接受另一个函数作为参数传入
def test_func(compute):
    result = compute(1, 2)
    print(type(compute))
    print(result)

## 定义一个函数,即将作为参数传入另一个函数
def compute(x, y):
    return x + y

## 调用并传入函数
test_func(compute)

3.2 lambda 匿名函数

函数定义中:

  • def,可以定义带有名称的函数
  • lambda,可以定义匿名函数(无名称

有名称的函数,可以基于名称重复使用;而无名称的匿名函数,只可临时使用一次

匿名函数定义语法:lambda 传入参数:函数体

  • lambda是关键字,表示定义匿名函数;
  • 传入参数,表示匿名函数的形式参数,如:x, y表示接收 2 个形式参数;
  • 函数体,就是函数的执行逻辑,注:只能写一行,无法写多行代码;若需多行,应使用def定义带名称的函数。
# lambda 匿名函数
## 定义一个函数,接受另一个函数作为参数传入
def test_func(any):
    result = any(1, 2)
    print(result)

## 通过 lambda 匿名函数形式,将匿名函数作为参数传入
test_func(lambda x, y: x + y)

# 以上使用 def 和 lambda 定义的函数功能完全一致,只不过 lambda 定义的函数是匿名的,无法二次使用。

猜你喜欢

转载自blog.csdn.net/weixin_43843918/article/details/131465595