Python3入门指南Python语言的特点和实际应用Python3环境搭建配置VSCode进行Python开发Python基础语法Python变量与数据类型Python数据类型转换Python解释器使用Python注释使用Python运算符Python数字类型Python字符串操作Python列表操作Python元组使用Python字典使用Python集合使用Python条件控制详解Python循环语句详解Python编程入门实践Python推导式详解Python迭代器和生成器Python with语句详解Python函数详解Python lambda(匿名函数)Python装饰器Python数据结构Python模块和包使用Python中__name__和__main__的用法Python输入输出:从基础到文件操作Python文件操作Python OS模块使用Python错误和异常处理Python面向对象编程Python命名空间和作用域Python虚拟环境:venv详细教程Python类型注解Python标准库常用模块Python正则表达式Python CGI编程Python MySQL(mysql-connector驱动)Python MySQL(PyMySQL驱动)Python网络编程Python发送邮件Python多线程编程Python XML解析Python JSON解析Python日期和时间处理Python操作MongoDBPython urllib库使用Python uWSGI 安装与配置Python pip包管理工具Python operator模块Python math模块Python requests模块HTTP请求Python random模块Python OpenAI库Python AI绘画制作Python statistics模块Python hashlib模块:哈希加密Python量化交易Python pyecharts数据可视化Python Selenium网页自动化Python BeautifulSoup网页数据提取Python Scrapy爬虫框架Python Markdown转HTMLPython sys模块Python Pickle模块:数据存储Python subprocess模块Python queue队列模块Python StringIO内存文件操作Python logging日志记录Python datetime日期时间处理Python re正则表达式Python csv表格数据处理Python threading 多线程编程Python asyncio 异步编程Python PyQt 图形界面开发Python 应用方向和常用库框架

Python函数详解

函数是Python编程中最重要的概念之一。它们就像是一个个可以重复使用的小工具,每个工具都有自己特定的功能。学会使用函数,能让你的代码更加整洁、高效,也更易于维护。


什么是函数?

函数是一段组织好的、可以重复使用的代码,用来完成特定的任务。Python本身提供了很多内置函数,比如我们经常用到的print()。除此之外,我们还可以创建自己的函数,这些叫做自定义函数。

使用函数主要有两个好处:一是让程序结构更清晰,二是避免重复写相同的代码。


如何定义函数

定义函数需要遵循几个基本规则:

  • 使用def关键字开头,后面跟着函数名和圆括号

  • 圆括号内可以定义参数

  • 函数的第一行可以写一个文档字符串,用来描述函数的作用

  • 函数内容以冒号开始,并且要缩进

  • 使用return语句返回结果,如果没有return,函数会返回None

基本语法如下:

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


函数定义实例

让我们从一个简单的例子开始:

def hello():
    print("Hello World!")

hello()

这个函数不需要任何参数,调用它就会输出"Hello World!"。

再看一个带参数的例子:

def max(a, b):
    if a > b:
        return a
    else:
        return b

result = max(4, 5)
print(result)  # 输出:5

这个函数比较两个数字,返回较大的那个。

再来一个计算面积的例子:

def area(width, height):
    return width * height

def print_welcome(name):
    print("Welcome", name)

print_welcome("fly63")
w = 4
h = 5
print("宽度 =", w, " 高度 =", h, " 面积 =", area(w, h))


函数调用

定义函数后,我们可以在其他函数中调用它,也可以在Python解释器中直接调用。

def printme(str):
    print(str)
    return

printme("第一次调用函数!")
printme("第二次调用函数!")


参数传递

理解Python中的参数传递很重要。在Python中,变量本身没有类型,类型属于对象。

Python中有两种类型的对象:

  • 不可变对象:数字、字符串、元组

  • 可变对象:列表、字典

对于不可变对象,函数内修改参数值不会影响原始数据

def change(a):
    print("函数内修改前:", a)  # 输出:1
    a = 10
    print("函数内修改后:", a)  # 输出:10

a = 1
change(a)
print("函数外:", a)  # 输出:1

对于可变对象,函数内修改会影响原始数据:

def changeme(mylist):
    mylist.append([1,2,3,4])
    print("函数内取值:", mylist)

mylist = [10,20,30]
changeme(mylist)
print("函数外取值:", mylist)

两个print语句都会显示[10, 20, 30, [1, 2, 3, 4]]。


参数类型详解

必需参数

必需参数必须在调用函数时提供,并且顺序要正确。

