我有一个python脚本,它应该正常工作,但我需要编写执行时间.我用谷歌搜索了我应该使用timeit但我似乎无法让它工作.
我的Python脚本如下所示:
import sys
import getopt
import timeit
import random
import os
import re
import ibm_db
import time
from string import maketrans
myfile = open("results_update.txt", "a")
for r in range(100):
rannumber = random.randint(0, 100)
update = "update TABLE set val = %i where MyCount >= '2010' and MyCount < '2012' and number = '250'" % rannumber
#print rannumber
conn = ibm_db.pconnect("dsn=myDB","usrname","secretPWD")
for r in range(5):
print "Run %s\n" % r
ibm_db.execute(query_stmt)
query_stmt = ibm_db.prepare(conn, update)
myfile.close()
ibm_db.close(conn)
Run Code Online (Sandbox Code Playgroud)
我需要的是执行查询并将其写入文件所需的时间 …
所以只是为了建立,我觉得我理解复制模块中的copyvs 之间的区别deepcopy,我已经使用过copy.copy并且copy.deepcopy成功之前,但这是我第一次真正去重载__copy__和__deepcopy__方法.我已经围绕谷歌搜索,并通过看内置的Python模块查找的实例__copy__和__deepcopy__功能(例如sets.py,decimal.py和fractions.py),但我仍然肯定不是100%我已经得到了它的权利.
这是我的情景:
我有一个配置对象,它主要由简单属性组成(尽管它可能包含其他非基本对象的列表).最初,我将使用一组默认值来实例化一个配置对象.此配置将切换到多个其他对象(以确保所有对象以相同的配置启动).然而,一旦用户交互开始,每个对象将需要能够独立地调整配置而不影响彼此的配置(对我来说,我需要使用我的初始配置的深度复制来处理).
这是一个示例对象:
class ChartConfig(object):
def __init__(self):
#Drawing properties (Booleans/strings)
self.antialiased = None
self.plot_style = None
self.plot_title = None
self.autoscale = None
#X axis properties (strings/ints)
self.xaxis_title = None
self.xaxis_tick_rotation = None
self.xaxis_tick_align = None
#Y axis properties (strings/ints)
self.yaxis_title = None
self.yaxis_tick_rotation = None
self.yaxis_tick_align = None
#A list of non-primitive objects
self.trace_configs = [] …Run Code Online (Sandbox Code Playgroud) 我试图在Python中实现一个算法来生成列表的所有排列.但我在我的for循环中我希望保持原始前缀和休息列表完整,因此我试图使用newprefix和newrest创建这些列表的副本,但是在每次迭代打印变量rest时,我看到即使是变量休息正在修改!如何在Python中创建列表的浅表副本?或者我的逻辑是否存在另一个问题?
def perm(prefix, rest):
if len(rest) == 0:
print prefix
for i in range(len(rest)):
#prints in the for loop are just for debugging
print "rest:", rest
print "i=", i
newprefix = prefix
newprefix.append(rest[i])
newrest = rest
newrest.pop(i)
print "old pre : ", prefix
print "newpre=", newprefix
print "newrest=", newrest
perm(newprefix, newrest)
perm([], ['a','b','c'])
Run Code Online (Sandbox Code Playgroud) 我有一个列表,其每个元素都是字典。每个元素看起来像这样
{'CELL': <Cell SOW16007.2.AC7>, 'COUNT': 2, 'NAMELIST': [], 'NAME': u'', 'LEVEL': u'SSE'}
我需要对此列表进行备份。我不能使用常规分配或使用浅表复制,因为我会更改原始列表。但是当我使用Deepcopy时
backUpNames=deepcopy(oldNames)
出现错误:
TypeError: unhashable type: 'array.array'
我在这里做什么错?我该如何解决?
这不是重复的问题,因为我已经使用过Deepcopy,我面临的问题是Deepcopy引发的错误。
最小代码:
我使用openpxl迭代工作表并将值附加到列表中
wb=openpyxl.load_workbook(sys.argv[3],data_only=True)
_ts=wb.active
oldNames.append({'NAME':_ts['G7'].value,'LEVEL':_ts['H7'].value,'CELL':_ts['F7'],'COUNT':0,'NAMELIST':[]})
backUpNames=deepcopy(oldNames)#error occurring here
Run Code Online (Sandbox Code Playgroud)
谢谢
如何在Python的defaultdict对象中创建一个副本(不只是为内存中的同一位置指定一个新指针)?
from collections import defaultdict
itemsChosen = defaultdict(list)
itemsChosen[1].append(1)
dupChosen = itemsChosen
itemsChosen[2].append(1)
print dupChosen
Run Code Online (Sandbox Code Playgroud)
上面的代码是浅层复制并返回
defaultdict(<type 'list'>, {1: [1], 2: [1]})
Run Code Online (Sandbox Code Playgroud)
而我正在寻找它返回
defaultdict(<type 'list'>, {1: [1]})
Run Code Online (Sandbox Code Playgroud)
谢谢.
除了创建一个新值并复制值或使用and之外,还有一种方法可以在 Python 中复制 an array.array(而不是 a )吗?我似乎在文档中找不到任何内容。如果没有,是否有类似的内置数据类型可以做到这一点?list.to_something.from_something
我正在开发一个高性能模块,所以答案越快越好。
我当前的解决方案只是使用.to_bytesand .from_bytes,根据我的测试,速度大约快 1.8 倍。
a = [ 1, 2 ]
b = a
a.append(3)
print(b) # shows [ 1 2 3 ] which means b changed
c = 4
d = c
c = 8
print(d) # shows 4 which means d did not change
Run Code Online (Sandbox Code Playgroud)
为什么 b 变了,而 d 没有?.append 改变了 b 中存储的值,但 c = 8 并没有改变 d 中的值
python ×7
copy ×2
dictionary ×2
python-2.7 ×2
arrays ×1
defaultdict ×1
list ×1
python-3.x ×1
testing ×1
timeit ×1