在python中传递参数之前,我可以依赖参数的求值吗?
我正在编写一个基本的模拟框架,以便测试对peewee的一些调用 我知道在peewee中,您可以进行在python中传递参数之前,我可以依赖参数的求值吗?,python,mocking,peewee,Python,Mocking,Peewee,我正在编写一个基本的模拟框架,以便测试对peewee的一些调用 我知道在peewee中,您可以进行where()调用,如 model.select()。其中(model.id==target\u id) 为了检测正在比较模型的哪些字段,我将覆盖该字段的比较运算符。然后我将注入该模型来代替peewee模型。它将提供与peewee模型相同的接口(尽管只提供所需的接口),但它不会访问数据库,而是记录比较和调用;但这一切都取决于调用该方法之前所计算的参数 我使用anaconda运行了一个示例,对于Lin
where()
调用,如model.select()。其中(model.id==target\u id)代码>
为了检测正在比较模型的哪些字段,我将覆盖该字段的比较运算符。然后我将注入该模型来代替peewee模型。它将提供与peewee模型相同的接口(尽管只提供所需的接口),但它不会访问数据库,而是记录比较和调用;但这一切都取决于调用该方法之前所计算的参数
我使用anaconda运行了一个示例,对于LinuxMint附带的任何python,它们似乎都按照我的意愿运行。我不确定这是否是运行时的侥幸,或者python真的在需要比较之前对比较进行了评估
因此,关于以下内容,我可以依靠model.id==target\u id,
在调用第一个where()
之前运行比较吗?我能否依靠model.name==target\u name
在调用第二个where()
之前和第一个where()
之后运行比较
mockModel.select()
.where(model.id == target_id, model.number == target_number)
.where(model.name == target_name)
...
对。从:
主对象必须计算为可调用对象(用户定义的函数、内置函数、内置对象的方法、类对象、类实例的方法,以及所有具有\u call\u()
方法的对象都是可调用的)所有参数表达式在尝试调用之前都会进行求值。
方法参数在为调用编组时解析。由于调用第一个where
时未查找第二个where
,因此尚未解析其参数。此语句的顺序
mockModel.select()\
.where(model.id == target_id, model.number == target_number)\
.where(model.name == target_name)
是
- 查找
mockModel
- 在该对象上查找
选择
- 它没有参数,所以调用它并获取其结果对象
- 查找结果对象上的
,其中
- 它是一个函数,所以从左到右计算它的参数
- 调用函数并获取其结果对象
- 查找结果对象上的
,其中
- 这是一个函数调用,所以从左到右计算它的参数
- 调用函数
参数中的表达式将完全执行到结果对象中,并将该对象传递给函数。所以,是的,在打电话之前必须完全解决这些问题;但这一决定的时间有多早?在包含行之前?在方法链中的第一次调用之前?在调用任何方法之前,是否在方法链中对所有表达式求值?因此,可以肯定的是,根据示例,model.name==target\u name
将在第一个where()
之后,但在第二个where()
之前运行?