小编Max*_*Max的帖子

哪个是在Python中连接字符串的首选方法?

由于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 string concat python-3.x

325
推荐指数
10
解决办法
62万
查看次数

在python 3中的yield生成器中没有next()函数

这个问题中,我使用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)

python python-3.x

82
推荐指数
2
解决办法
3万
查看次数

在mysql datetime和python timestamp之间转换的正确方法是什么?

根据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)

mysql python-3.x

29
推荐指数
2
解决办法
7万
查看次数

如何在python列表中立即释放使用过的内存?

在很多情况下,你确定你肯定不会再次使用该列表,我希望现在应该释放内存

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)

不太确定.需要你的意见.

顺便问一下,元组和套装怎么样?

python

28
推荐指数
3
解决办法
4万
查看次数

我怎样才能在类中定义装饰器方法?

可能重复:
类方法可以是装饰器吗?

这是一个例子.

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)

但我不认为这是一个很好的做法,我想在我的班级内定义检查方法.

python

24
推荐指数
1
解决办法
2万
查看次数

MySQL Workbench:为什么是默认的VARCHAR(45)?

当我开始设计我的在纸上的数据库,我通常设置将varchar长度为32,64,128,256,等等.

但是,当我开始在MySQL工作台5.2ce工作,我发现我每次设定一个字段的类型为varchar,表格会默认它的大小设置为45时.

这是推荐值吗?

也许从历史上看,45是该varchar类型最常用的尺寸.如果是这样,为什么45?为什么不是48或47(也许它需要一个额外的词来保存我想的东西)?

我不明白.也许我应该将字段类型设置varchar(29)为存储长度为20个字符的字符串?

我做了一个搜索我发现许多人将他们的长度设置为255(而不是256).这会是一个严重的问题吗?

mysql mysql-workbench

18
推荐指数
0
解决办法
1834
查看次数

我在哪里可以查看龙卷风的日志文件?

我认为有一个默认的日志文件,但我还没有找到它.

有时HTTP请求进程会在屏幕上抛出异常,但我建议它也会在磁盘上某处或者我不知道在长时间运行测试中出了什么问题.

PS:编写异常处理程序是另一个话题; 首先,我想知道我的问题的答案.

我在这里找到了一些东西:https: //groups.google.com/forum/?fromgroups =#!topic/python-tornado/px4R8Tkfa9c

但它也没有提到我在哪里可以找到这些日志.

python tornado

12
推荐指数
1
解决办法
2万
查看次数

如何关闭cherrypy服务器?

我在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)

python cherrypy

6
推荐指数
2
解决办法
8091
查看次数

setattr() 和 getattr() 会显着降低速度吗?

今天在办公室查了一些代码,发现如下代码。它让我震惊。

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)。

尽管我确实考虑setattrgetattr降低了速度,但我不确定重写所有代码是否会使其更好。

obj.attribute = value 是否比 运行得更快setattr(obj,'attribute',value)

python-3.x

6
推荐指数
1
解决办法
4226
查看次数

如何在条件上拆分列表?

到目前为止,我没有找到按特定条件拆分列表的便捷方法,例如,我有一个记录列表:

 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)

列表推导通常适用于阅读和性能,但在这种情况下,列表必须迭代两次.

有没有更好的方法来完成这项工作?

python

5
推荐指数
2
解决办法
2958
查看次数