为何Python方法默认参数每次调用值相同?如何返回新UUID?
Python函数每次返回相同UUID的原因及解决方法
先看你写的代码:
import uuid def get_sample(sample_value=str(uuid.uuid4())): return sample_value print(get_sample()) 2ca4a40c-62c4-4efa-add4-8f13067349d5 print(get_sample()) 2ca4a40c-62c4-4efa-add4-8f13067349d5
每次调用get_sample()都会返回同一个UUID,原因和解决方法如下:
原因
Python函数的默认参数是在函数定义阶段就计算并绑定的,而非每次调用时重新计算。你写的sample_value=str(uuid.uuid4())会在def get_sample执行时(也就是函数定义的瞬间)生成一个固定的UUID字符串,之后每次调用函数若不传入自定义的sample_value,都会复用这个预先生成好的值,所以返回结果完全一致。
修改方法
将默认参数设为None,在函数内部判断参数状态,若为None则生成新的UUID,确保每次调用时都会重新计算:
import uuid def get_sample(sample_value=None): if sample_value is None: sample_value = str(uuid.uuid4()) return sample_value
测试后每次调用get_sample()都会得到不同的UUID:
print(get_sample()) # 生成新UUID print(get_sample()) # 生成另一个新UUID
内容的提问来源于stack exchange,提问作者Bhaskar
相关产品推荐
相关产品推荐

