javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

为何对列表进行硬编码比计算速度慢?

我想将此序列的前1024个术语分配给一个列表。 我最初猜想,对列表进行硬编码将是最快的方法。 我还尝试通过算法生成列表,并发现它比硬编码要快。 因此,我测试了各种折衷方法,使用了越来越长的硬编码列表,并从算法上扩展到了1024个项目。 我发现最快的方法涉及对前128个项目进行硬编码并生成其余项目。

我想了解为什么硬编码序列中的前128个项目并计算其余部分比硬编码所有1024个项目要快。 使用Python 3.4.2 Shell(IDLE)和cProfile timeit(感谢Veedrac对改进的性能分析代码的回答)。 我将硬编码列表留在很长的一行上,以避免用数字行将问题弄乱,但除此之外,代码不需要水平滚动。

def hardcoded():
    m = [0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,9,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,10]

def softcoded():
    m = [0]
    for k in range(10):
        m += m
        m[-1] += 1

def hybrid():
    m = [0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7]
    for k in range(3):
        m += m
        m[-1] += 1

from timeit import Timer

def p_time(func, n=10000):
    print(func.__name__)
    print(min(Timer(func).repeat(10, n)) / n)

p_time(hardcoded)
p_time(softcoded)
p_time(hybrid)

时机

hardcoded
1.593102711162828e-05
softcoded
1.1183638458442147e-05
hybrid
9.69246251002005e-06

我将所有计时运行了几次,并粘贴到最低的位置。

trans by 2020-02-22T17:24:03Z

我使用cx_Freez时出现KeyError:“ TCL_Library”

当我使用cx_Freeze时,在构建我的pygame程序时遇到keyerror KeyError: 'TCL_Library'。 为什么会得到这个,如何解决?

我的setup.py如下:

from cx_Freeze import setup, Executable

setup(
    name = "Snakes and Ladders",
    version = "0.9",
    author = "Adam",
    author_email = "Omitted",
    options = {"build_exe": {"packages":["pygame"],
                         "include_files": ["main.py", "squares.py",
                         "pictures/Base Dice.png", "pictures/Dice 1.png",
                         "pictures/Dice 2.png", "pictures/Dice 3.png",
                         "pictures/Dice 4.png", "pictures/Dice 5.png",
                         "pictures/Dice 6.png"]}},
    executables = [Executable("run.py")],
    )
trans by 2020-02-22T15:48:56Z

底部-四本笔记本

我正在尝试在python中使用pytesseract,但是我总是遇到以下错误:

    raise TesseractNotFoundError()
pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your path

但是,pytesseract和Tesseract已安装在我的系统上。

产生此错误的示例代码:

import cv2
import pytesseract

img = cv2.imread('1d.png')
print(pytesseract.image_to_string(img))
trans by 2020-02-21T03:10:20Z

编写与possib最接近Python 3.x语法的Python 2.7代码

由于Django尚不支持Python 3.x,因此我正在使用Python 2.7。 但是,我想继续并尽可能地熟悉新的Python 3.x语法。 这引出我一个问题:

  • 编写与Python 3.x尽可能兼容的Python 2.7代码的最佳方法是什么?

我知道运行python -3

警告2to3无法轻松修复的Python 3.x不兼容问题。

但是,我有兴趣在仍然使用Python 2.7的同时习惯于Python 3.x语法。

例如,似乎我应该在代码中使用以下导入:

from __future__ import print_function
from __future__ import unicode_literals
from __future__ import division
from __future__ import absolute_import

从Python 3.0开始,以上四个__future__ import语句是必需的,但在2.7中则不需要,如Python 2.7.3文档27.11中所述。 未来声明定义

还有什么?

trans by 2020-02-19T04:36:35Z

使用Python获取网页内容?

我正在使用Python 3.1,如果有帮助的话。

无论如何,我正在尝试获取此网页的内容。 我用Google搜索了一下,尝试了不同的方法,但是它们没有用。 我猜想这应该是一件容易的事,但是...我做不到。 :/。

urllib,urllib2的结果:

>>> import urllib2
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import urllib2
ImportError: No module named urllib2
>>> import urllib
>>> urllib.urlopen("http://www.python.org")
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    urllib.urlopen("http://www.python.org")
AttributeError: 'module' object has no attribute 'urlopen'
>>> 

Python 3解决方案

谢谢杰森。 :D

import urllib.request
page = urllib.request.urlopen('http://services.runescape.com/m=hiscore/ranking?table=0&category_type=0&time_filter=0&date=1519066080774&user=zezima')
print(page.read())
trans by 2020-02-17T12:51:33Z

为什么Python 3中的切片仍会复制而不是视图?

