Python 函数--详细整理

本文详细介绍了Python中的函数概念,包括函数定义、调用、参数类型(位置、关键字、默认和可变),作用域规则,以及返回值处理,还特别提到了Lambda函数的使用。

Python 函数

Python 是一种强大的编程语言,函数是 Python 编程中的基本构建块之一,它可以帮助我们将代码模块化,提高代码的可重用性可维护性

1 函数定义

Python 中的函数可以使用 def 关键字定义,定义语法如下:

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

def function_name(arguments):
    """docstring"""
    # function body
    return [expression]

函数定义语法由以下组成:

  1. def: Python 中定义函数的关键字。
  2. function_name: 函数名称,由字母、数字和下划线组成,不能以数字开头。
  3. arguments: 参数列表,由逗号分隔的形式参数和关键字参数组成。
  4. docstring: 函数文档字符串,用于描述函数的功能和使用方法。
  5. function body: 函数体,包含了执行函数需要执行的语句。
  6. return: 函数结果返回关键字,返回值可以为表达式或者省略。

以下是一个简单的函数定义示例:

def greet(name):
    """向名字问好"""
    print(f"Hello, {name}!")

这个函数名称为 greet,参数为 name,函数文档字符串描述了函数的功能,函数体打印了传入名称的问候语。

2 函数调用

定义函数后,我们就可以通过函数名调用函数,将需要输入的数据传递给函数,让函数执行并返回结果,调用语法如下:

function_name(arguments)

以下是一个简单的函数调用示例:

greet('Alice')

这个函数调用传入参数 Alice,函数体内部打印了 Hello, Alice!

3 函数参数

Python 中的函数可以接受两种类型的参数:位置参数和关键字参数。

3.1 位置参数

位置参数是函数定义的参数,按顺序传递给函数,调用时必须提供与函数定义的位置参数相同数量的参数。例如:

def greet(name, age):
    """向给定的名字和年龄发问候"""
    print(f"Hello, {name}. You are {age} years old.")

greet('Alice', 20)

这个函数定义了两个位置参数,调用时必须按照顺序传入相同数量的参数,函数体内部打印了 Hello, Alice. You are 20 years old.

3.2 关键字参数

关键字参数是通过名称指定的参数,调用时不必按顺序传递。关键字参数必须指定参数名和值。例如:

def greet(name, age):
    """向给定的名字和年龄发问候"""
    print(f"Hello, {name}. You are {age} years old.")

greet(age=20, name='Alice')

在函数调用时,指定参数名称和值,函数体内部仍然可以按照参数位置进一步操作。

3.3 默认参数

如果函数定义中指定了缺省值,调用函数时可以省略该参数,使用定义时的缺省值。例如:

def greet(name, age=18):
    """向给定的名字和年龄发问候"""
    print(f"Hello, {name}. You are {age} years old.")

greet('Alice')

在函数定义时,指定了 age 参数具有默认值 18,在函数调用时可以不传递 age 参数,函数体内部打印了 Hello, Alice. You are 18 years old.

3.4 可变参数

如果想要传入可变数量位置参数,请在参数名前面加上 * 号,可以接受一个任意数量的参数,这些参数将作为元组传递给函数体。例如:

def greet(name, *args):
    """向给定的名字和年龄发问候"""
    print(f"Hello, {name}. You have {len(args)} arguments: {args}")

greet('Alice', 'Bob', 'Charlie', 'David')

# 输出 Hello, Alice. You have 3 arguments: ('Bob', 'Charlie', 'David')

在这个函数内部,使用 *args 来指定参数数量可变,所有的额外参数将作为元组传递给函数体,函数体。

如果想要传入可变数量关键字参数,请在参数名前面加上 ** 号,可以接受一个任意数量的关键字参数,这些参数将作为字典传递给函数体。例如:

def greet(name, **kwargs):
    """向给定的名字和年龄发问候"""
    print(f"Hello, {name}. You have {len(kwargs)} arguments: {kwargs}")

