当前位置: 首页 > news >正文

Python 函数与模块

目录

1. 函数

1.1 无参函数

1.2 带参函数

1.3 函数中变量的作用域

1.4 lambda 函数

1.5 内建函数

2. 模块与包

2.1 模块

2.2 包

2.3 常用模块


1. 函数

函数是一段可以重复使用的代码,通过传递的参数返回不同的结果,对于重复使用的代码,可以编写为自定义函数以便于重复使用代码,同时提高开发人员的开发效率。函数可以分为无参函数和带参函数。

1.1 无参函数

Python 的自定义无参函数并不复杂。
以关键字 def 开始,后面跟函数名、小括号、冒号,最后使用 return 退出函数。用表达
式可以传递函数的返回值,如果没有返回值,则返回 None
函数是以字母、数字和下划线组成的字符串,但是不能以数字开头。
使用无参函数实现两数相加并输出二者之和。示例代如下:
def add():op1=10op2=20rt=op1+op2print(op1,'+',op2,'=',rt)return
add()
#程序输出:
10 + 20 = 30
该程序首先定义了无参函数 add() ,它输出 10+20 的结果值, return 没有返回值,直接使用
函数名 add() 进行了调用。
把上面的代码进行修改,用 return 返回结果值,代码如下:
def add():op1=10op2=20rt=op1+op2return rt
i=add()
print(i)
#程序输出
30
函数 add() 使用 return 语句可以返回两数相加的结果值,变量 i 接收函数 add() 返回的
值。 Python 在处理返回值时,如果没有 return 语句,会默认返回 None ,程序并不会报错。
使用函数时经常会范围一些错误,总结如下:
  • 函数的定义要先于函数的调用,否则会出错。
  • 函数体的代码是一个整体,要注意缩进。
  • 定义函数时要使用冒号,但调用时不可以使用冒号。

1.2 带参函数

python 带参函数的语法格式如下

def 函数名称(形式参数列表):
代码块
return [表达式]
带参函数允许你在调用时传入不同的数据,使函数更加灵活和通用。参数可以分为位置参数、默认参数、可变参数和关键字参数。

位置参数

def calculate_area(length, width):"""计算矩形的面积:param length: 矩形的长:param width: 矩形的宽:return: 矩形的面积"""return length * width# 调用带位置参数的函数
area = calculate_area(5, 3)
print(f"矩形的面积是: {area}")

这里的 length 和 width 是位置参数,调用函数时传入的值会按照顺序依次赋值给这些参数。

默认参数

def greet(name, greeting="Hello"):"""向指定的人发出问候:param name: 被问候的人的名字:param greeting: 问候语,默认为 "Hello":return: 组合好的问候语句"""return f"{greeting}, {name}!"# 调用时使用默认参数
message1 = greet("Alice")
print(message1)# 调用时指定参数
message2 = greet("Bob", "Hi")
print(message2)

默认参数在定义时就有一个默认值,如果调用时没有提供该参数的值,就会使用默认值。

可变参数

def sum_numbers(*numbers):"""计算任意数量数字的总和:param numbers: 任意数量的数字:return: 数字的总和"""total = 0for num in numbers:total += numreturn total# 调用带可变参数的函数
result = sum_numbers(1, 2, 3, 4, 5)
print(f"总和是: {result}")

可变参数使用 * 来定义,它可以接收任意数量的位置参数,并将它们封装成一个元组。

关键字参数

def describe_person(name, **info):"""描述一个人的信息:param name: 人的名字:param info: 其他信息,以关键字参数的形式传入:return: 描述信息"""description = f"{name} 的信息如下: "for key, value in info.items():description += f"{key} 是 {value}, "return description# 调用带关键字参数的函数
info = describe_person("Charlie", age=25, city="New York")
print(info)

关键字参数使用 ** 来定义,它可以接收任意数量的关键字参数,并将它们封装成一个字典。

1.3 函数中变量的作用域

变量的作用域决定了变量在程序中的可见性和生命周期。主要分为全局作用域、局部作用域和嵌套作用域。
全局作用域
# 全局变量
global_variable = 100def print_global():print(f"全局变量的值是: {global_variable}")print_global()

全局变量定义在函数外部,可以在整个程序中访问。

局部作用域

def local_scope_example():# 局部变量local_variable = 200print(f"局部变量的值是: {local_variable}")local_scope_example()
# print(local_variable)  # 这会报错,因为 local_variable 是局部变量,在函数外部无法访问

局部变量定义在函数内部,只能在该函数内部访问

嵌套作用域

def outer_function():outer_variable = 300def inner_function():print(f"内部函数访问外部函数的变量: {outer_variable}")inner_function()outer_function()