正如我现在在评论此答案后才注意到的那样,Python 3中的切片返回所切片内容的浅表副本,而不是视图。 为什么仍然如此? 即使将numpy的视图用法而不是副本用于切片,也是如此,事实是dict.keysdict.values__getslice__都在Python 3中返回了视图,并且Python 3还有许多其他方面旨在更好地使用迭代器,这似乎使 将会有朝着切片变得相似的方向发展。 __setslice__确实具有islice函数,该函数可以进行迭代切片,但比正常切片有更多限制,并且不提供沿dict.keysdict.values的视图功能。

同样,您可以对切片使用赋值来修改原始列表,但是切片本身是副本而不是视图,这是该语言的一个矛盾方面,似乎违反了Zen Zen中阐明的一些原理。

也就是说,你可以做的事实

>>> a = [1, 2, 3, 4, 5]
>>> a[::2] = [0, 0, 0]
>>> a
[0, 2, 0, 4, 0]

但不是

>>> a = [1, 2, 3, 4, 5]
>>> a[::2][0] = 0
>>> a
[0, 2, 3, 4, 5]

或类似的东西

>>> a = [1, 2, 3, 4, 5]
>>> b = a[::2]
>>> b
view(a[::2] -> [1, 3, 5])   # numpy doesn't explicitly state that its slices are views, but it would probably be a good idea to do it in some way for regular Python
>>> b[0] = 0
>>> b
view(a[::2] -> [0, 3, 5])
>>> a
[0, 2, 3, 4, 5]

似乎有些武断/不受欢迎。

