如果您有多个继承层并且知道存在特定变量,是否有办法追溯到变量的起源位置?无需通过查看每个文件和类来向后导航.可能会调用某种功能吗?例:
parent.py
class parent(object):
def __init__(self):
findMe = "Here I am!"
Run Code Online (Sandbox Code Playgroud)
child.py
from parent import parent
class child(parent):
pass
Run Code Online (Sandbox Code Playgroud)
grandson.py
from child import child
class grandson(child):
def printVar(self):
print self.findMe
Run Code Online (Sandbox Code Playgroud)
尝试通过函数调用找到findMe变量的来源.
我有一个执行sql语句的程序.在一个事务中,我想使用相同的 sysdate 更新几个表.例如.(在事务中运行以下3个语句)
update table1 set some_col = 'updated' where some_other_col < sysdate;
delete from table2 where some_col < sysdate;
insert into table3 (col1, col2) select c1, c2 from table4 where some_col < sysdate;
Run Code Online (Sandbox Code Playgroud)
如果在事务中执行这3个语句,则每个正在使用的"sysdate"将是当前正在运行此语句时的任何时间戳,而不是在事务开始时.
我可以创建一个存储过程并最初使用PL/SQL将sysdate选择为变量,但我更喜欢从外部程序运行sql语句.
从这里使用Memoized装饰器的接受答案(带有doctests): 可以做些什么来加速这个memoization装饰器?
和以下代码(fib.py):
class O(object):
def nfib(self,n): # non-memoized fib fn
if n in (0, 1):
return n
return self.nfib(n-1) + self.nfib(n-2)
@Memoized
def fib(self,n): # memoized fib fn
if n in (0, 1):
return n
return self.fib(n-1) + self.fib(n-2)
if __name__ == '__main__':
import time
o = O()
stime = time.time()
print "starting non-memoized"
for i in range(10):
print o.nfib(32)
print "finished non-memoized - elapsed secs =", time.time() - stime
stime = time.time()
print "starting memoized"
for …
Run Code Online (Sandbox Code Playgroud) 我创建了一个包,其中包含一个返回对象的函数。
当通过 sql 检索对象详细信息时,该函数会被多次调用 - 每检索一个详细信息一次。
我相信应该可以只调用一次。
以下是演示该问题的示例:
CREATE OR REPLACE TYPE t_test AS OBJECT (
v1 VARCHAR2(10),
v2 VARCHAR2(10),
v3 VARCHAR2(10),
times_called NUMBER
);
/
CREATE OR REPLACE PACKAGE test_pkg AS
times_called NUMBER :=0;
FUNCTION test(something IN VARCHAR2) RETURN t_test;
PROCEDURE reset;
END test_pkg;
/
CREATE OR REPLACE PACKAGE BODY test_pkg IS
PROCEDURE reset IS
BEGIN
times_called := 0;
END;
FUNCTION test(something IN VARCHAR2) RETURN t_test IS
BEGIN
times_called := times_called + 1;
RETURN t_test('first', 'second', 'third', times_called);
END; …
Run Code Online (Sandbox Code Playgroud)