由于Python string
无法更改,我想知道如何更有效地连接字符串?
我可以这样写:
s += stringfromelsewhere
Run Code Online (Sandbox Code Playgroud)
或者像这样:
s = []
s.append(somestring)
later
s = ''.join(s)
Run Code Online (Sandbox Code Playgroud)
在写这个问题时,我发现了一篇很好的文章谈论这个话题.
http://www.skymind.com/~ocrow/python_string/
但它是在Python 2.x.中,所以问题是在Python 3中做了哪些改变?
在这个问题中,我使用Python生成器进行了无休止的序列.但是相同的代码在Python 3中不起作用,因为它似乎没有next()
功能.功能的等价物是什么next
?
def updown(n):
while True:
for i in range(n):
yield i
for i in range(n - 2, 0, -1):
yield i
uptofive = updown(6)
for i in range(20):
print(uptofive.next())
Run Code Online (Sandbox Code Playgroud) 根据http://dev.mysql.com/doc/refman/5.0/en/datetime.html.我必须找到一种方法将字符串值'YYYY-MM-DD HH:MM:SS'转换为时间戳int.
我抬头看了python的doc.
我试过了:
print(time.strptime('2013-01-12 15:27:43', '%Y-%m-%d %H:%M:%S'))
Run Code Online (Sandbox Code Playgroud)
python给我一个像这样的结果.
time.struct_time(tm_year = 2013,tm_mon = 1,tm_mday = 12,tm_hour = 15,tm_min = 27,tm_sec = 43,tm_wday = 5,tm_yday = 12,tm_isdst = -1)
我试过这个将时间戳转换为YYYY-MM-DD HH:MM:SS格式
print(time.strftime('%Y-%m-%d %H:%M:%S',time.time()))
Run Code Online (Sandbox Code Playgroud)
python给我一个类型错误.
我只使用时间戳来计算时间和日期,我希望在python中已有一种方法,简单高效,而且不必创建临时数据.
根据答案,我写了两种方法.希望它会有所帮助
import time
def convertTimestampToSQLDateTime(value):
return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(value))
def convertSQLDateTimeToTimestamp(value):
return time.mktime(time.strptime(value, '%Y-%m-%d %H:%M:%S'))
Run Code Online (Sandbox Code Playgroud) 在很多情况下,你确定你肯定不会再次使用该列表,我希望现在应该释放内存
a = [11,22,34,567,9999]
del a
Run Code Online (Sandbox Code Playgroud)
我不确定它是否真的释放了内存,你可以使用
del a[:]
Run Code Online (Sandbox Code Playgroud)
实际上删除列表中的所有元素a.
所以最好的发布方式是这个吗?
def realse_list(a):
del a[:]
del a
Run Code Online (Sandbox Code Playgroud)
不太确定.需要你的意见.
顺便问一下,元组和套装怎么样?
可能重复:
类方法可以是装饰器吗?
这是一个例子.
class myclass:
def __init__(self):
self.start = False
def check(self):
return not self.start
def doA(self):
if self.check():
return
print('A')
def doB(self):
if self.check():
return
print('B')
Run Code Online (Sandbox Code Playgroud)
如你所见,我想以装饰器的方式编写检查动作,但在我多次尝试后,我发现我只能在课堂外编写方法.请教我如何在课堂上写它,谢谢
编辑:
我可以用这种方式编写代码:
def check(func):
def checked(self):
if not self.start:
return
func(self)
return checked
class myclass:
def __init__(self):
self.start = False
@check
def doA(self):
print('A')
@check
def doB(self):
print('B')
a = myclass()
a.doA()
a.doB()
a.start = True
a.doA()
a.doB()
Run Code Online (Sandbox Code Playgroud)
但我不认为这是一个很好的做法,我想在我的班级内定义检查方法.
当我开始设计我的在纸上的数据库,我通常设置将varchar长度为32,64,128,256,等等.
但是,当我开始在MySQL工作台5.2ce工作,我发现我每次设定一个字段的类型为varchar,表格会默认它的大小设置为45时.
这是推荐值吗?
也许从历史上看,45是该varchar
类型最常用的尺寸.如果是这样,为什么45?为什么不是48或47(也许它需要一个额外的词来保存我想的东西)?
我不明白.也许我应该将字段类型设置varchar(29)
为存储长度为20个字符的字符串?
我做了一个搜索我发现许多人将他们的长度设置为255(而不是256).这会是一个严重的问题吗?
我认为有一个默认的日志文件,但我还没有找到它.
有时HTTP请求进程会在屏幕上抛出异常,但我建议它也会在磁盘上某处或者我不知道在长时间运行测试中出了什么问题.
PS:编写异常处理程序是另一个话题; 首先,我想知道我的问题的答案.
我在这里找到了一些东西:https: //groups.google.com/forum/?fromgroups =#!topic/python-tornado/px4R8Tkfa9c
但它也没有提到我在哪里可以找到这些日志.
我在win7上,我开始了一个教程helloworld.py,一切都很好,但我不知道如何退出service.i使用
quit()
Run Code Online (Sandbox Code Playgroud)
但命令行给我一个错误信息并退出.但服务仍在运行并采取我的8080端口.我没有办法手动关闭它.
File "C:\python32\lib\site-packages\cherrypy\process\wspbus.py", line 197, in
publish
output.append(listener(*args, **kwargs))
File "C:\python32\lib\site-packages\cherrypy\_cpserver.py", line 151, in start
ServerAdapter.start(self)
File "C:\python32\lib\site-packages\cherrypy\process\servers.py", line 167, in
start
wait_for_free_port(*self.bind_addr)
File "C:\python32\lib\site-packages\cherrypy\process\servers.py", line 410, in
wait_for_free_port
raise IOError("Port %r not free on %r" % (port, host))
IOError: Port 8080 not free on '0.0.0.0'
Run Code Online (Sandbox Code Playgroud) 今天在办公室查了一些代码,发现如下代码。它让我震惊。
class XXXX():
def __init__(self, k, v):
for i in range(len(k)):
setattr(self, k[i], v[i])
Run Code Online (Sandbox Code Playgroud)
然后我发现大部分类都是用同样的方式编写的。这意味着所有的类都是同一个类,唯一不同的是它们的名称。
本项目setattr()
中用于设置属性,getattr()
用于获取属性。在profile log中setattr
被调用了2700次,getattr
被调用了3800次。耗时分别为0.003sec和0.005sec(整个过程:0.069sec)。
尽管我确实考虑setattr
并getattr
降低了速度,但我不确定重写所有代码是否会使其更好。
obj.attribute = value 是否比 运行得更快setattr(obj,'attribute',value)
?
到目前为止,我没有找到按特定条件拆分列表的便捷方法,例如,我有一个记录列表:
a = ((0,1),(1,0),(0,2),(1,0),(3,0),(4,0),(0,3),(1,5)....)
Run Code Online (Sandbox Code Playgroud)
我想将内容分成2个列表
alist = []
blist = []
for x in a:
if x[0] == 0:
alist.append(x)
elif x[0] == 1:
blist.append(x)
Run Code Online (Sandbox Code Playgroud)
不是很简洁.
写为列表理解:
aList = [x for x in a if x[0] == 0]
bList = [x for x in a if x[0] == 1]
Run Code Online (Sandbox Code Playgroud)
列表推导通常适用于阅读和性能,但在这种情况下,列表必须迭代两次.
有没有更好的方法来完成这项工作?