You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python拆分函数至functions.py后变量引用问题求助

解决Python拆分函数到单独文件后的NameError及变量访问问题

问题核心

把weightDiff函数移到functions.py后出现两个问题:

  • 直接调用会报NameError: name 'weightDiff' is not defined(主文件未正确从模块导入函数)
  • 即使导入,函数内部无法访问主文件里的gender、recommendedWeight变量(跨模块无法直接读取全局变量)

解决方案

核心原则:让函数通过参数接收所需数据,不要依赖外部全局变量,同时把固定配置(如推荐体重)移到函数模块或显式传递。

1. 编写正确的functions.py

把函数和相关固定配置放在这里,确保函数逻辑独立:

# 定义推荐体重(用字典更清晰)
RECOMMENDED_WEIGHT = {'male': 89, 'female': 55}

def newLine():
    return '\n'

def weightDiff(user_weight, user_gender):
    # 处理非预期的性别输入,避免报错
    if user_gender not in RECOMMENDED_WEIGHT:
        return "请输入有效的性别(male/female)"
    return user_weight - RECOMMENDED_WEIGHT[user_gender]

2. 修改主文件(如main.py)

删除主文件里的weightDiff函数和recommendedWeight变量,正确导入并调用模块里的函数:

import functions

firstName = input("Hi there, what's your name? ")
genderQuestion = input(f'Hello {firstName}, are you a male or a female? ')
gender = genderQuestion.casefold()
age = input('How old are you? ')
weight = input("What's your weight in kg? ")

userData = [firstName, gender, age, weight]
userDetails = [
    f'Name: {userData[0]}',
    f'Gender: {userData[1]}',
    f'Age: {userData[2]}',
    f'Weight: {userData[3]}kg'
]

print(functions.newLine())
print('Thanks for that. Below your details')
print('\n'.join(userDetails))

# 调用functions模块的weightDiff,传入体重(转成整数)和性别参数
weightDifference = functions.weightDiff(int(weight), gender)
print(weightDifference)

关键说明

  • 跨模块无法直接访问其他文件的全局变量,所以必须把gender、weight作为参数传递给weightDiff
  • 把固定的推荐体重配置放在functions.py里,让函数模块自身保持完整
  • 主文件只需负责收集用户输入、调用函数,实现代码分离整洁的需求

内容的提问来源于stack exchange,提问作者Daikengo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:46:14