Python函数高效编程技巧,提升你的代码效率!

目录

1. 定义函数

2. 函数参数的不同类型

3. 处理函数的返回值

4. 匿名函数

5. 函数装饰器(Function Decorators)

6. 编写函数文档

总结


函数,作为Python模块化的基础,关于函数的定义:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

也就是说,函数就是将一段代码的重复利用。为什么函数在Python中如此重要?主要有因为函数的一些特性,包括:模块化和重用性、降低重复代码、提高代码可读性、代码调试和测试方便、灵活性和可扩展性高。那么今天我们来一起学习Python函数的技巧,文章可能内容有点多,但是我尽量给大家讲清楚。下面直接开始。

1. 定义函数

函数的一般语法如下:

def function_name(parameters):
    """函数文档字符串(可选)"""
    # 函数体,包含一系列操作
    return expression  # 可选,用于返回值


下图是函数的各部分介绍:

图来自菜鸟教程:菜鸟教程

其中:

  • def 关键字用于定义函数。

  • function_name 是函数的名称,按照命名规范,应该是小写字母,单词间可以用下划线 _ 分隔。

  • parameters 是函数的参数列表,可以是零个或多个,多个参数之间用逗号 , 分隔。

  • 函数体是缩进的代码块,包含了函数的操作。

  • return 语句可选,用于返回函数的结果。

调用函数也非常简单,只需使用函数名称和相应的参数即可:

result = function_name(arguments) 

这里的 arguments 是函数调用时传递给函数的实际值,这些值会被传递给函数的参数,但是在定义函数的时候,它只是形式参数,是为了方便我们写代码的逻辑的。在函数执行后,可以用 result 变量保存返回的结果。

2. 函数参数的不同类型

上面我们讲了函数的声明和定义,这里我们要详细讲一下Python 中有几种不同类型的函数参数,这涉及到函数参数的使用问题。

  • 位置参数(Positional Arguments)

这是最常见的参数类型,参数按照函数定义的顺序传递。

def greet(name, greeting):
    print(f"{greeting}, {name}!")

greet("TiYong", "Hello")  # 输出:Hello, TiYong!
  • 关键字参数(Keyword Arguments)

通过参数名指定参数值,可以不按照函数定义的顺序传递。

def greet(name, greeting):
    print(f"{greeting}, {name}!")

greet(greeting="Hi", name="TiYong")  # 输出:Hi, TiYong!
  • 默认参数(Default Arguments)

定义函数时为参数指定默认值,在调用时可以不传递这些参数。

def greet(name, greeting="Hello"):
    print(f"{greeting}, {name}!")

greet("TiYong")  # 输出:Hello, TiYong!
  • 可变参数(Variable Arguments)

允许函数接受可变数量的参数,有两种类型:*args 和 **kwargs

    • *args 用于接收任意数量的位置参数,它将这些参数作为元组(tuple)处理。
    • **kwargs 用于接收任意数量的关键字参数,它将这些参数作为字典(dictionary)处理。
def add(*args):
    total = 0
    for num in args:
        total += num
    return total

print(add(1, 2, 3, 4))  # 输出:10

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=30, city="New York")
# 输出:
# name: Alice
# age: 30
# city: New York

函数的参数虽然可以任意组合使用,但需要遵循一定的顺序:位置参数、默认参数、可变位置参数 *args、可变关键字参数 **kwargs

3. 处理函数的返回值

处理函数的返回值需要根据函数的具体情况和调用需求。下面是一些常用的方法:

# 1.存储到变量中:
# 将函数的返回值存储到一个变量中,以便后续使用。

result = my_function(argument) 


# 2.直接使用:
# 在需要的地方直接使用函数的返回值。

print(my_function(argument)) 


# 3.条件判断:
# 根据返回值的情况执行不同的操作。

if my_function(argument):     # 如果返回值为真,执行某些操作 else:     # 如果返回值为假,执行其他操作 



# 4.传递给其他函数:
# 将函数的返回值作为参数传递给另一个函数。

another_function(my_function(argument))  

# 5.解构返回的元组或列表:
# 如果函数返回的是元组或列表,可以通过解构来获取各个元素。
a, b = return_tuple() 

4. 匿名函数

匿名函数(Anonymous Functions)是指没有具体名称的函数,通常使用 lambda 关键字创建。使用匿名函数可以避免定义一个完整的函数,简化代码结构。

匿名函数的一般语法如下:

lambda arguments: expression
  • lambda 是关键字。
  • arguments 是函数的参数,类似于常规函数的参数。
  • expression 是函数的主体,也就是函数要执行的操作。
  • :是区分参数和函数主体的标志。

示例代码:

# 简单的函数加法
add = lambda x, y: x + y
print(add(3, 5))  # 输出:8


# 作为函数的返回值
def make_incrementor(n):
    return lambda x: x + n

