大约一年前我从Perl切换到Python,并没有回头.我发现只有一个习惯用法在Perl中比在Python中更容易做到:
if ($var =~ /foo(.+)/) {
# do something with $1
} elsif ($var =~ /bar(.+)/) {
# do something with $1
} elsif ($var =~ /baz(.+)/) {
# do something with $1
}
Run Code Online (Sandbox Code Playgroud)
相应的Python代码并不那么优雅,因为if语句不断嵌套:
m = re.search(r'foo(.+)', var)
if m:
# do something with m.group(1)
else:
m = re.search(r'bar(.+)', var)
if m:
# do something with m.group(1)
else:
m = re.search(r'baz(.+)', var)
if m:
# do something with m.group(2)
Run Code Online (Sandbox Code Playgroud)
有没有人有一种优雅的方式在Python中重现这种模式?我已经看过使用匿名函数调度表,但对于少数正则表达式来说,这些对我来说似乎有点笨拙......
我有兴趣阅读一些最近的语言与语言问题... Perl与Python,Python与Java,一种语言可以比另一种语言更好吗?
我注意到的一件事是我们很多人都有不喜欢语言的非常肤浅的理由.我们乍看之下注意到了这些事情,他们拒绝了我们.如果我们烦恼的话,我们可以避免在2秒内学会爱或忽略的功能,这些功能可能是完美的语言.
好吧,我和下一个人一样愧疚,如果不是更多的话.开始:
puts
命令,这是一种幼稚的意第绪语解剖术语.因此,即使我应该,也不能认真对待Ruby代码.Dim
用于声明变量的东西,因为我记得当它仅用于维度数组时,GW-BASIC的好日子.什么语言没有看我的权利乍一看?Perl,C,QBasic,JavaScript,汇编语言,BASH shell,FORTH.
好的,既然我已经播放了我的脏衣服......我想听你的. 你的语言挂断是什么?什么肤浅的功能打扰你?你是如何克服它们的?
我最近为GTK应用程序下载了源代码tarball,我想改进它.它使用标准./configure
和make
构建序列.
第一次通过,configure
报告了一堆未满足的构建依赖关系,例如libgnomeui-2.0
.正如我通常所做的那样,我不得不手动浏览并找到*-dev
与这些依赖项相对应的Debian 软件包名称......当然这些名称永远不会完全相同,所以它会变成一个真正的麻烦.
那么我发生了什么... 是否有任何帮助工具来自动安装automake
/ autoconf
配置文件列出的构建依赖项???
(我已经了解了这些dpkg-buildpackage
工具,但在这种情况下,我感兴趣的是从原始的独立于分发的源代码tarball构建,而不是从Debian软件包源代码构建.)
有谁知道我可以找到32位MIPS指令/操作码列表的网站,具有以下功能:
我知道很多网站都记录了指令集的"一部分",主要用于教学目的.他们倾向于遗漏或仅部分描述浮点和特权指令.
如果你想知道,我正在研究MIL处理器子集的Verilog代码,并试图弄清楚它在多大程度上符合任何真正的MIPS处理器的指令集!谢谢你的任何指示.
我有一个Pandas数据框,它有两个关键列,我想确保表中存在这些键的笛卡尔积(因为我必须制作一个包含所有组合的2D图).我无法想出一个相当简短和惯用的方法来做到这一点.
例如,我从这张表开始,给出水果和蔬菜的组合,以及它们如何一起品尝:
combo fruit veg
0 tasty apple carrot
1 yucky banana carrot
2 tasty banana lettuce
3 yucky lemon lettuce
Run Code Online (Sandbox Code Playgroud)
我想最终得到所有可能组合的表:
fruit veg combo
0 apple carrot tasty
1 apple lettuce UNKNOWN
2 banana carrot yucky
3 banana lettuce tasty
4 lemon carrot UNKNOWN
5 lemon lettuce yucky
Run Code Online (Sandbox Code Playgroud)
这是我发现的最佳方式:
import pandas as pd
# Initial data
df=pd.DataFrame(dict(fruit=['apple','banana','banana','lemon'],
veg=['carrot','carrot','lettuce','lettuce'],
combo=['tasty','yucky','tasty','yucky']))
# Solution starts here
veg=df.groupby('veg').size().reset_index()
fruit=df.groupby('fruit').size().reset_index()
fruit[0] = veg[0] = 0 #use this dummy column for the join to work! …
Run Code Online (Sandbox Code Playgroud) 我已经写了一个实用工具,通过蓝牙与TomTom GPS手表交谈,并且我试图让它作为一个即时可待的背景守护程序运行良好.
程序定期与GPS设备通信,然后暂时与sleep
s 通信,直到再次需要它为止.
我注意到sleep()
与系统挂起奇怪地交互:当我进入系统挂起(运行Linux 3.16.0内核的笔记本电脑)然后唤醒计算机时,sleep
似乎没有注意到暂停时间.例如,请执行以下操作sleep.c
:
#include <time.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char**argv)
{
time_t t=time(NULL);
printf("sleep at: %s", ctime(&t));
sleep(atoi(argv[1]));
t=time(NULL);
printf("wake at: %s", ctime(&t));
}
dlenski@dlenski-ultra:~$
Run Code Online (Sandbox Code Playgroud)
中途编译,运行和睡眠;
$ gcc sleep.c -o sleep
$ ./sleep 30
sleep at: Fri Aug 21 21:05:36 2015
<suspend computer for 17 seconds>
wake at: Fri Aug 21 21:06:23 2015
Run Code Online (Sandbox Code Playgroud)
有没有一种正确的方法来暂停程序执行的方式是时钟 - 时间 -意识而不是系统正常运行时间 -意识到? …
如果我在 SQLAlchemy 查询中指定映射类(~= 数据库表),则返回的行将包含这些类的实例:
q = sess.query(table1, table2, table3.string_column)
q.first()
==> ( <instance of table1>,
<instance of table2>,
'string' )
Run Code Online (Sandbox Code Playgroud)
但是,如果我从子查询中选择,则返回的行包含单个列而不是类实例:
q = sess.query(table1, table2, table3.string_column)
q2 = sess.query( q.subquery() )
q2.first()
==> ( col1_of_table1, col2_of_table1, ...,
col2_of_table2, col2_of_table2, ...,
'string' )
Run Code Online (Sandbox Code Playgroud)
有没有办法指定我要将子查询中的行保留为映射类的实例?
如果不加入映射类的新实例,我无法弄清楚如何做到这一点。该corresponding_column
方法允许我从子查询中引用特定的列,但我无法弄清楚如何从子查询中引用完整的实体。我试过玩,select_from
但它没有给我正确的行为。
有什么建议?
我正在使用PyParsing来解析一些类似C格式的大文本文件(大括号和分号以及所有这些).
PyParsing效果很好,但由于我的文件大小,它很慢并且消耗了大量内存.
因此,我想尝试实现一种增量解析方法,其中我将逐个解析源文件的顶级元素.scanString
pyparsing 的方法似乎是明显的方法.但是,我想确保在解析的部分之间没有无效/不可解析的文本scanString
,并且无法找到执行此操作的好方法.
这是一个简化的例子,显示了我遇到的问题:
sample="""f1(1,2,3); f2_no_args( );
# comment out: foo(4,5,6);
bar(7,8);
this should be an error;
baz(9,10);
"""
from pyparsing import *
COMMENT=Suppress('#' + restOfLine())
SEMI,COMMA,LPAREN,RPAREN = map(Suppress,';,()')
ident = Word(alphas, alphanums+"_")
integer = Word(nums+"+-",nums)
statement = ident("fn") + LPAREN + Group(Optional(delimitedList(integer)))("arguments") + RPAREN + SEMI
p = statement.ignore(COMMENT)
for res, start, end in p.scanString(sample):
print "***** (%d,%d)" % (start, end)
print res.dump()
Run Code Online (Sandbox Code Playgroud)
输出:
***** (0,10)
['f1', ['1', '2', '3']] …
Run Code Online (Sandbox Code Playgroud) (这个问题不是关于来自Web服务器的gzip
-encoded 响应的透明解压缩;我知道这requests
会自动处理.)
我正在尝试将文件POST到RESTful Web服务.显然,requests
这很容易做到:
files = dict(data=(fn, file))
response = session.post(endpoint_url, files=files)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我的文件是一个非常高度可压缩的格式(是的,XML),所以我想确保请求体是压缩的.
服务器声称接受gzip编码(Accept-Encoding: gzip
在响应头中),所以我应该能够gzip整个身体请求体,对吧?
这是我尝试完成这项工作:我首先构建请求并准备它,然后我进入PreparedRequest
对象,猛拉出来body
,运行它gzip
,并把它放回去.(哦,不要忘记更新Content-Length
和Content-Encoding
标题.)
files = dict(data=(fn, file))
request = request.Request('POST',endpoint_url, files=files)
prepped = session.prepare_request(request)
with NamedTemporaryFile(delete=True) as gzfile:
gzip.GzipFile(fileobj=gzfile, mode="wb").write(prepped.body)
prepped.headers['Content-Length'] = gzfile.tell()
prepped.headers['Content-Encoding'] = 'gzip'
gzfile.seek(0,0)
prepped.body = gzfile.read()
response = session.send(prepped)
Run Code Online (Sandbox Code Playgroud)
不幸的是,服务器没有合作并返回500 Internal Server Error
.也许它并没有真正接受 …
我在Linux上获得了一个"二进制"文件,并为特定任务提供了一个单独的Windows文件.这些程序是windows上的exe.该版本的linux版本在linux上具有与Windows相同的功能.
但是,我无法执行此操作.我尝试(在终端上)仅通过文件名执行它./[filename]
,甚至尝试chmod +x [filename]
然后尝试第二种方式.
对于一切...我得到结果:"找不到命令".(顺便说一下,文件肯定在那里).
我应该做些什么?它上面的文件命令产生:
ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e805f746e65c09cc8b0c037d8a8c27ee0a6a051c
Run Code Online (Sandbox Code Playgroud)