Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种方法可以像调用者所说的那样获取调用者中的函数参数?_Python - Fatal编程技术网

Python 有没有一种方法可以像调用者所说的那样获取调用者中的函数参数?

Python 有没有一种方法可以像调用者所说的那样获取调用者中的函数参数?,python,Python,我想实现调用foo(2*3)打印2*3 我试图通过inspectmodul使其工作,但无法使其工作。因为表达式在传递给函数之前已计算过,所以无法打印出未计算的表达式 然而,有一个可能的解决办法。您可以改为将表达式作为字符串传递,并使用eval()在函数内部对其求值。举个简单的例子: def foo(expr): 打印(expr) 返回(eval(expr)) 但请注意 更好的解决方案是简单地传递字符串和表达式,例如foo(2*3,“2*3”)因为表达式在传递给函数之前进行计算,所以无法打印出未

我想实现调用foo(2*3)打印
2*3


我试图通过
inspect
modul使其工作,但无法使其工作。

因为表达式在传递给函数之前已计算过,所以无法打印出未计算的表达式

然而,有一个可能的解决办法。您可以改为将表达式作为字符串传递,并使用
eval()
在函数内部对其求值。举个简单的例子:

def foo(expr):
打印(expr)
返回(eval(expr))
但请注意


更好的解决方案是简单地传递字符串和表达式,例如
foo(2*3,“2*3”)

因为表达式在传递给函数之前进行计算,所以无法打印出未计算的表达式

然而,有一个可能的解决办法。您可以改为将表达式作为字符串传递,并使用
eval()
在函数内部对其求值。举个简单的例子:

def foo(expr):
打印(expr)
返回(eval(expr))
但请注意

更好的解决方案是简单地传递字符串和表达式,例如
foo(2*3,“2*3”)
通常,答案是“否”,因为函数接收的值是表达式
2*3
的结果,而不是表达式本身。然而,在Python中,如果您真的需要,几乎任何事情都是可能的;-)

对于简单的情况,您可以使用如下
inspect
模块实现:

#/usr/bin/env蟒蛇3
进口检验
def foo(x):
context=inspect.stack()[1]。代码\u上下文[0]
打印(上下文)
def main():
富(2*3)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
这将打印:

foo(2*3)
使用正则表达式从该字符串中获取部分
2*3
,这将非常简单。但是,如果函数调用不在一行上,或者如果该行包含多个语句,那么这个简单的技巧将无法正常工作。也许可以使用更高级的编码,但我想您的用例是简单地在测试报告或类似的东西中打印表达式?如果是这样,这个解决方案可能就足够了。

一般来说,答案是“否”,因为函数收到的值是表达式
2*3
的结果,而不是表达式本身。然而,在Python中,如果您真的需要,几乎任何事情都是可能的;-)

对于简单的情况,您可以使用如下
inspect
模块实现:

#/usr/bin/env蟒蛇3
进口检验
def foo(x):
context=inspect.stack()[1]。代码\u上下文[0]
打印(上下文)
def main():
富(2*3)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
这将打印:

foo(2*3)

使用正则表达式从该字符串中获取部分
2*3
,这将非常简单。但是,如果函数调用不在一行上,或者如果该行包含多个语句,那么这个简单的技巧将无法正常工作。也许可以使用更高级的编码,但我想您的用例是简单地在测试报告或类似的东西中打印表达式?如果是这样,这个解决方案可能就足够好了。

为什么?表达式的结果成为传递给函数的值。我尝试创建一个查询数据文件的测试框架,并希望打印带有断言结果的查询语句。这在Python中是不可能的。句号。如果传递一个表达式,则会对该表达式求值,并使用结果值调用该函数。没有办法猜出原来的表达。真的没有办法吗?我可以想象有一种方法可以获取调用方文件、行和列,然后我可以从源文件读取它为什么?表达式的结果成为传递给函数的值。我尝试创建一个查询数据文件的测试框架,并希望打印带有断言结果的查询语句。这在Python中是不可能的。句号。如果传递一个表达式,则会对该表达式求值,并使用结果值调用该函数。没有办法猜出原来的表达。真的没有办法吗?我可以想象有一种方法可以获取调用者文件、行和列,然后我可以从源文件中读取,还有其他替代方法。例如,如果
foo
总是需要一个乘法表达式,那么它可以单独使用它的参数(
foo(2,3)
)。还有其他替代方法。例如,如果
foo
始终需要一个乘法表达式,则它可以单独获取其参数(
foo(2,3)
)。inspect.stack有一个参数上下文(默认值为1)。在这里,您可以参数化上下文包含的行数。因此,即使对于多行语句,您也可以使其工作。@user1235183,正确,尽管确定需要多少行上下文和解析该代码是很困难的。您必须处理注释、行连续字符、函数的多个调用(如何知道哪一个是正确的?)等。因此,基本上您必须编写一个完整的解析器。
ast
模块在这里可能会有所帮助,但就我个人而言,我不会这样做。inspect.stack有一个参数上下文(默认值=1)。在这里,您可以参数化上下文包含的行数。因此,即使对于多行语句,您也可以使其工作。@user1235183,正确,尽管确定需要多少行上下文和解析该代码是很困难的。您必须处理注释、行连续字符、函数的多个调用(如何知道哪一个是正确的?)等。因此,基本上您必须编写一个完整的解析器。
ast
模块在这里可能会有所帮助,但就我个人而言,我不会放弃这个roa