我知道[http://www.python.org/dev/peps/pep-3099/]以及其中说“切片和扩展切片不会消失的部分(即使__getslice____setslice__ API可能会消失) 被替换),也不会返回标准对象类型的视图。”,但是链接的讨论中没有提及为何做出对视图进行切片的决定; 实际上,在原始帖子中列出的建议中,对该特定建议的大多数评论似乎都是积极的。

是什么阻止了这种类似的事情在Python 3.0中实现,而Python 3.0是专门为与Python 2.x不严格向后兼容而设计的,因此这将是实现这种设计更改的最佳时机,是否有可能 防止它在未来的Python版本中?

trans by 2020-02-16T20:45:50Z

Windows-适用于Python 3.4的Microsoft Visual C ++编译器

我知道有一个“适用于Python 2.7的Microsoft Visual C ++编译器”,但是目前或计划中是否存在用于Python 3.4的Microsoft Visual C ++编译器或适用于Python 3.x的夏娃Microsoft Visual C ++编译器? 如果我不必在整个实验室中安装其他版本的Visual Studio,那将是非常有益的。

trans by 2020-02-16T16:36:42Z

带有MySQL数据库的Python 3.4.0

我已经安装了Python版本3.4.0,并且想使用MySQL数据库做一个项目。 我下载并尝试安装MySQLdb,但是对于此版本的Python而言,它并不成功。 有什么建议可以解决此问题并正确安装吗?

trans by 2020-02-16T14:28:15Z

python-如何使对象正确地可哈希化?

这是我的代码:

class Hero:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return self.name + str(self.age)

    def __hash__(self):
        print(hash(str(self)))
        return hash(str(self))

heroes = set()

heroes.add(Hero('Zina Portnova', 16)) # gets hash -8926039986155829407
print(len(heroes)) # gets 1

heroes.add(Hero('Lara Miheenko', 17)) # gets hash -2822451113328084695
print(len(heroes)) # gets 2

heroes.add(Hero('Zina Portnova', 16)) # gets hash -8926039986155829407
print(len(heroes)) # gets 3! WHY?

为什么会这样呢?
第一个和第三个对象具有相同的内容和相同的哈希,但是len()讲述了3个唯一的对象?

trans by 2020-02-16T04:51:10Z

可以在枚举中定义一个类常量吗?

Python 3.4引入了一个新模块Enum,该模块为该语言添加了枚举类型。 Enum的文档提供了一个示例来演示如何扩展它:

>>> class Planet(Enum):
...     MERCURY = (3.303e+23, 2.4397e6)
...     VENUS   = (4.869e+24, 6.0518e6)
...     EARTH   = (5.976e+24, 6.37814e6)
...     MARS    = (6.421e+23, 3.3972e6)
...     JUPITER = (1.9e+27,   7.1492e7)
...     SATURN  = (5.688e+26, 6.0268e7)
...     URANUS  = (8.686e+25, 2.5559e7)
...     NEPTUNE = (1.024e+26, 2.4746e7)
...     def __init__(self, mass, radius):
...         self.mass = mass       # in kilograms
...         self.radius = radius   # in meters
...     @property
...     def surface_gravity(self):
...         # universal gravitational constant  (m3 kg-1 s-2)
...         G = 6.67300E-11
...         return G * self.mass / (self.radius * self.radius)
...
>>> Planet.EARTH.value
(5.976e+24, 6378140.0)
>>> Planet.EARTH.surface_gravity
9.802652743337129

此示例还演示了Enum的问题:在surface_gravity()属性方法中,定义了一个常量G,该常量通常在类级别定义-但是尝试在Enum内这样做将只是将其添加为枚举成员之一, 因此,它是在方法内部定义的。

如果类想在其他方法中使用此常量,则也必须在其中定义它,这显然不是理想的选择。

有什么方法可以在Enum内定义类常量,或者采取一些变通办法来实现相同的效果?

trans by 2020-02-14T10:00:47Z

python-Django Rest Framework-没有名为rest_fram的模块

我已经使用pip install djangorestframework安装了django rest框架,但是当我运行“ python3 manage.py sycndb”时仍然出现此错误:

ImportError:没有名为“ rest_framework”的模块

我正在使用python3,这是我的问题吗?

trans by 2020-02-12T20:07:54Z

Python 3中的int()和floor()有什么区别?

在Python 2中,floor()返回浮点值。 尽管对我而言并不明显,但我发现了一些解释,以阐明为什么有floor()返回浮点数可能有用(对于float('inf')int()这样的情况)。

但是,在Python 3中,int()返回整数(并为前面提到的特殊情况返回溢出错误)。

那么现在int()floor()之间有什么区别(如果有)?

trans by 2020-02-12T13:46:52Z

Python range()和zip()对象类型

我了解如何在for循环中使用range(10)zip()之类的功能。 但是我希望range()输出一个列表-非常像unix shell中的seq。 如果我运行以下代码:

a=range(10)
print(a)

输出为range(10),表明它不是列表,而是其他类型的对象。 zip()在打印时具有类似的行为,输出类似

<zip object at "hexadecimal number">

所以我的问题是,它们是什么,使其具有什么优点?如何在不循环访问它们的情况下将其输出到列表中?

trans by 2020-02-12T04:28:03Z

macos-在Mac OS X上的python 2.7和python 3.5之间切换

我通常使用Python 2.7,但最近在Mac OS X上使用Miniconda安装了Python 3.5。这两个版本的python安装了不同的库。 现在,在终端中输入关键字“ python”或“ python3”会调用python 3.5,而“ python2”将返回“ -bash:python2:not found”。 现在如何分别分别使用别名“ python2”和“ python3”来调用它们?

我目前正在使用OS X El Capitan。

trans by 2020-02-11T14:27:17Z

python 3.x-SystemError:使用请求和调试时,没有设置异常的错误返回

环境:Python 3.6.3要求2.18.4PyCharm 2018.1

在正常运行中使用上述配置时,一切都很好。 但是,当使用PyCharm调试器时,我的输出不断给我两种异常:

Exception ignored in: <generator object urlsplit.<locals>.<genexpr> at 0x7f69803940a0>
Traceback (most recent call last):
  File "/usr/lib/python3.6/urllib/parse.py", line 433, in <genexpr>
    if not rest or any(c not in '0123456789' for c in rest):

要么

SystemError: error return without exception set
Exception ignored in: <generator object iter_slices at 0x7f69803940f8>
Traceback (most recent call last):
  File "/home/damian/workspace/DofusV2/venv/lib/python3.6/site-packages/requests/utils.py", line 449, in iter_slices
    def iter_slices(string, slice_length):
`

在单个项目中这不是问题,我在无数次的多个项目中都遇到过这个问题。 但是,每个项目都是多线程的(我不知道这有什么区别)问题是,当不使用调试器时,我没有这个问题,而且它对应用程序的稳定和运行没有任何作用。 我的问题是为什么会发生这种情况,我至少可以抑制它,以免污染我的日志吗?

trans by 2020-02-09T19:56:07Z

python-嵌入没有标准库的Python3

编辑:我在这里问了一个相反的问题:如何将Python3嵌入标准库

此处提供了针对Python2的解决方案:是否可以在没有标准库的情况下嵌入python?

但是,Python3在PYTHONPATH上失败,原因是:

Fatal Python error: Py_Initialize: unable to load the file system  
codec ImportError: No module named 'encodings'

这是有道理的,因为py3源文件默认为utf-8。 因此,似乎只需要外部二进制文件即可解析py3源文件。

那么该怎么办?

看来我需要在系统Python安装中找到PYTHONPATH二进制文件,并将其复制到项目树中,并可能设置一些环境变量PYTHONPATH(?),以便我的libpython.dylib可以找到它。

有可能避免这种情况吗? 如果不是,那么任何人都可以澄清我需要采取的步骤吗? 还会有更多的打?吗?


注意:为了后代,这是我如何将独立的libpython.dylib链接到OSX上的项目:

首先,找到系统Python的库:PYTHONPATH(在我的情况下,它是通过自制软件安装的)。

现在我:

  • 将.dylib复制到创建PYTHONPATH的项目文件夹中

  • 进入PYTHONPATH并将PYTHONHOME设置为../Frameworks

此时,它似乎可以正常工作。 但是,如果您知道尝试在全新的OSX安装上构建它,它将失败。 这是因为:

$ otool -D ./libpython3.4.1_OSX.dylib 
./libpython3.4.1_OSX.dylib:
/usr/local/Frameworks/Python.framework/Versions/3.4/Python

.dylib仍保留其旧位置。 我真的很奇怪,.dylib包含一个指向其位置的链接,因为使用它的任何人都必须知道它在哪里才能首先调用它!

我们可以通过以下方法纠正此问题:

$ install_name_tool -id @rpath/libpython3.4.1_OSX.dylib libpython3.4.1_OSX.dylib

但是,在我们的Xcode项目中,还必须:

  • 进入PYTHONPATH。添加PYTHONHOME步骤,将../Frameworks复制到Frameworks(在正确的位置放置)。
  • 进入PYTHONPATH并将PYTHONHOME设置为../Frameworks

最后,我需要进入PYTHONPATH并添加值为../FrameworksPYTHONHOME

我怀疑要使其正常工作,我还需要添加PYTHONPATH

链接:
[https://mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html]
[http://qin.laya.com/tech_coding_help/dylib_linking.html]
[https://github.com/conda/conda-build/issues/279#issuecomment-67241554]
您能否帮助我了解Mach-O库如何在Mac Os X中工作?
[http://nshipster.com/launch-arguments-and-environment-variables/]

trans by 2020-02-09T15:26:14Z

python 3.x-UnicodeEncodeError:'charmap'编解码器无法编码字符'\ u2010':字符映射到<undefined>

这个问题已经在这里有了答案:

  • 为什么Python无法识别我的utf-8编码的源文件?                                     1个答案

尝试打印从python 3.4中使用硒请求的网站获得的“Á”时,我一直收到UnicodeEncodeError。

我已经在.py文件的顶部定义了

# -*- coding: utf-8 -*-

def是这样的:

from selenium import webdriver

b = webdriver.Firefox()
b.get('http://fisica.uniandes.edu.co/personal/profesores-de-planta')
dataProf = b.find_elements_by_css_selector('td[width="508"]')
for dato in dataProf:
        print(datos.text)

和例外:

Traceback (most recent call last):
  File "C:/Users/Andres/Desktop/scrap/scrap.py", line 444, in <module>
    dar_p_fisica()
  File "C:/Users/Andres/Desktop/scrap/scrap.py", line 390, in dar_p_fisica
    print(datos.text) #.encode().decode('ascii', 'ignore')
  File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2010' in position 173: character maps to <undefined>

提前致谢

trans by 2020-02-07T17:47:07Z

如何了解有关Python内部的更多信息?

我使用Python进行编程已有半年以上的时间,并且我对Python内部更感兴趣,而不是使用Python开发应用程序。 目前,我正在将一些库从Python2移植到Python3。 但是,对于如何将端口内容从Python2转换为Python3,我有一个相当抽象的观点,因为大多数更改都涉及Python2.x中的设计问题。

我想了解更多关于Python内部的知识; 我应该采用自上而下还是自下而上的方法? 有什么可以推荐的参考文献吗?

trans by 2020-02-06T09:16:27Z

python-为什么OrderedDict的值不相等?

使用Python 3:

>>> from collections import OrderedDict
>>> d1 = OrderedDict([('foo', 'bar')])
>>> d2 = OrderedDict([('foo', 'bar')])

我想检查是否相等:

>>> d1 == d2
True
>>> d1.keys() == d2.keys()
True

但:

>>> d1.values() == d2.values()
False

您知道为什么值不相等吗?

我已经使用Python 3.4和3.5进行了测试。


提出这个问题之后,我在Python-Ideas邮件列表中发布了更多详细信息:

[https://mail.python.org/pipermail/python-ideas/2015-December/037472.html]

trans by 2020-02-04T14:59:15Z

字符串-使用新的Python格式函数舍入小数

如何使用Python 3.0 format函数将小数点舍入到小数位数?

trans by 2020-02-02T18:43:07Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 下一页 共16页