javascript

java

python

c#

android

node.js

reactjs

c++

php

html

jquery

css

git

.net

ios

ruby-on-rails

sql

c

string

ruby

python-将float转换为位置格式的字符串(无科学计数法和错误精度)

我想打印一些浮点数,以便始终以十进制形式编写它们(例如decimal'0.00000005',而不是用科学计数法,但我想得出的结果是IEEE 754的〜15.7有效数字 加倍,再也没有。

理想情况下,我想要的是使结果是位置十进制格式的最短字符串,当转换为decimal时仍会得到相同的值。

众所周知,如果指数大于15或小于-4,则'0.00000005'decimal用科学计数法表示:

>>> n = 0.000000054321654321
>>> n
5.4321654321e-08  # scientific notation

如果使用decimal,则生成的字符串再次采用科学计数法:

>>> str(n)
'5.4321654321e-08'

建议我可以使用带有'0.00000005'标志和足够精度的decimal来摆脱科学计数法:

>>> format(0.00000005, '.20f')
'0.00000005000000000000'

它适用于该数字,尽管它有一些额外的尾随零。 但是随后相同的格式对于decimal失败,它给出的十进制数字超出了float的实际机器精度:

>>> format(0.1, '.20f')
'0.10000000000000000555'

并且如果我的电话号码是decimal,则使用'0.00000005'仍然会失去相对精度:

>>> format(4.5678e-20, '.20f')
'0.00000000000000000005'

因此,这些方法不符合我的要求。


这就引出了一个问题:用十进制格式打印任意浮点数,与decimal(或Python 3上的'0.00000005'081)具有相同数字的最简单且性能最佳的方法是什么,但始终使用十进制格式,而不是 科学计数法。

也就是说,例如将浮点值decimal转换为字符串'0.00000005'的函数或操作; 0.1'0.1'420000000000000000.0'420000000000000000.0'420000000000000000,并将浮点值-4.5678e-5格式化为'-0.000045678'


赏金期过后:似乎至少有2种可行的方法,正如Karin证明的那样,与我在Python 2上的初始算法相比,使用字符串操作可以显着提高速度。

从而,

  • 如果性能很重要并且需要Python 2兼容性; 或者,如果decimal模块由于某种原因而无法使用,那么Karin使用字符串操作的方法就是这样做的方法。
  • 在Python 3上,我稍短一些的代码也会更快。

由于我主要是在Python 3上进行开发,因此我将接受自己的回答,并奖励Karin。

trans by 2019-11-17T07:02:05Z

python-Set文字与set函数产生不同的结果

为什么set函数调用会清除重复项,但不能解析集合文字?

>>> x = Decimal('0')
>>> y = complex(0,0)
>>> set([0, x, y])
{0}
>>> {0, x, y}
{Decimal('0'), 0j}

(Python 2.7.12。可能与这个类似问题的根本原因相同)

trans by 2019-11-12T18:26:36Z

在Python中以0开头的数字是什么意思?

当我在python中输入前面带有0的小整数时,它们给出了奇怪的结果。 为什么是这样?

>>> 011
9
>>> 0100
64
>>> 027
23

注意:Python版本2.7.3我已经在Python 3.0中对此进行了测试,显然现在这是一个错误。 因此,这是特定于版本的。

编辑:它们显然仍然是整数:

>>> type(027)
`<type 'int'>`
trans by 2019-11-02T18:46:06Z

如何在Python中使用subprocess.check_output()?

我找到了有关subprocess.check_output()的文档,但找不到带有参数的文档,而且该文档也不是很深入。 我正在使用Python 3(但试图通过Python 3运行Python 2文件)

我正在尝试运行以下命令:py2output = subprocess.check_output([str('python'),'py2.py','-i', test.txt'])

-i是argparse的位置参数,test.txt是-i,py2.py是要运行的文件

我尝试了很多(无效)变体,包括:py2output = subprocess.check_output([str('python'),'py2.py','-i', test.txt'])

py2output = subprocess.check_output([str('python'),'py2.py','-i', test.txt'])

trans by 2019-10-25T14:59:00Z

我如何表示未使用的函数参数?

当“解构”一个元组时,我可以使用_来表示我不感兴趣的元组元素,例如

>>> a,_,_ = (1,2,3)
>>> a
1

使用Python 2.x,如何使用函数参数表达相同的含义? 我尝试使用下划线:

>>> def f(a,_,_): return a
...
  File "<stdin>", line 1
SyntaxError: duplicate argument '_' in function definition

我还试图完全忽略该论点:

>>> def f(a,,): return a
  File "<stdin>", line 1
    def f(a,,): return a
        ^
SyntaxError: invalid syntax

还有另一种方法可以达到相同目的吗?

trans by 2019-10-24T09:28:15Z

python-如何将元素添加到OrderedDict的开头?

我有这个:

d1 = OrderedDict([('a', '1'), ('b', '2')])

如果我这样做:

d1.update({'c':'3'})

然后我得到这个:

OrderedDict([('a', '1'), ('b', '2'), ('c', '3')])

但我想要这个:

[('c', '3'), ('a', '1'), ('b', '2')]

无需创建新字典。

trans by 2019-10-10T04:17:04Z

python-ImportError:没有名为“ encodings”的模块

我最近重新安装了ubuntu并升级到16.04,无法使用python:

$ python manage.py runserver
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'
Aborted

在这一点上,python本身不起作用

$ python
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'
Aborted

甚至这个建议也不再起作用:

unset PYTHONHOME
unset PYTHONPATH

每一次我用一种方式修复它,它都会再次出现。 有几个答案有助于暂时修复它,但不是永久性的。 我已经重新安装了python和python3几次。 我可以从这里做什么? 谢谢

trans by 2019-10-03T08:10:22Z

在python中定义类的“布尔”

为什么不像天真的预期的那样工作?

class Foo(object):
    def __init__(self):
        self.bar = 3
    def __bool__(self):
        return self.bar > 10

foo = Foo()

if foo:
    print 'x'
else:
    print 'y'

(输出是x

trans by 2019-10-03T01:22:35Z

保留大小写在ConfigParser中?

我尝试使用Python的ConfigParser模块保存设置。 对于我的应用程序,重要的是要在我的部分中保留每个名称的大小写。 文档提到将str()传递给ConfigParser.optionxform()可以完成此操作,但对我而言不起作用。 名称均为小写。 我想念什么吗?

<~/.myrc contents>
[rules]
Monkey = foo
Ferret = baz

我得到的Python伪代码:

import ConfigParser,os

def get_config():
   config = ConfigParser.ConfigParser()
   config.optionxform(str())
    try:
        config.read(os.path.expanduser('~/.myrc'))
        return config
    except Exception, e:
        log.error(e)

c = get_config()  
print c.options('rules')
[('monkey', 'foo'), ('ferret', 'baz')]
trans by 2019-10-01T11:33:53Z

如何在Python C-API中动态创建派生类型

假设在编写用于Python的C扩展模块的教程中定义的类型为Py_TPFLAGS_HEAPTYPE。 现在我们要创建一个派生类型,仅覆盖Noddy__new__()方法。

当前,我使用以下方法(去除了可读性的错误检查):

PyTypeObject *BrownNoddyType =
    (PyTypeObject *)PyType_Type.tp_alloc(&PyType_Type, 0);
BrownNoddyType->tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;
BrownNoddyType->tp_name = "noddy.BrownNoddy";
BrownNoddyType->tp_doc = "BrownNoddy objects";
BrownNoddyType->tp_base = &NoddyType;
BrownNoddyType->tp_new = BrownNoddy_new;
PyType_Ready(BrownNoddyType);

这可行,但是我不确定这是否是正确的方法。 我本来希望我也必须设置Py_TPFLAGS_HEAPTYPE标志,因为我会在堆上动态分配类型对象,但这样做会导致解释器出现段错误。

我还考虑过使用type()或类似名称显式调用PyDescr_NewMethod(),但我放弃了这个想法。 我需要将函数type()包装在Python函数对象中,并创建一个将tp_new映射到此函数对象的字典,这看起来很愚蠢。

最好的方法是什么? 我的方法正确吗? 我错过了接口功能吗?

更新

在python-dev邮件列表(1)(2)上,有两个主题相关的主题。 从这些线程和一些实验中,我得出结论,除非通过调用type()分配类型,否则不应该设置PyDescr_NewMethod()。这些线程中有不同的建议,无论是手动分配类型还是调用type()都是更好的选择。 d如果只有我知道在tp_new插槽中应该包装C函数的推荐方式是什么,对后者感到满意。 对于常规方法,此步骤很容易-我可以使用PyDescr_NewMethod()获得合适的包装对象。 但是,我不知道如何为__new__()方法创建这样的包装对象—也许我需要未记录的函数PyCFunction_New()才能创建这样的包装对象。

trans by 2019-09-23T21:44:19Z

可变参数函数-Python,可变长度位置参数后的默认关键字参数

我以为可以在Python 2的函数调用中在变长位置参数之后使用命名参数,但是在导入python类时得到了SyntaxError。 例如,我正在使用以下“获取”方法进行编写:

class Foo(object):
    def __init__(self):
        print "You have created a Foo."

    def get(self, *args, raw=False, vars=None):
        print len(args)
        print raw
        print vars

错误看起来像:

def get(self, *args, raw=False, vars=None):
                     ^
SyntaxError: invalid syntax

我希望能够以几种方式调用该方法:

f = Foo()
f.get(arg1, arg2)
f.get(arg1, raw=True)
f.get(arg1, arg2, raw=True, vars=something)

等等

trans by 2019-09-22T13:25:23Z

macos - 使用CSV Django modu以通用换行模式打开文件

我试图访问Django中的model.filefield,使用csv模块解析Python中的CSV文件。 它在Windows上工作,但在Mac上它给了我这个:

Exception Type: Error

Exception Value: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?

这是代码:

myfile = customerbulk.objects.all()[0].fileup

mydata = csv.reader(myfile)
    for email,mobile,name,civilid in mydata:
        print email,mobile,name,civilid
trans by 2019-09-03T11:21:15Z

boolean - 如何在python交互模式下撤消True = False?

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

  • 命名与内置函数冲突                                     7个答案

所以我尝试了'#34; evil&#34; Ned Deily在他的回答中提到了这件事。 现在我认为类型True现在总是为假。 如何在交互式窗口中反转此操作?

不要这样做:

True = False

由于True现在已被False完全覆盖,因此似乎并不是一种明显的回溯方式。 是否存在True来自的模块,我可以执行以下操作:

True = <'module'>.True
trans by 2019-08-24T06:57:05Z

Python - write()与writelines()和连接字符串

所以我正在学习Python。 我正在经历课程并遇到一个问题,我必须将很多write()压缩成一个writelines(),同时在每个用户输入变量(write()的对象)之间有一个"\n"

我提出了:

nl = "\n"
lines = line1, nl, line2, nl, line3, nl
textdoc.writelines(lines)

如果我尝试做:

textdoc.write(lines)

我收到一个错误。 但如果我输入:

textdoc.write(line1 + "\n" + line2 + ....)

然后它工作正常。 为什么我无法在write()中使用字符串作为换行符,但我可以在writelines()中使用它?

Python 2.7当我搜索google时,我发现的大部分资源都是我的头脑,我还是一个非专业人士。

trans by 2019-08-13T23:00:57Z

python - 确定2个列表是否具有相同的元素,无论顺序如何?

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

  • 如何在Python中有效地比较两个无序列表(不是集合)?                                     9个答案

很抱歉这个简单的问题,但我很难找到答案。

当我比较2个列表时,我想知道它们是否相等&#34; 因为它们具有相同的内容,但顺序不同。

例如:

x = ['a', 'b']
y = ['b', 'a']

我希望x == y来评估True

trans by 2019-08-11T02:03:35Z

python - 向异常添加信息?

编辑:我正在运行python 2.6

我希望实现这样的目标:

def foo():
   try:
       raise IOError('Stuff ')
   except:
       raise

def bar(arg1):
    try:
       foo()
    except Exception as e:
       e.message = e.message + 'happens at %s' % arg1
       raise

bar('arg1')
Traceback...
  IOError('Stuff Happens at arg1')

但我得到的是:

Traceback..
  IOError('Stuff')

关于如何实现这一点的任何线索?

trans by 2019-08-09T18:42:37Z

继承 - Python super()引发TypeE

在Python 2.5中,以下代码引发了class X

>>> class X:
      def a(self):
        print "a"

>>> class Y(X):
      def a(self):
        super(Y,self).a()
        print "b"

>>> c = Y()
>>> c.a()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in a
TypeError: super() argument 1 must be type, not classobj

如果我用class X(object)替换class X,它将起作用。 对此有何解释?

trans by 2019-07-19T22:59:25Z

Python中的raw_input函数

什么是raw_input的功能? 它是用户界面吗? 我们什么时候使用它?

trans by 2019-07-19T05:19:38Z

语法 - Python中“in”的相关性?

我正在制作一个Python解析器,这让我很困惑:

>>>  1 in  []  in 'a'
False

>>> (1 in  []) in 'a'
TypeError: 'in <string>' requires string as left operand, not bool

>>>  1 in ([] in 'a')
TypeError: 'in <string>' requires string as left operand, not list

关于结合性等,“in”在Python中的工作原理究竟如何?

为什么这些表达式中没有两个表现方式相同?

trans by 2019-07-16T20:19:20Z

闭包 - Python 2.x中的非本地关键字

我正在尝试在Python 2.6中实现一个闭包,我需要访问一个非局部变量,但似乎这个关键字在python 2.x中不可用。 如何在这些版本的python中访问闭包中的非局部变量?

trans by 2019-07-13T11:26:28Z

1 2 3 下一页 共3页