有时我会将if
s中的长条件分成几行.最明显的方法是:
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
Run Code Online (Sandbox Code Playgroud)
视觉上不是很吸引人,因为动作与条件相融合.但是,这是使用4个空格的正确Python缩进的自然方式.
目前我正在使用:
if ( cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
Run Code Online (Sandbox Code Playgroud)
但这不是很漂亮.:-)
你能推荐另一种方式吗?
Python的解释器默认启用输出缓冲sys.stdout
吗?
如果答案是肯定的,那么禁用它的所有方法是什么?
建议到目前为止:
-u
命令行开关sys.stdout
在每次写入后刷新的对象PYTHONUNBUFFERED
env varsys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
是否有任何其他方式来设置一些全局标志sys
/ sys.stdout
程序执行过程中?
我应该多久对源代码管理进行一次更改?每个小功能之后,还是仅适用于大型功能?
我正在开展一个项目,并有一个长期的功能来实现.目前,我正在承诺每一部分工作,即每个子功能实现和错误修复.在发现错误后我为某些功能添加了一大块测试之后,我甚至做出了承诺.
但是,我很担心这种模式.在一个富有成效的工作日里,我可能会做出10次提交.鉴于我正在使用Subversion,这些提交会影响整个存储库,所以我想知道这么多确实是一个好习惯吗?
没有多少人知道这个功能,但Python的功能(和方法)可以有属性.看吧:
>>> def foo(x):
... pass
...
>>> foo.score = 10
>>> dir(foo)
['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__get__', '__getattribute__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name', 'score']
>>> foo.score
10
>>> foo.score += 1
>>> foo.score
11
Run Code Online (Sandbox Code Playgroud)
Python中此功能的可能用途和滥用情况是什么?我知道的一个好用途是PLY使用docstring将语法规则与方法相关联.但是自定义属性呢?有充分的理由使用它们吗?
加入collections.defaultdict
在Python 2.5大大降低用于需要dict
的setdefault
方法.这个问题适合我们的集体教育:
setdefault
今天在Python 2.6/2.7中还有什么用处?setdefault
被取代了collections.defaultdict
?我怀疑我的一个应用程序占用的CPU周期比我想要的多.问题是 - 它发生在爆发中,只是看着任务管理器并没有帮助我,因为它只显示了即时使用.
有没有办法(在Windows上)跟踪某些进程的CPU和内存使用情况的历史记录.例如,我将开始跟踪"firefox",大约一小时后,将会看到该小时内CPU和内存使用情况的图表.
我正在寻找现成的工具或程序化的方法来实现这一目标.
我有一个Bluehost帐户,我可以在其中运行Python脚本作为CGI.我想这是最简单的CGI,因为要运行我必须在以下内容中定义.htaccess
:
Options +ExecCGI
AddType text/html py
AddHandler cgi-script .py
Run Code Online (Sandbox Code Playgroud)
现在,每当我使用Python查找Web编程时,我都会听到很多关于WSGI以及大多数框架如何使用它的信息.但我只是不明白它是如何组合在一起的,特别是当我的Web服务器被给出时(Apache在主机的机器上运行)而不是我真正可以玩的东西(定义.htaccess
命令除外).
WSGI,CGI和框架是如何连接起来的?如果我想在我的基本CGI配置上运行Web框架(比如web.py或CherryPy),我需要知道,安装和执行什么操作?如何安装WSGI支持?
当我在调查Javascript代码中的词法闭包问题时,我在Python中遇到了这个问题:
flist = []
for i in xrange(3):
def func(x): return x * i
flist.append(func)
for f in flist:
print f(2)
Run Code Online (Sandbox Code Playgroud)
请注意,此示例谨慎避免lambda
.它打印"4 4 4",这是令人惊讶的.我期待"0 2 4".
这个等效的Perl代码是正确的:
my @flist = ();
foreach my $i (0 .. 2)
{
push(@flist, sub {$i * $_[0]});
}
foreach my $f (@flist)
{
print $f->(2), "\n";
}
Run Code Online (Sandbox Code Playgroud)
打印"0 2 4".
你能解释一下这个区别吗?
更新:
这个问题是不是与i
是全球性的.这显示相同的行为:
flist = []
def outer():
for i in xrange(3):
def inner(x): return x * i …
Run Code Online (Sandbox Code Playgroud) 套接字API是TCP/IP和UDP/IP通信的事实标准(即我们所知的网络代码).然而,它的核心功能之一,accept()
有点神奇.
借用半正式定义:
在服务器端使用accept().它接受从远程客户端创建新TCP连接的接收传入尝试,并创建与此连接的套接字地址对关联的新套接字.
换句话说,accept
返回一个新的套接字,服务器可以通过该套接字与新连接的客户端进行通信.旧套接字(在其accept
上调用)保持打开状态,在同一端口上侦听新连接.
accept
工作怎么样?它是如何实现的?这个话题有很多混乱.许多人声称接受打开一个新端口,并通过它与客户沟通.但这显然不是真的,因为没有新的端口被打开.你实际上可以通过同一个端口与不同的客户端进行通信,但是如何?当多个线程调用recv
同一个端口时,数据如何知道去哪里?
我想这是客户端地址与套接字描述符相关联的内容,每当数据通过时recv
它被路由到正确的套接字,但我不确定.
对这种机制的内部运作进行彻底的解释是很好的.
我正在使用以下方法使用SMTP从Python发送邮件.这是正确的使用方法还是我遗失了?
from smtplib import SMTP
import datetime
debuglevel = 0
smtp = SMTP()
smtp.set_debuglevel(debuglevel)
smtp.connect('YOUR.MAIL.SERVER', 26)
smtp.login('USERNAME@DOMAIN', 'PASSWORD')
from_addr = "John Doe <john@doe.net>"
to_addr = "foo@bar.com"
subj = "hello"
date = datetime.datetime.now().strftime( "%d/%m/%Y %H:%M" )
message_text = "Hello\nThis is a mail from your server\n\nBye\n"
msg = "From: %s\nTo: %s\nSubject: %s\nDate: %s\n\n%s"
% ( from_addr, to_addr, subj, date, message_text )
smtp.sendmail(from_addr, to_addr, msg)
smtp.quit()
Run Code Online (Sandbox Code Playgroud) python ×7
apache ×1
attributes ×1
buffered ×1
cgi ×1
closures ×1
coding-style ×1
dictionary ×1
function ×1
if-statement ×1
late-binding ×1
networking ×1
setdefault ×1
smtp ×1
sockets ×1
stdout ×1
sysadmin ×1
tcp ×1
windows ×1
wsgi ×1