能否在单个函数内定义两个函数?日期数据清洗函数报错求助
问题解答:函数嵌套与日期数据清洗修复
一、单个函数中能否定义两个函数?
可以,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
相关产品推荐
相关产品推荐