increment_by_5 = make_incrementor(5)
print(increment_by_5(10))  # 输出:15

5. 函数装饰器(Function Decorators)

函数装饰器是Python中用于修改或扩展函数功能的语法糖。它允许开发者在不更改函数代码的前提下,动态地为函数添加新的行为或功能。在Python中,装饰器是通过使用@decorator语法来实现的。

简单展示一个装饰器的使用,下面的解释已经是最简单的解释了,如果还是不清楚,就照着代码敲一敲,实在想不明白,就找我。

# 定义一个函数,里面嵌套了一个函数
def a(func):
    def b():
        print("我是b()函数里,调用函数  前 的句子!")
        func()
        print("我是b()函数里,调用函数  后 的句子!")
    return b

# 定义第二个函数
def c():
    print("我是c函数!")


# 一般形式,我们将c函数作为参数传入a,再赋值给afunc
afunc = a(c)

'''
我们调用afunc()函数,
注意:当你把一对小括号放在后面,这个函数就会执行;
然而如果你不放括号在它后面,那它可以被到处传递,
并且可以赋值给别的变量而不去执行它。 
'''

# 这时,afunc()作为函数输出。
afunc()


###############重点来啦········
#我们使用@
@a
def d():
    """我是一个函数装饰器"""
    print("我是一个函数装饰器")


# 这时候我们再调用d(),就直接输出:
d()

'''
输出如下:
我是b()函数里,调用函数  前 的句子!
我是一个函数装饰器
我是b()函数里,调用函数  后 的句子!
'''

# 特别解释: @a 就等价于  afunc = a(d)

装饰器的优势:

  • 代码更简洁,易于维护
  • 提高代码复用性
  • 符合 Python 的“开闭原则”

装饰器的注意事项

  • 装饰器会改变函数的签名,因此在使用装饰器时,需要确保被装饰函数的签名与装饰器兼容。
  • 装饰器可能会影响函数的性能,因此在使用装饰器时,需要进行性能测试。

6. 编写函数文档

上面有那么多函数,这时候每个函数的文档说明,就会成为理解这个函数的重要信息。那么如何编写清晰明了的文档字符串(docstrings)呢?

所谓的文档字符串(docstrings)是函数、类或模块的第一个逻辑行,用于描述该函数、类或模块的作用、参数、返回值等信息。良好的文档字符串可以让其他开发者快速了解你的代码,并且方便生成文档。

一般情况下,使用三重引号 """ 或 ''' 来编写文档字符串。下面是一个示例:

def my_function(parameter1, parameter2):
    """
    这是一个示例函数的文档字符串。

    参数:
    - parameter1: 描述参数1的作用
    - parameter2: 描述参数2的作用

    返回值:
    - 返回值的说明

    示例用法:
    >>> my_function(1, 2)
    3
    """
    return parameter1 + parameter2

下面是一些编写清晰文档字符串的建议:

  • 概述:简要概述函数的作用和功能。
  • 参数说明:详细描述函数的参数,包括参数名、类型以及每个参数的作用。
  • 返回值说明:明确描述函数的返回值,包括返回值的类型以及它的具体含义。
  • 示例用法:提供函数的示例用法,展示输入参数和期望的输出结果。
  • 其他信息:根据需要添加其他相关信息,如函数的实现细节、注意事项等。

总结

在函数式编程中,函数被视为一等公民,可以作为参数传递给其他函数,也可以作为函数的返回值。但是,在编写函数时,避免不必要的函数调用也是提高性能的重要方面之一。下面是一些优化函数性能的技巧:

  • 函数内联,避免函数调用的开销;
  • 条件语句优化,将频繁执行的条件判断提前到函数外部;
  • 缓存结果,尤其适用于递归函数,避免重复计算;
  • 惰性计算,延迟计算直到需要的时候。

我们下一篇文章将开始Python高阶特性的讲解,继续学习、记录python的下一个知识点。

如果感觉阅读对您还有些作用,可以评论留言,关注我。谢谢您的阅读!

往期学习:

Python安装教程(版本3.8.10)windows10

Linux系统:安装Conda(miniconda)

Conda快速安装的解决方法(Mamba安装)

VSCode安装教程(版本:1.87.0)Windows10

Python基础语法:从入门到精通的必备指南

Python的基本数据类型

Python数据类型间的转换(隐式、显式)-CSDN博客

Python基础知识:运算符详解-CSDN博客

Python基础知识:数字类型及数学函数详解-CSDN博客

Python字符串操作及方法详解!一篇就搞定!-CSDN博客

Python列表及其操作详解,从此不再迷茫!-CSDN博客

Python元组(Tuple)深度解析!

Python字典的使用技巧(一篇详解)

Python条件控制深度解析,成为编程必备

Python循环语句全解析(附实战演练)

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TiYong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值