小编Ste*_*ski的帖子

python函数在n行中打破消息

每个人,我想做这样的事情,但我的逻辑不是那么goog.我有一条消息,每行必须有80个字符:我可以这样做:

msg = ''
msg_list = []

for i in dict['msg']:
    if len(msg) >= 80 and i.isspace():
    msg_list.append(msg)
    msg = "" 

    msg += i
Run Code Online (Sandbox Code Playgroud)

这里的问题是当我的msg没有80个字符时,是否有任何想法让这个块更好?

python

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

使用else子句处理异常

Python教程指出:

try ... except语句有一个可选的else子句,当存在时,必须遵循所有except子句.如果try子句不引发异常,则必须执行的代码很有用.例如:

for arg in sys.argv[1:]:
    try:
        f = open(arg, 'r')
    except IOError:
        print 'cannot open', arg
    else:
        print arg, 'has', len(f.readlines()), 'lines'
        f.close()
Run Code Online (Sandbox Code Playgroud)

使用else子句比向try子句添加其他代码要好,因为它可以避免意外捕获由try ... except语句保护的代码未引发的异常.

问题1 >在阅读上述文档后,我仍然不明白为什么我们不能简单地将代码从else子句移动到try子句中.

问题2 > try子句如何意外捕获异常,因为所有捕获都是在except子句中完成的,对吧?

python

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

正则表达式未正确验证日期

 def chkDay(x, size, part):
     dayre = re.compile('[0-3][0-9]') # day digit 0-9
     if (dayre.match(x)):
         if (len(x) > size):
             return tkMessageBox.showerror("Warning", "This "+ part +" is invalid")
             app.destroy
         else:
             tkMessageBox.showinfo("OK", "Thanks for inserting a valid "+ part)
     else:
         tkMessageBox.showerror("Warning", part + " not entered correctly!")
         root.destroy

#when clicked
chkDay(vDay.get(),31, "Day")

#interface of tkinter
vDay = StringVar()
Entry(root, textvariable=vDay).pack()
Run Code Online (Sandbox Code Playgroud)

问题:

  • 没有验证,我可以在一天超过31天,它仍然显示:好的
  • 当我调用root.destroy时,root(application)不会关闭

python regex validation tkinter

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

搜索时间"x in []"vs"x in {}"

我遇到了一个问题,我必须通过代理日志来查看用户是否访问过网站列表.

我写了一个小脚本来读取所有代理日志,将访问过的主机与列表进行匹配:

for proxyfile in proxyfiles:
    for line in proxyfile.readlines():
        if line[4] in hosts_list:
            print line
Run Code Online (Sandbox Code Playgroud)

hosts_file很大,我们说的是~10000个主机,我注意到搜索时间比预期的要长.

我写了一个小测试:

import random, time
test_list = [x for x in range(10000)]
test_dict = dict(zip(test_list, [True for x in range(10000)]))

def test(test_obj):
 s_time = time.time()
 for i in range(10000):
  random.randint(0,10000) in test_obj
 d_time = time.time() - s_time
 return d_time

print "list:", test(test_list)
print "dict:",test(test_dict)
Run Code Online (Sandbox Code Playgroud)

结果如下:

list: 5.58524107933
dict: 0.195574045181
Run Code Online (Sandbox Code Playgroud)

所以,对我的问题.是否可以以更方便的方式执行此搜索?创建列表的字典似乎是一个黑客,因为我想搜索它们的键而不是它包含的值.

python optimization search python-2.2

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

为什么这个Python代码不能在__hash__中导致无限循环?

我是一个python newb,我只是想了解这里的逻辑:

class SomeClass:

    #...
    def __hash__(self):
        return self.__str__().__hash__()

    def __str__(self):        
        arr = []
        if self.final: 
            arr.append("1")
        else:
            arr.append("0")

        for (label, node) in self.edges.iteritems():
            arr.append( label )
            arr.append( str( node.id ) )

        return "_".join(arr)

    #...

someObj = SomeClass()  
hash(someObj)  
Run Code Online (Sandbox Code Playgroud)

我正在读它的方式是这样的:

