这个主题讨论如何在Python中将函数的名称作为字符串获取:如何在Python中将 函数名称作为字符串获取?
如何为变量做同样的事情?(注意Python变量没有属性__name__,至少在Python中retrieve_name)
换句话说,如果我有一个变量,例如:
foo = dict()
foo['bar'] = 2
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个函数/属性,例如'foo':
retrieve_name(foo)
Run Code Online (Sandbox Code Playgroud)
返回字符串 __name__
既然人们在问我为什么要这样做,这里就是一个例子.我想在此列表中在Pandas中创建一个DataFrame,其中列名 由实际字典的名称给出:
# List of dictionaries for my DataFrame
list_of_dicts = [n_jobs, users, queues, priorities]
Run Code Online (Sandbox Code Playgroud) 我觉得我应该知道这一点,但我无法弄明白......
我想从内部获取方法的名称 - 恰好是集成测试 - 因此它可以打印出一些诊断文本.当然,我可以在字符串中对方法的名称进行硬编码,但如果可能的话,我想让测试更加干燥.
我是Python日志的新手,我可以很容易地看到它对我提出的家庭酿造解决方案的优越性.
我似乎无法找到答案的一个问题:如何基于每个方法/函数压制记录消息?
我的假设模块包含一个函数.在我开发时,日志调用是一个很好的帮助:
logging.basicConfig(level=logging.DEBUG,
format=('%(levelname)s: %(funcName)s(): %(message)s'))
log = logging.getLogger()
my_func1():
stuff...
log.debug("Here's an interesting value: %r" % some_value)
log.info("Going great here!")
more stuff...
Run Code Online (Sandbox Code Playgroud)
当我在'my_func1'上完成工作并开始处理第二个函数'my_func2'时,来自'my_func1'的日志消息开始从"有用"变为"杂乱".
是否存在单行魔术语句,例如'logging.disabled_in_this_func()',我可以将其添加到'my_func1'的顶部以禁用'my_func1'中的所有日志记录调用,但仍然在所有其他函数/方法中保留日志记录调用不变?
谢谢
linux,Python 2.7.1
def applejuice(q):
print THE FUNCTION NAME!
Run Code Online (Sandbox Code Playgroud)
它应该导致"applejuice"作为一个字符串.
可能重复:
如何在Python中将函数名称作为字符串?
我知道我可以这样做:
def func_name():
print func_name.__name__
Run Code Online (Sandbox Code Playgroud)
这将把函数的名称作为'my_func'返回.
但是当我进入函数时,有没有办法直接称它为一般?就像是 :
def func_name():
print self.__name__
Run Code Online (Sandbox Code Playgroud)
Python会理解我想要代码层次结构的上半部分?
我有一个非常大的测试套件,我装饰了一些test_*函数.现在我不能打电话给他们./test.py MySqlTestCase.test_foo_double,python3.2抱怨说:ValueError: no such test method in <class '__main__.MySqlTestCase'>: result.我的装饰器代码如下所示:
def procedure_test(procedure_name, arguments_count, returns):
'''Decorator for procedure tests, that simplifies testing whether procedure
with given name is available, whether it has given number of arguments
and returns given value.'''
def decorator(test):
def result(self):
procedure = self.db.procedures[self.case(procedure_name)]
self.assertEqual(len(procedure.arguments), arguments_count)
self.assertEqual(procedure.returns,
None if returns is None else self.case(returns))
test(self, procedure)
return result
return decorator
Run Code Online (Sandbox Code Playgroud)
和测试方法:
@procedure_test('foo_double', 0, 'integer')
def test_foo_double(self, procedure):
self.assertEqual(procedure.database, self.db)
self.assertEqual(procedure.sql, 'RETURN 2 * value') …Run Code Online (Sandbox Code Playgroud) 考虑一下我们有以下输入
formula = "(([foo] + [bar]) - ([baz]/2) )"
function_mapping = {
"foo" : FooFunction,
"bar" : BarFunction,
"baz" : BazFunction,
}
Run Code Online (Sandbox Code Playgroud)
是否有任何python库可以解析公式并将其转换为python函数表示.
例如.
converted_formula = ((FooFunction() + BarFunction() - (BazFunction()/2))
Run Code Online (Sandbox Code Playgroud)
我目前正在研究类似的东西
In [11]: ast = compiler.parse(formula)
In [12]: ast
Out[12]: Module(None, Stmt([Discard(Sub((Add((List([Name('foo')]), List([Name('bar')]))), Div((List([Name('baz')]), Const(2))))))]))
Run Code Online (Sandbox Code Playgroud)
然后进一步处理这个树.
你知道任何更清洁的替代解决方案吗?非常感谢任何帮助或见解!
Python中有没有办法捕捉字符串和函数?
例如
def myFunction():
a=(str(local_time[0]))
return a
b="MyFunction"+myFunction
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,我无法连接'str'和'function'对象.
我有一个名为func的函数,我希望能够将函数名称作为字符串.
伪python:
def func () :
pass
print name(func)
Run Code Online (Sandbox Code Playgroud)
这将打印'func'.
我有以下代码
import pandas as pd
df = pd.DataFrame(columns=['var1', 'var2','var3'])
df.loc[0] = [0,1,2]
def RS():
x = 123
y = 456
z = 'And some more random shit'
return x+y
def BS():
x = -890
y = (456*1)+90
z = 'And some more random shit'
return x-y
def MyCompute(srt, srt_string):
df[srt_string] = srt()
df['1min' + srt_string] = 1-df[srt_string]
MyCompute(srt=RS, srt_string='RS')
MyCompute(srt=BS, srt_string='BS')
Run Code Online (Sandbox Code Playgroud)
有没有办法避免调用MyCompute函数时出现双RS双BS?