def printme(str):
    print(str)
    return

printme()  # 这样调用会报错

关键字参数

使用参数名来指定值,这样顺序就不重要了。

def printinfo(name, age):
    print("名字:", name)
    print("年龄:", age)

printinfo(age=50, name="fly63")

默认参数

可以为参数设置默认值,调用时不传递就使用默认值。

def printinfo(name, age=35):
    print("名字:", name)
    print("年龄:", age)

printinfo(name="fly63")  # age使用默认值35
printinfo(age=50, name="fly63")

不定长参数

有时候我们不知道函数会接收多少个参数,这时可以使用不定长参数。

使用*接收元组形式的不定长参数:

def printinfo(arg1, *vartuple):
    print("输出:")
    print(arg1)
    for var in vartuple:
        print(var)

printinfo(10)
printinfo(70, 60, 50)

使用**接收字典形式的不定长参数:

def printinfo(arg1, **vardict):
    print("输出:")
    print(arg1)
    print(vardict)

printinfo(1, a=2, b=3)

强制位置参数(Python 3.8+)

Python 3.8引入了新的参数语法,可以强制某些参数必须通过位置传递。

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

# 正确用法
f(10, 20, 30, d=40, e=50, f=60)

# 错误用法
f(10, b=20, c=30, d=40, e=50, f=60)  # b不能使用关键字参数
f(10, 20, 30, 40, 50, f=60)          # e必须使用关键字参数


匿名函数(lambda函数)

lambda函数是一种简单的、在一行内定义函数的方式。

基本语法:lambda [参数]: 表达式

x = lambda a: a + 10
print(x(5))  # 输出:15

sum = lambda arg1, arg2: arg1 + arg2
print(sum(10, 20))  # 输出:30

lambda函数可以嵌套在其他函数中:

def myfunc(n):
    return lambda a: a * n

mydoubler = myfunc(2)
mytripler = myfunc(3)

print(mydoubler(11))  # 输出:22
print(mytripler(11))  # 输出:33


return语句

return语句用来从函数返回结果。如果没有return语句,或者return后面没有跟表达式,函数会返回None。

def sum(arg1, arg2):
    total = arg1 + arg2
    print("函数内:", total)
    return total

result = sum(10, 20)
print("函数外:", result)


实际应用建议

1. 函数命名要有意义

好的函数名能让人一眼就知道这个函数是做什么的。

# 不好的命名
def abc(x, y):
    return x * y

# 好的命名
def calculate_area(width, height):
    return width * height

2. 保持函数功能单一

一个函数应该只做一件事情,这样更容易测试和维护。

# 不好的做法:一个函数做多件事情
def process_data_and_save(filename):
    # 处理数据...
    # 保存文件...
    pass

# 好的做法:拆分成多个函数
def process_data(data):
    # 处理数据...
    return processed_data

def save_to_file(data, filename):
    # 保存文件...
    pass

3. 使用文档字符串

为函数添加文档字符串,说明函数的作用、参数和返回值。

def calculate_circle_area(radius):
    """
    计算圆的面积
    
    参数:
    radius -- 圆的半径
    
    返回:
    圆的面积
    """
    return 3.14159 * radius * radius

4. 合理的参数设计

避免参数过多,如果参数太多,考虑使用字典或类来组织数据。

# 参数太多,不易使用
def create_user(name, age, email, phone, address, city, country):
    pass

# 更好的方式
def create_user(user_info):
    pass

user_data = {
    'name': '张三',
    'age': 25,
    'email': 'zhangsan@fly63.com'
}
create_user(user_data)


常见错误及避免方法

1. 修改可变默认参数

# 错误做法
def append_to_list(item, my_list=[]):
    my_list.append(item)
    return my_list

# 正确做法
def append_to_list(item, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(item)
    return my_list

2. 忽略返回值

# 不好的做法
def process_data(data):
    # 处理数据但没有返回结果
    data.sort()

# 好的做法
def process_data(data):
    processed_data = data.copy()
    processed_data.sort()
    return processed_data


总结

函数是Python编程的基础构件,掌握函数的使用对写出好代码至关重要。记住这些要点:

  • 使用有意义的函数名

  • 保持函数功能单一

  • 合理设计参数

  • 为函数添加文档说明

  • 理解参数传递的机制

  • 善用各种参数类型

通过不断练习,你会越来越熟练地使用函数,写出更加优雅和高效的Python代码。

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/course/36_2094

目录选择