在嵌套函数中,内部函数可以访问外部函数的变量,但外部函数不能访问内部函数的变量。

1.4 lambda 函数

lambda 函数的作用是创建匿名函数,是一种声明函数的特殊方式。其中 params 相当于
函数接收的参数列表, expr 是函数返回值的表达式。
# 定义一个简单的 lambda 函数用于计算两个数的和
add = lambda x, y: x + y# 调用 lambda 函数
result = add(4, 6)
print(f"两数之和是: {result}")# lambda 函数常用于排序等操作
students = [('Alice', 20), ('Bob', 18), ('Charlie', 22)]
students.sort(key=lambda student: student[1])
print("按年龄排序后的学生列表:", students)

lambda 函数可以作为参数传递给其他函数,使代码更加简洁。

1.5 内建函数

Python 除了本身的语法结构,还提供了常用的内建函数。内建函数是程序员经常使用到的
方法,可以提高程序的编写效率。

(1) abs() 函数

abs() 函数用于返回一个数的绝对值,支持整数、浮点数和复数。

# 整数的绝对值
num1 = -10
abs_num1 = abs(num1)
print(f"{num1} 的绝对值是: {abs_num1}")# 浮点数的绝对值
num2 = -3.14
abs_num2 = abs(num2)
print(f"{num2} 的绝对值是: {abs_num2}")# 复数的绝对值(模)
complex_num = 3 + 4j
abs_complex = abs(complex_num)
print(f"{complex_num} 的模是: {abs_complex}")

(2) bool() 函数

bool() 函数用于将一个值转换为布尔类型。在 Python 中,以下值被视为 FalseFalse00.0''[](){}None,其他值都被视为 True

print(bool(0))      # False
print(bool(1))      # True
print(bool(""))     # False
print(bool("abc"))  # True
print(bool([]))     # False
print(bool([1, 2, 3]))  # True

(3) float() 函数

float() 函数用于将一个值转换为浮点数。可以将整数、字符串等转换为浮点数。

# 整数转换为浮点数
int_num = 5
float_num1 = float(int_num)
print(f"{int_num} 转换为浮点数是: {float_num1}")# 字符串转换为浮点数
str_num = "3.14"
float_num2 = float(str_num)
print(f"{str_num} 转换为浮点数是: {float_num2}")

(4) int() 函数

int() 函数用于将一个值转换为整数。可以将浮点数、字符串等转换为整数,对于浮点数,会直接截断小数部分。

# 浮点数转换为整数
float_num = 5.7
int_num1 = int(float_num)
print(f"{float_num} 转换为整数是: {int_num1}")# 字符串转换为整数
str_num = "10"
int_num2 = int(str_num)
print(f"{str_num} 转换为整数是: {int_num2}")

(5) range() 函数

range() 函数用于生成一个不可变的整数序列,常用于循环。它有三种用法:

# 一个参数的情况,从 0 开始,到指定值(不包含)结束
for i in range(5):print(i, end=" ")
print()# 两个参数的情况,从第一个参数开始,到第二个参数(不包含)结束
for i in range(2, 7):print(i, end=" ")
print()# 三个参数的情况,第三个参数表示步长
for i in range(1, 10, 2):print(i, end=" ")
print()

(6) sum() 函数

sum() 函数用于计算可迭代对象中所有元素的总和。可迭代对象可以是列表、元组等。

numbers = [1, 2, 3, 4, 5]
total = sum(numbers)
print(f"列表中所有元素的总和是: {total}")# 可以指定起始值
start_value = 10
total_with_start = sum(numbers, start_value)
print(f"从 {start_value} 开始累加的总和是: {total_with_start}")

(7) max() 函数

max() 函数用于返回可迭代对象中的最大值,也可以用于比较多个参数。

numbers = [1, 2, 3, 4, 5]
max_num = max(numbers)
print(f"列表中的最大值是: {max_num}")# 比较多个参数
max_value = max(10, 20, 30)
print(f"多个参数中的最大值是: {max_value}")

(8) min() 函数

min() 函数用于返回可迭代对象中的最小值,也可以用于比较多个参数。

numbers = [1, 2, 3, 4, 5]
min_num = min(numbers)
print(f"列表中的最小值是: {min_num}")# 比较多个参数
min_value = min(10, 20, 30)
print(f"多个参数中的最小值是: {min_value}")

2. 模块与包

如果编写的程序中类和函数较多时,就需要对它们进行有效的组织分类,在 Python 中模
块和包都是组织的方式。复杂度较低可以使用模块管理,复杂度高则还要使用包进行管理。

2.1 模块

模块是一个包含 Python 定义和语句的文件,以 .py 为扩展名。模块可以定义函数、类和变量,也可以包含可执行的代码。

