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

能否在单个函数内定义两个函数?日期数据清洗函数报错求助

问题解答:函数嵌套与日期数据清洗修复

一、单个函数中能否定义两个函数?

可以,Python支持函数嵌套,你可以在一个外层函数内部定义多个子函数,还能在外层函数逻辑中调用这些子函数。举个简单例子:

def outer_function():
    def inner_func1(a):
        return a * 2
    def inner_func2(b):
        return b + 5
    # 调用内部函数
    result1 = inner_func1(3)
    result2 = inner_func2(4)
    return result1 + result2

print(outer_function())  # 输出 15

内部函数可以访问外层函数的变量,也能被外层函数调用或返回,灵活度很高。

二、日期清洗函数的问题修复

你的代码报错核心是字符替换逻辑错误:循环处理bad_chars时,每次都用原始的entry做替换,而不是在上一次替换的结果上继续处理。比如处理"(1951)"时,循环里每次替换一个字符,但每次都从原始字符串开始,最后只有最后一个字符(空格)的替换生效(但原始字符串里没有空格),所以最终date还是"(1951)",自然转int会报错。

修复后的完整代码:

def combined_function(entry):
    # 初始化date为原始输入,后续每次替换都基于当前date更新
    date = entry
    for char in bad_chars:
        date = date.replace(char, "")
    # 处理日期范围的情况
    if "-" in date:
        split_date = date.split("-")
        date_one = int(split_date[0])
        date_two = int(split_date[1])
        date = round((date_one + date_two) / 2)
    else:
        date = int(date)
    return date

test_data = ["1912", "1929", "1913-1923",
             "(1951)", "1994", "1934",
             "c. 1915", "1995", "c. 1912",
             "(1988)", "2002", "1957-1959",
             "c. 1955.", "c. 1970's",
             "C. 1990-1999"]
bad_chars = ["(",")","c","C",".","s","'", " "]

revised_date = []
for x in test_data:
    date = combined_function(x)
    revised_date.append(date)

print(revised_date)

运行结果:

[1912, 1929, 1918, 1951, 1994, 1934, 1915, 1995, 1912, 1988, 2002, 1958, 1955, 1970, 1994]

关键修复点:

  • 将date = entry.replace(char,"")改为date = date.replace(char,""),确保每次替换都基于已经处理过的字符串,逐步清理所有坏字符。
  • 调整了round函数的写法,让代码更符合PEP8格式规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:35:11