Python新手求助:如何在另一个函数中使用函数返回的变量
Python函数变量传递问题:编码生成与解析
原代码存在的问题
第一种写法的问题
code()返回的是元组(n1,gender,n2),不是你需要的拼接后的编码字符串code_details()没有接收外部传入的编码,而是直接调用code()获取数据,完全偏离了“接收编码并解析”的设计目的- 打印
code是输出函数对象本身,不是编码字符串 print(code_details())会多打印一个None,因为code_details()没有返回值
第二种写法的问题
- 代码里的
code_client()是未定义的函数,逻辑混乱 - 试图访问字符串的
.gender、.n1属性——字符串根本没有这些属性,这是对Python数据类型的误解 - 完全没有实现拆分编码字符串的逻辑
正确实现方案
根据你的需求,提供两种实用的实现方式:
方案1:用字典传递结构化数据(新手友好,逻辑清晰)
让 code() 返回包含拼接编码和所有变量的字典,这样 code_details() 可以直接提取需要的信息:
def code(): n1 = input("enter number 1 :") gender = input("enter male or female :") n2 = input("enter number 2 :") encoded = n1 + gender + n2 # 返回包含所有信息的字典 return {"encoded": encoded, "n1": n1, "gender": gender, "n2": n2} def code_details(data): # 从字典中提取数据并按要求输出 print(f"{data['encoded']}, {data['gender']}, {data['n1']}, {data['n2']}") # 调用流程 result = code() code_details(result)
方案2:仅传递编码字符串,在code_details中解析(严格符合“code返回拼接编码”的要求)
如果必须让 code() 只返回拼接后的编码字符串,那么需要在 code_details() 中按照规则拆分字符串(假设性别是单个非数字字符,前后都是数字):
def code(): n1 = input("enter number 1 :") gender = input("enter male or female :") n2 = input("enter number 2 :") # 只返回拼接后的编码 return n1 + gender + n2 def code_details(encoded_str): # 找到性别字符的位置(第一个非数字字符) gender_pos = next(i for i, c in enumerate(encoded_str) if not c.isdigit()) # 拆分出各个变量 n1 = encoded_str[:gender_pos] gender = encoded_str[gender_pos] n2 = encoded_str[gender_pos+1:] # 输出结果 print(f"{encoded_str}, {gender}, {n1}, {n2}") # 调用流程 encoded = code() code_details(encoded)
测试效果
当输入 30、m、22 时,两种方案都会输出:
30m22, m, 30, 22
内容的提问来源于stack exchange,提问作者Yao Min
相关产品推荐
相关产品推荐