如果我尝试hash()在类SomeClass的对象上调用函数 - >那么__hash__将执行魔术方法.__hash__方法调用__str__方法然后在__hash__方法的结果__str__上第二次调用方法- >其中imho导致循环引用和无限循环...

有人可以向我解释 - 这不是__hash__一次又一次被召唤的无限循环吗?

python circular-reference

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

设置 Tkinter 标签的高度

我认为这是一个非常简单的程序。

seperator = Label(text ="")
seperator.config(background='#2b5bce', relief = RAISED, Height = 3)
seperator.grid(row=16, column=0, sticky="w", columnspan=40, ipadx = 500)
Run Code Online (Sandbox Code Playgroud)

但我们收到以下错误!

TclError: bad option "-Height": must be -column, -columnspan, -in, -ipadx, -ipady, -padx, -pady, -row, -rowspan, or -sticky
Run Code Online (Sandbox Code Playgroud)

python layout label tkinter

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

尝试使用列表推导过滤字典

使用单个语句,打印一个只包含原子符号及其对应权重的字典,这些元素位于wts(我的字典)中,这些元素在原子符号中只有一个字母.即,包括'H'但省略'他'.我的字典设置为{'H':'1.00794','He':'4.002602','Li':'6.941','Be':'9.012182','B':'10.811','C':'12.0107','N':'14.0067','O':'15.9994'}

[for element in wts if len(element) == 1]
Run Code Online (Sandbox Code Playgroud)

我在想列表理解会起作用,但是,我怎么会只看元素符号.这会返回以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_45.py", line 10, in <module>
    exec compile(u"print _support_.syseval(python, u'[for element in wts if len(element) == 1]', __SAGE_TMP_DIR__)" + '\n', '', 'single')
  File "", line 1, in <module>

  File "/sagenb/sage_install/sage-5.3-sage.math.washington.edu-x86_64-Linux/devel/sagenb-git/sagenb/misc/support.py", line 487, in syseval
    return system.eval(cmd, sage_globals, locals = sage_globals)
  File "/sagenb/sage_install/sage-5.3-sage.math.washington.edu-x86_64-Linux/local/lib/python2.7/site-packages/sage/misc/python.py", line 53, in eval
    eval(compile(s, '', 'exec'), globals, globals)
  File "", line 3
    [for element in …
Run Code Online (Sandbox Code Playgroud)

python

0
推荐指数
1
解决办法
1070
查看次数

尝试从字典中获取数据时,函数返回none

我在codecademy.com上关注了一个教程,由于某些原因我无法理解,我的程序没有返回预期值,而是返回值"none".

我不明白为什么.你介意看看吗?

我使用的词典是:

lloyd = { "name": "Lloyd",
         "homework": [90.0, 97.0, 75.0, 92.0],
         "quizzes": [88.0, 40.0, 94.0],
         "tests": [75.0, 90.0] }
alice = { "name": "Alice",
          "homework": [100.0, 92.0, 98.0, 100.0],
          "quizzes": [82.0, 83.0, 91.0],
          "tests": [89.0, 97.0] }
tyler = { "name": "Tyler",
          "homework": [0.0, 87.0, 75.0, 22.0],
          "quizzes": [0.0, 75.0, 78.0],
          "tests": [100.0, 100.0] }
Run Code Online (Sandbox Code Playgroud)

我尝试了以下功能:

def average(x):
    return sum(x)/len(x)

def get_average(x):
    a = (sum(x['homework'])/len(x['homework']) * 0.1 + 
         sum(x['quizzes'])/len(x['quizzes']) * 0.3 + 
         sum(x['tests'])/len(x['tests']) * 0.6)
    return a

def …
Run Code Online (Sandbox Code Playgroud)

python

0
推荐指数
1
解决办法
111
查看次数

是否有更可读或Pythonic方式将Decimal格式化为2个位置?

用于将Decimal修复为两个位置的语法是怎么回事?

>>> from decimal import Decimal
>>> num = Decimal('1.0')
>>> num.quantize(Decimal(10) ** -2) # seriously?!
Decimal('1.00')
Run Code Online (Sandbox Code Playgroud)

是否有更好的方式一目了然看起来不那么深奥?'量化十进制'听起来就像是"星际迷航"的一集中的技术!

python decimal rounding

0
推荐指数
1
解决办法
171
查看次数