好的,我知道我总是可以在一个内置函数中包装sub:
function_taking_callback( sub { return getpwuid( $_[ 0 ] ); } );
Run Code Online (Sandbox Code Playgroud)
...但我发现很难相信Perl需要这样的东西.
注意:这个问题是关于重要数字的。这不是关于“小数点后的数字”或类似的问题。
编辑:此问题不是十进制模块中有效数字的重复。这两个问题是关于完全不同的问题。我想知道为什么函数不返回特定输入的期望值。十进制模块中有效数字的答案均未解决该问题。
假定以下函数返回具有指定数量的有效数字的浮点数的字符串表示形式:
import decimal
def to_sigfigs(value, sigfigs):
return str(decimal.Context(prec=sigfigs).create_decimal(value))
Run Code Online (Sandbox Code Playgroud)
乍一看,它似乎有效:
print to_sigfigs(0.000003141592653589793, 5)
# 0.0000031416
print to_sigfigs(0.000001, 5)
# 0.0000010000
print to_sigfigs(3.141592653589793, 5)
# 3.1416
Run Code Online (Sandbox Code Playgroud)
...但
print to_sigfigs(1.0, 5)
# 1
Run Code Online (Sandbox Code Playgroud)
最后一个表达式(IOW,5位有效数字表示1.0)的期望输出是字符串'1.0000'。实际输出为字符串“ 1”。
我是误解了什么还是这是一个错误decimal?
我正在寻找为什么将常规迭代器转换为支持将项目推回其中的迭代器。例如
item = next(my_iterator)
if went_too_far(item):
my_iterator.pushback(item)
break;
Run Code Online (Sandbox Code Playgroud)
这与支持peek;的迭代器类似,但不完全相同。对于后者,上面看起来更像这样:
if went_too_far(my_iterator.peek()):
break
else:
item = next(my_iterator)
Run Code Online (Sandbox Code Playgroud) 例如,在"/tmp/test.csv"的值(即,01,02,03)是指表示字符串即正好匹配/^\d+$/,而不是整数:
In [10]: print open('/tmp/test.csv').read()
A,B,C
01,02,03
Run Code Online (Sandbox Code Playgroud)
默认情况下,pandas.read_csv将这些值转换为整数:
In [11]: import pandas
In [12]: pandas.read_csv('/tmp/test.csv')
Out[12]:
A B C
0 1 2 3
Run Code Online (Sandbox Code Playgroud)
我想告诉pandas.read_csv我们保留所有这些价值观.即,不进行任何转换.此外,我想是,采用这种"请什么也不做"指令全面的主板,没有我不必指定任何列名或数字.
我试过这个,没有做到:
In [13]: import csv
In [14]: pandas.read_csv('/tmp/test.csv', quoting=csv.QUOTE_ALL)
Out[14]:
A B C
0 1 2 3
Run Code Online (Sandbox Code Playgroud)
唯一有效的方法是定义一个大的ol' ConstantDict类,并使用它的一个实例,它总是返回identity function(lambda x: x)作为converters参数的值,从而欺骗pandas.read_csv无所作为:
In [15]: %cpaste
class ConstantDict(dict):
def __init__(self, value):
self.__value = value …Run Code Online (Sandbox Code Playgroud) 注意:我在下面定义的类型只是这个问题的一个方便的例子; 我敢肯定,我无需在Haskell中推出自己的复数定义.
我不知道我是否在这里使用了正确的术语,但r下面的选择器是我所说的"部分"记录选择器的一个例子:
data Complex = Polar { r :: Float, y :: Float }
| Rectangular { x :: Float, y :: Float }
deriving Show
Run Code Online (Sandbox Code Playgroud)
r是"部分的",因为它不能应用于所有 Complex值; 例如
r $ Polar 3 0
-- 3.0
Run Code Online (Sandbox Code Playgroud)
...但
r $ Rectangular 3 0
-- *** Exception: No match in record selector r
Run Code Online (Sandbox Code Playgroud)
然而,在这种情况下,有一个合理的定义r $ Rectangular x y,即:
-- assuming {-# LANGUAGE RecordWildCards #-}
r :: Complex -> Float
r Rectangular { .. …Run Code Online (Sandbox Code Playgroud) 如果函数接收任意对象x作为参数,测试是否x支持某种方法的最佳方法是什么foo?
(我认为,作为最后的手段,该函数总是可以尝试在具有合适处理程序的foo(x)a 内进行评估tryCatch,但我发现,至少在某些情况下,即使不支持foo(x)也不会产生错误;相反,它只会return 。因此,不能依赖捕获异常作为对 的支持的合适测试。)xfooNULLxfoo
我想这个问题的答案将取决于 的x“对象风味”(S3、S4或其他)。请在您的回答中考虑所有此类可能性。
假设我有以下数据帧df,由3级多索引索引:
In [52]: df
Out[52]:
C
L0 L1 L2
0 w P 1
y P 2
R 3
1 x Q 4
R 5
z S 6
Run Code Online (Sandbox Code Playgroud)
用于创建DataFrame的代码:
idx = pd.MultiIndex(levels=[[0, 1], ['w', 'x', 'y', 'z'], ['P', 'Q', 'R', 'S']],
labels=[[0, 0, 0, 1, 1, 1], [0, 2, 2, 1, 1, 3], [0, 0, 2, 1, 2, 3]],
names=['L0', 'L1', 'L2'])
df = pd.DataFrame({'C': [1, 2, 3, 4, 5, 6]}, index=idx)
Run Code Online (Sandbox Code Playgroud)
对于可能的值L2水平为'P','Q', …
我正在尝试了解#操作员的规则。
考虑以下示例:
> t1 = table.pack(nil, 1, nil, 2)
> #t1
4
> for k, v in pairs(t1) do print(k, v) end
2 1
4 2
n 4
> t2 = table.pack(nil, 1, nil, 2, nil)
> #t2
2
> for k, v in pairs(t2) do print(k, v) end
2 1
4 2
n 5
> t3 = table.pack(nil, 1, nil, 2, nil, 3, nil)
> #t3
0
> for k, v in pairs(t3) do print(k, v) end …Run Code Online (Sandbox Code Playgroud) Python允许通过...as <ALIAS>import语句中的子句对输入进行别名处理,如下所示:
import mymodule as somealias
from myothermodule import spam as spamalias, ham as hamalias
Run Code Online (Sandbox Code Playgroud)
现在,至少在默认情况下,import语句(包括那些具有as上述类似条件的语句)会导致调用__builtin__.__import__其参数列表不包含此类别名的名称.IOW,AFAICT,以下"无别名"导入语句产生与__builtin__.__import__上面引用的import语句相同的调用:
import mymodule
from myothermodule import spam, ham
Run Code Online (Sandbox Code Playgroud)
那么这些别名如何进入导入过程?Python是否提供了自定义导入过程如何使用别名的方法?
(我没有考虑任何特定的应用程序;我只是想更好地了解Python的工作原理.)
我知道包含一个像-*- coding: utf-8 -*-文件顶部附近的指令会告诉Emacs采用UTF-8编码,但更多时候,我想打开不包含这种指令的UTF-8编码文件.(在某些情况下,修改文件以添加编码指令不是什么大问题,但即使这样,这也是一个非常令人不满意的解决方案.)
在这种情况下,我应该使用(而不是普通的
C-x C-f)使用UTF-8作为编码系统打开文件?
编辑:要明确:甚至"现代Emacs"有时会猜到错误的编码系统(可能是由于文件中的错误或损坏); 我想告诉Emacs:打开这个文件时,忽略你的启发式,假设是UTF-8编码.基本上,我想要一个-*- coding: utf-8 -*-不需要我修改文件的指令.