greet('Alice', Bob=20, Charlie=23, David=18)

在这个函数内部,使用 **kwargs 来指定参数数量可变,所有的额外参数将作为字典传递给函数体,函数体输出 Hello, Alice. You have 3 arguments: {'Bob': 20, 'Charlie': 23, 'David': 18}

  • 加了 * 的参数会以元组的形式导入

  • 加了** 的参数会以字典的形式导入

  • / 之前的参数只能通过位置传递

  • * 之后的参数只能通过关键字传递,参数中星号 * 可以单独出现

下面是一个例子:

def func(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)

func(1, 2, 3, 4, e=5, f=6)

这个函数可以接受 6 个参数,其中 / 前面的两个参数 a 和 b 只能通过位置传递,不能通过关键字传递; / 后面的两个参数 c 和 d 既可以通过位置传递,也可以通过关键字传递;* 后面的两个参数 e 和 f 只能通过关键字传递,不能通过位置传递。 因此,下面的调用都是合法的:

func(1, 2, 3, 4, e=5, f=6)
func(1, 2, c=3, d=4, e=5, f=6)
func(1, 2, 3, d=4, e=5, f=6)

而下面的调用将会抛出异常:

func(a=1, b=2, c=3, d=4, e=5, f=6)  # 不能通过关键字传递 a 和 b
func(1, 2, c=3, d=4, 5, 6)  # 不能通过位置传递 e 和 f

4 函数作用域

Python 中的函数有自己的作用域,定义在函数之内的变量称为局部变量,只能在函数内部使用,无法在函数外部访问。 而在函数之外定义的变量称为全局变量,可以被整个程序访问。

函数作用域的规则可以总结为以下几点:

  1. 函数内部可以访问全局变量。
  2. 函数内部定义的变量是局部变量,只能在函数内使用。
  3. 函数内部可以修改全局变量,但需要在函数内部指定 global 关键字。

以下是一个修改全局变量的例子:

x = 0

def increment():
    global x
    x += 1

increment()
print(x)

在这个例子中,函数体内使用 global 关键字来指定 x 是全局变量,函数体内部将全局变量 x 的值增加了 1,最终输出 1

5 函数返回值

Python 中的函数可以返回单个值或者多个值。如果返回多个值,Python 会将返回值封装为元组。

以下是一个返回单个值的函数示例:

def add_numbers(x, y):
    """将两个数字相加并返回结果"""
    return x + y

result = add_numbers(3, 4)
print(result)

这个函数接受两个数字作为输入,将它们相加并返回结果。函数调用返回结果并将其赋值给变量 result,最终输出 7

以下是一个返回多个值的函数示例:

def get_name_stats(name):
    """返回给定名字的长度和第一个字母"""
    length = len(name)
    first_letter = name[0]
    return length, first_letter

name_length, name_first_letter = get_name_stats('Alice')
print(name_length)
print(name_first_letter)

这个函数接受一个名字作为输入,返回该名字的长度和第一个字母。函数调用同时返回两个值并将其赋值给 name_lengthname_first_letter,最终输出先输出 5,然后输出 A

6 Lambda 函数

Lambda 函数是一种匿名函数,它可以在一行代码中定义一个简单的函数,通常用于规模较小的函数体。Lambda 函数由 lambda 关键字引入,接受任意数量的参数(但是只能有一个表达式),并返回表达式的值。以下是一个简单的 Lambda 函数示例:

f = lambda x: x ** 2
print(f(4))

这个 Lambda 函数接受一个参数 x,返回 x 的平方,并将其赋值给变量 f,最终输出 16

Lambda 函数通常用于需要传递一个简单的函数体作为另一个函数的参数,例如 map()filter() 函数。.

匿名函数:lambda [arg1 [,arg2,.....argn]]:expression

---------------------------END---------------------------

题外话

当下这个大数据时代不掌握一门编程语言怎么跟的上时代呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。


👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值