Python 函数与模块
目录
1. 函数
1.1 无参函数
1.2 带参函数
1.3 函数中变量的作用域
1.4 lambda 函数
1.5 内建函数
2. 模块与包
2.1 模块
2.2 包
2.3 常用模块
1. 函数
1.1 无参函数
使用无参函数实现两数相加并输出二者之和。示例代如下: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 函数用于计算两个数的和 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 内建函数
(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 中,以下值被视为 False
:False
、0
、0.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. 模块与包
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 包
__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("暂停结束")