创建模块

创建一个名为 math_operations.py 的文件,内容如下:

# math_operations.py
def add(a, b):return a + bdef subtract(a, b):return a - bdef multiply(a, b):return a * bdef divide(a, b):if b == 0:raise ValueError("除数不能为零")return a / b

使用模块

import math_operationsresult_add = math_operations.add(3, 5)
result_subtract = math_operations.subtract(10, 4)
print(f"加法结果: {result_add}")
print(f"减法结果: {result_subtract}")

2.2 包

包是一种管理 Python 模块命名空间的方式,它是一个包含多个模块的目录,该目录下必须有一个  __init__.py 文件(Python 3.3 及以后版本中, __init__.py 文件不是必需的,但为了兼容性,建议保留)。

创建包

假设我们有一个名为 my_package 的包,结构如下:

my_package/__init__.pymath_operations.pystring_operations.py

math_operations.py 文件内容同上面的示例,string_operations.py 文件内容如下:

# string_operations.py
def reverse_string(s):return s[::-1]def capitalize_string(s):return s.capitalize()

使用包

from my_package import math_operations, string_operationsresult_add = math_operations.add(3, 5)
reversed_str = string_operations.reverse_string("hello")
print(f"加法结果: {result_add}")
print(f"反转字符串结果: {reversed_str}")

2.3 常用模块

(1) keyword 模块

keyword 模块提供了与 Python 关键字相关的功能。

import keyword# 获取所有 Python 关键字
all_keywords = keyword.kwlist
print("所有 Python 关键字:", all_keywords)# 检查某个字符串是否是关键字
is_keyword = keyword.iskeyword("if")
print("'if' 是否是关键字:", is_keyword)

(2) random 模块

random 模块用于生成随机数

import random# 生成一个 0 到 1 之间的随机浮点数
random_float = random.random()
print(f"随机浮点数: {random_float}")# 生成一个指定范围内的随机整数
random_int = random.randint(1, 10)
print(f"1 到 10 之间的随机整数: {random_int}")# 从序列中随机选择一个元素
fruits = ["apple", "banana", "cherry"]
random_fruit = random.choice(fruits)
print(f"随机选择的水果: {random_fruit}")# 打乱序列的顺序
random.shuffle(fruits)
print("打乱顺序后的水果列表:", fruits)

(3) sys 模块

sys 模块提供了一些与 Python 解释器和系统相关的变量和函数。

import sys# 获取 Python 版本信息
python_version = sys.version
print("Python 版本信息:", python_version)# 获取命令行参数
print("命令行参数:", sys.argv)# 退出 Python 解释器
# sys.exit()

(4) time 模块

time 模块用于处理时间相关的功能。

import time# 获取当前时间戳
timestamp = time.time()
print(f"当前时间戳: {timestamp}")# 将时间戳转换为本地时间
local_time = time.localtime(timestamp)
print("本地时间:", local_time)# 将本地时间格式化为字符串
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
print("格式化后的时间:", formatted_time)# 暂停程序执行
print("开始暂停")
time.sleep(2)
print("暂停结束")

相关文章:

  • 开关量扫描处理(消抖)
  • Linux平台实现低延迟的RTSP、RTMP播放
  • Java技术体系的主要产品线详解
  • 专家系统的基本概念解析——基于《人工智能原理与方法》的深度拓展
  • 车载客流记录仪简介
  • 2025 年免费 Word 转 PDF 转换器有哪些?
  • 数据结构——二叉树,堆
  • 【硬核干货】SonarQube安全功能
  • 【动手学深度学习】ResNet残差网络
  • ragflow部署以及api调用整理
  • 创新项目实训开发日志4
  • 第十七届山东省职业院校技能大赛 中职组网络建设与运维赛项
  • 一天学完Servlet!!!(万字总结)
  • 第五章:Framework/Tooling Abstraction
  • CS144 Lab5 实战记录:网络接口实现 ARP
  • Spring Boot Controller 单元测试撰写
  • Git删除指定历史版本
  • 快速配置linux远程开发-go语言
  • Docker部署DeepSeek常见问题及解决方案
  • 实战交易策略 篇十九:君山居士熊市交易策略
  • 生态环境法典草案拟初审:应对气候变化等问题将作原则性规定
  • 李家超称香港将部署为内地企业提供供应链服务,突破美国封锁
  • 魔都眼·上海车展④|奔驰宝马保时捷……全球豪车扎堆首秀
  • 消费者买国外电话卡使用时无信号,店铺:运营商故障,较少见
  • 68岁民营科技企业家、中国环保产业协会原副会长宋七棣逝世
  • 上海车展上的双向奔赴:跨国车企融入中国创新,联手“在中国,为全球”