keywords: Python 自定义函数,导入模块,使用包,示例

description: 本文介绍了在Python中引入自定义函数或模块的多种方法,包括在同一文件中定义和调用函数、从另一个Python文件导入函数、从同一目录的多个模块导入以及使用包导入。并提供了示例代码展示如何实现这些方法。


在Python中,可以通过多种方式引入自定义的函数或模块。以下是几种常见的方法:

1. 在同一文件中定义和调用函数

如果你的函数和调用它的代码在同一个文件中定义,那么直接调用即可:

  1. def my_function():
  2. print("Hello from my_function!")
  3. # 调用函数
  4. my_function()

2. 从另一个Python文件导入函数

如果你将函数定义在一个单独的Python文件中(例如,my_module.py),并希望在另一个文件中使用它,可以使用import语句导入。

假设有一个my_module.py文件,内容如下:

  1. # my_module.py
  2. def my_function():
  3. print("Hello from my_function!")

在你的主脚本中(例如,main.py),你可以这样导入和使用:

  1. # main.py
  2. from my_module import my_function
  3. # 调用函数
  4. my_function()

3. 从同一目录的多个模块导入

如果你有多个模块需要相互导入,并且它们位于同一目录下,可以使用相对导入或绝对导入。

假设目录结构如下:

  1. my_project/
  2. ├── module_a.py
  3. ├── module_b.py
  4. └── main.py

module_a.py 中定义了一个函数:

  1. # module_a.py
  2. def function_a():
  3. print("Hello from function_a in module_a!")

你可以在 main.py 中导入并使用这个函数:

  1. # main.py
  2. from module_a import function_a
  3. # 调用函数
  4. function_a()

4. 使用包导入

如果你的项目结构较为复杂,可以将相关模块放在一个包中。包是包含 __init__.py 文件的文件夹。

假设目录结构如下:

  1. my_project/
  2. ├── my_package/
  3. ├── __init__.py
  4. ├── module_a.py
  5. └── module_b.py
  6. └── main.py

module_a.py 中定义了一个函数:

  1. # my_package/module_a.py
  2. def function_a():
  3. print("Hello from function_a in module_a!")

你可以在 main.py 中导入并使用这个函数:

  1. # main.py
  2. from my_package.module_a import function_a
  3. # 调用函数
  4. function_a()

示例

假设你有以下两个文件:

process_md.py:

  1. import os
  2. from pathlib import Path
  3. ignore_words = ["ignore", "skip", "omit"]
  4. def should_ignore_file(filename, ignore_words):
  5. """检查文件名是否包含任何忽略词"""
  6. return any(word in filename for word in ignore_words)
  7. def process_markdown_files(source):
  8. # 遍历源文件夹中的所有文件和文件夹
  9. for root, dirs, files in os.walk(source):
  10. for file in files:
  11. # 检查文件扩展名是否为.md且不包含忽略词
  12. if file.endswith('.md') and not should_ignore_file(file, ignore_words):
  13. source_file_path = Path(root) / file
  14. # 读取.md文件的所有行
  15. with open(source_file_path, 'r', encoding='utf-8') as md_file:
  16. lines = md_file.readlines()
  17. # 打印文件内容
  18. print(f"内容来自 {source_file_path}:")
  19. for line in lines:
  20. print(line, end='')
  21. print("\n---\n")
  22. # 在第二行插入“已处理”
  23. if len(lines) >= 1:
  24. lines.insert(1, "已处理\n")
  25. # 将修改后的内容写回到原.md文件中
  26. with open(source_file_path, 'w', encoding='utf-8') as md_file:
  27. md_file.writelines(lines)
  28. print(f"Processed {source_file_path}")

main.py:

  1. from process_md import process_markdown_files
  2. source_dir = Path('/path/to/source')
  3. # 调用函数处理文件
  4. process_markdown_files(source_dir)

这样,你的 main.py 文件会导入 process_md.py 中定义的函数,并调用它来处理指定目录下的Markdown文件。确保在运行 main.py 时,source_dir 变量的值是你的源文件夹的实际路径。