我发现一些链接谈论切换案例在c ++中比其他更快,因为它可以在编译中进行优化.然后我找到了一些人们的建议,使用字典可能比If语句更快.然而,大多数谈话都是关于某些人的工作结束,最后讨论他们应该首先优化代码的其他部分,除非你做了数百万的其他事情,否则无关紧要.谁能解释为什么会这样?
假设我有100个唯一的数字将不断地流入python代码.我想检查它是哪个号码,然后执行一些操作.所以我可以做大量的if else,或者我可以将每个数字放在字典中.为了论证,让我们说它是一个单一的线程.
有人理解python和低级执行之间的层可以解释这是如何工作的吗?
谢谢 :)
如果你看下面的时间:
C:\Users\Henry>python -m timeit -s "mul = int.__mul__" "reduce(mul,range(10000))"
1000 loops, best of 3: 908 usec per loop
C:\Users\Henry>python -m timeit -s "from operator import mul" "reduce(mul,range(10000))"
1000 loops, best of 3: 410 usec per loop
Run Code Online (Sandbox Code Playgroud)
两者之间的执行速度存在显着差异
reduce(int.__mul__,range(10000))
并且reduce(mul,range(10000))
后者更快.
使用该dis
模块查看发生的情况:
使用int.__mul__
方法:
C:\Users\Henry>python
Python 2.7.4 (default, Apr 6 2013, 19:55:15) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> mul = int.__mul__
>>> def test():
... mul(1,2) …
Run Code Online (Sandbox Code Playgroud) 我的代码遍历一组并打印actor的名字:
for actor in actorsByMovies():
print actor+",",
Run Code Online (Sandbox Code Playgroud)
结果如下:
Brad Pitt, George Clooney,
Run Code Online (Sandbox Code Playgroud)
但我想让它检测最后一个元素,以便它不会打印最后一个逗号.结果应该是:
Brad Pitt, George Clooney
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
引自文档:
cmp(x, y)
比较两个对象x和y并根据结果返回一个整数.返回值是负的,如果
x < y
,零,如果x == y
严格正面的,如果x > y
.
我的假设是,返回值总是下-1
,0
和1
但该文档没有明确说,只有提零和正/负返回值.
是否有任何情况下,当返回值cmp(x,y)
是不是-1
,0
或1
?
我需要使用python拆分字符串,但只能在字符串中的分隔符的第一个实例上拆分.
我的代码:
for line in conf.readlines():
if re.search('jvm.args',line):
key,value= split('=',line)
default_args=val
Run Code Online (Sandbox Code Playgroud)
问题是 line
,包含jvm.args
如下所示:
'jvm.args = -Dappdynamics.com=true, -Dsomeotherparam=false,'
Run Code Online (Sandbox Code Playgroud)
我希望我的代码能够jvm.args
在第一个'='时分裂成键和值变量.re.split是否默认执行此操作?如果没有建议将不胜感激!
我在列表中有一系列数字,我正在寻找一个优雅的解决方案,最好是列表理解,以获得单个序列(包括单个值).我已经解决了这个小问题,但它并不是非常pythonic.
以下列表定义了输入序列:
input = [1, 2, 3, 4, 8, 10, 11, 12, 17]
Run Code Online (Sandbox Code Playgroud)
期望的输出应该是:
output = [
[1, 2, 3, 4],
[8],
[10, 11, 12],
[17],
]
Run Code Online (Sandbox Code Playgroud) 受我自己答案的启发,我甚至不了解它是如何起作用的,请考虑以下几点:
def has22(nums):
it = iter(nums)
return any(x == 2 == next(it) for x in it)
>>> has22([2, 1, 2])
False
Run Code Online (Sandbox Code Playgroud)
我预计会有一个StopIteration
被提升,因为一旦到达2
,next(it)
就会推进消耗的迭代器.但是,对于生成器表达式,似乎已完全禁用此行为!break
一旦发生这种情况,生成器表达似乎立即出现
>>> it = iter([2, 1, 2]); any(x == 2 == next(it) for x in it)
False
>>> it = iter([2, 1, 2]); any([x == 2 == next(it) for x in it])
Traceback (most recent call last):
File "<pyshell#114>", line 1, in <module>
it = iter([2, 1, …
Run Code Online (Sandbox Code Playgroud) 当阅读python文档和各种邮件列表时,我总是阅读看起来有点像教条的内容.全局变量应该像地狱一样避免,它们设计很差......好吧,为什么不呢?但是有一些真实的生活情况,我不知道如何避免这种模式.
假设我有一个GUI,可以从主菜单中加载几个文件.可以在所有GUI(例如,将显示图像并且可以通过不同对话框/插件在其上执行各种动作的图像查看器)上使用与加载的文件相对应的文件对象.
构建以下设计是否有问题:
其中Globals.py将存储一个字典,其字符是已加载文件的名称和相应文件对象的值.然后,从那里,需要这些数据的代码的各个部分将通过弱引用访问它.
对不起,如果我的问题看起来(或是)很愚蠢,但你看到任何优雅或全球免费的替代品吗?一种方法是将加载的数据字典封装在Main.py的主应用程序类中,将其视为GUI的中央访问部分.然而,这也会带来一些复杂性,因为这个类应该可以从所有需要数据的对话框中轻松访问,即使它们是必要的直接子代.
非常感谢你的帮助
input_var = input ("Press 'E' and 'Enter' to Exit: ")
NameError: name 'e' is not defined
Run Code Online (Sandbox Code Playgroud)
我使用的是Python 2.5.我怎么能克服这个错误?
我收到ConfigParser.NoSectionError:没有部分:使用上面的代码'TestInformation'错误.
def LoadTestInformation(self):
config = ConfigParser.ConfigParser()
print(os.path.join(os.getcwd(),'App.cfg'))
with open(os.path.join(os.getcwd(),'App.cfg'),'r') as configfile:
config.read(configfile)
return config.items('TestInformation')
Run Code Online (Sandbox Code Playgroud)
文件路径是正确的,我已经双重检查.并且配置文件具有TestInformation部分
[TestInformation]
IEPath = 'C:\Program Files\Internet Explorer\iexplore.exe'
URL = 'www.google.com.au'
'''date format should be '<Day> <Full Month> <Full Year>'
SystemDate = '30 April 2013'
Run Code Online (Sandbox Code Playgroud)
在app.cfg文件中.不确定我做错了什么
python ×10
list ×2
string ×2
c ×1
configparser ×1
dictionary ×1
generator ×1
if-statement ×1
iterator ×1
python-2.5 ×1
python-2.x ×1
regex ×1