如果我有一个foo.py
包含以下内容的模块/文件:
from math import sqrt
def foo():
pass
Run Code Online (Sandbox Code Playgroud)
如果我在另一个脚本中导入它,sqrt
也会在模块中定义foo
.
import foo
dir(foo)
Run Code Online (Sandbox Code Playgroud)
其输出是
[..., # other things
'foo',
'sqrt']
Run Code Online (Sandbox Code Playgroud)
我该如何防止这种情况?即,要么指定sqrt
不导出,要么只导出特定功能 - 在这种情况下,只导出用户定义的功能.我知道对于用户定义的函数,你可以通过在下划线前加上私有地在模块中定义它们,但在这种情况下它不是用户定义的函数,所以我不能用下划线前缀来定义它.
我正在处理一些昼夜时间序列,其中时间必须表示为几分钟.
在各种工具中,一些日期/时间类从epoch开始表示为整数(例如,R的POSIX类,Python/Numpy); 其他的是自纪元以来的分数天(例如,R的chron包,也是Matlab).
似乎整数表示允许您执行数值计算(求和,差异),但ALSO提供了一种通过它们进行合并/匹配的方法,而对于那些由小数天(浮点数)表示的那些更难以按时间合并/匹配.
这更像是一个概念性的问题,但是有一个很好的理由使用小数天或花车进行时间表示吗?对于R,奇怪的是,甚至POSIX类都是数字而不是整数.
> (p <- as.POSIXct("2011-01-01"))
[1] "2011-01-01 CST"
> (unclass(p <- as.POSIXct("2011-01-01")))
[1] 1293861600
attr(,"tzone")
[1] ""
> class(unclass(p <- as.POSIXct("2011-01-01")))
[1] "numeric"
Run Code Online (Sandbox Code Playgroud)
这是因为R的早期整数存储限制?或者使用浮点表示还有其他一些优势吗?要合并我将我的日期/时间对象转换为格式化的字符串,但这是规范的方式(我最常使用chron
R中的包)?
Pylookup是emacs中的一个项目,用于在浏览器中查看python文档,而不是在解释器中:http://taesoo.org/proj/pylookup.html
基本上,它需要以这种格式的文档:
如何下载这些帮助目录以便我可以在本地访问它们?
如果我有数据框,提取值的标准方法是使用布尔/逻辑表达式来匹配正确的行和列.例:
set.seed(1)
df <- data.frame(letters = letters[1:3], numbers = as.character(c(1, 2, 1)), value=rnorm(3))
subset(df, letters=="c" & numbers=="1")$value
[1] -0.8356286
Run Code Online (Sandbox Code Playgroud)
然而,将许多==
陈述串联在一起似乎有些笨拙.另一种方法是使用行名作为键:
Key <- function(...) paste(..., sep="%") # this could be any formatting
row.names(df) <- with(df, Key(letters, numbers))
df[Key("c", "1"), "value"]
[1] -0.8356286
Run Code Online (Sandbox Code Playgroud)
在tidyverse中,不鼓励使用行名称 - 匹配和提取值的推荐方法是什么?
我最近安装了Emacs 23(在OS X Leopard上)并试用了emacs服务器.我尝试了两种方法:(1)将(server-start)放入我的.emacs文件中,以及(2)在终端上运行emacs --daemon(在单独的试验中;不在同一时间).在任何一种情况下,当我已经打开emacs框架并尝试使用emacsclient -t,-tty或-nw在OS X终端中打开单独的文件时,该文件始终在现有框架中打开,而不是在终端中打开描述:
http://www.gnu.org/software/emacs/manual/html_node/emacs/emacsclient-Options.html
http://emacs-fu.blogspot.com/2009/02/emacs-daemon.html
但是,emacsclient -c按预期工作.你对可能发生的事情有什么想法吗?
非常感谢!-Stephen
我来自C,Fortran,Python,R,Matlab和一些Lisp的背景 - 我在Haskell上读过一些东西.JL或APL家族其他语言中有哪些简洁的想法/例子是独特的,而不是用更常见的语言实现的?我总是有兴趣找出我所缺少的东西......
如果我想制作如下所示的组合图像(原始来源),你能指出我需要组装的matplotlib对象吗?我一直在尝试使用AxesImage对象,我也下载了SciKits Timeseries - 但我是否需要这个,或者可以从时间模块中轻松使用strptime,mktime和strftime并滚动我自己的自定义轴?谢谢〜
我是否必须设置类似.emacs.d/init_bash.sh
(如shell模式),或者它可以~/.bash_profile
直接读取我的内容吗?如果是后者,如何设置配置ansi-term/multi-term以在启动时自动获取此文件?
我试图将用不同语言编写的代码的一部分(一个名为Igor Pro的Wavemetrics,用于那些你已经听说过它的代码)移植到Python.
在此代码中,数据类型从16位整数(从16位大端二进制文件读入)转换为单精度(32位)浮点.在此计划中,转换如下:
有符号的16位整数:
print tmp
tmp[0]={-24160,18597,-24160,18597,-24160}
Run Code Online (Sandbox Code Playgroud)
转换为32位浮点:
Redimension/S/E=1 tmp
print tmp
tmp[0]={339213,339213,5.79801e-41,0,0}
Run Code Online (Sandbox Code Playgroud)
在/S
标志/选项表示的数据类型tmp
应FLOAT32代替INT16.但是,我认为重要的标志/选项是/E=1
,"强制重塑而不转换或移动数据".
在Python中,转换如下:
>>> tmp[:5]
array([-24160, 18597, -24160, 18597, -24160], dtype=int16)
>>> tmp.astype('float32')
array([-24160., 18597., -24160., ..., 18597., -24160., 18597.], dtype=float32)
Run Code Online (Sandbox Code Playgroud)
这是我的期望,但我需要找到一个模拟/E=1
上面原始代码中的选项的函数/操作.是否有明显的方法将-24160和18597都转换为339213?这是否有什么关系byteswap
或者newbyteorder
还是别的什么?
假设,如果我的科学工作导致功能/模块/子程序(在桌面上)的开发,我需要知道将其纳入大型模拟中以在超级计算机上运行(可能模拟分子) ,液体,反应等)?
我的印象是,它可能与利用某些库(例如,BLAS,LAPLACK)尽可能,修改算法(减少迭代),分析,并行化,考虑内存 - 硬盘处理器使用/访问...我是意识到这句格言,"想要优化你的代码?不要这样做",但如果有人想学习编写有效的代码,那么可以提供哪些参考?
我认为这个问题与语言无关,但由于生物分子模拟,气候建模等许多数字运算包都是在某些版本的Fortran中编写的,因此这种语言可能是我感兴趣的目标(我在Fortran中进行了相当广泛的编程) 77).