有没有办法知道从dllpython外部函数库导出哪些函数ctypes?
如果可能的话,通过c了解有关导出函数的详细信息types.
如果是,有人可以提供一小段代码吗?
我在ubuntu 13.04,bash,python2.7.4
解释器没有看到我设置的变量.
这是一个例子:
$ echo $A
5
$ python -c 'import os; print os.getenv( "A" )'
None
$ python -c 'import os; print os.environ[ "A" ]'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
KeyError: 'A'
Run Code Online (Sandbox Code Playgroud)
但是PATH变量的一切正常:
$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Run Code Online (Sandbox Code Playgroud)
它注意到PATH:
$ PATH="/home/alex/tests/:$PATH"
$ echo $PATH
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games …Run Code Online (Sandbox Code Playgroud) 为了效率,我试图弄清楚python如何与其对象堆(以及命名空间系统,但它或多或少清晰)一起工作.所以,基本上,我试图理解何时将对象加载到堆中,有多少对象,它们存在多长时间等等.
我的问题是当我使用包并从中导入一些东西时:
from pypackage import pymodule
Run Code Online (Sandbox Code Playgroud)
什么对象被加载到内存中(进入python解释器的对象堆)?更一般地说:会发生什么?:)
我猜上面的例子做了类似的事情:包的一些对象pypackage是在内存中创建的(其中包含有关包的一些信息但不是太多),模块pymodule被加载到内存中,并且它的引用是在本地名称空间中创建的.这里重要的是:没有其他模块pypackage(或其他对象)在内存中创建,除非明确说明(在模块本身,或包初始化技巧和钩子中的某个地方,我不熟悉) .最后,内存中唯一的一件大事就是pymodule(即导入模块时创建的所有对象).是这样吗?如果有人澄清此事,我将不胜感激.也许你可以建议一些有用的文章吗?(文档涵盖更具体的内容)
我发现以下有关模块导入的相同问题:
当Python导入模块时,它首先检查模块注册表(sys.modules)以查看模块是否已导入.如果是这种情况,Python会按现有模块对象使用.
否则,Python会做这样的事情:
- 创建一个新的空模块对象(这本质上是一个字典)
- 将该模块对象插入sys.modules字典中
- 加载模块代码对象(如有必要,首先编译模块)
- 在新模块的命名空间中执行模块代码对象.代码分配的所有变量都可以通过模块对象获得.
并且会对包裹的相同解释感激不尽.
顺便说一句,对于包,模块名称被添加到sys.modules奇怪的:
>>> import sys
>>> from pypacket import pymodule
>>> "pymodule" in sys.modules.keys()
False
>>> "pypacket" in sys.modules.keys()
True
Run Code Online (Sandbox Code Playgroud)
同样存在关于同一问题的实际问题.
当我构建一组可能用于不同进程和程序的工具时.我把它们放在模块中.我别无选择只能加载一个完整的模块,即使我只想要使用一个在那里声明的函数.正如我所看到的那样,通过制作小模块并将它们放入包中可以减轻这个问题(如果一个包在你只导入其中一个模块时没有加载它的所有模块).
有没有更好的方法在Python中创建这样的库?(仅使用单个函数,它们的模块中没有任何依赖项.)是否可以使用C扩展?
PS抱歉这么长的问题.
对于给定的矢量,我想找到它周围的正交基,即给定的矢量归一化和随机选择的正交子空间的基础.朱莉娅有这个方便的功能吗?
如何定义用户不可见的函数(方法)?那些你打电话时带星号的那些methods().
它似乎在互联网上有关于它们的一切,但如何定义它们?
我可以只定义一个不可见的函数(通过在其名称中添加一些东西),或者我应该以某种方式调整环境,还是R包的特定功能来隐藏东西?
我有一个使用 python 脚本argparse。在命令行中输入后python script_name.py -h,它会显示另一个命令的帮助消息,但代码仍然有效。该脚本可以识别其中定义的选项并运行良好。看起来脚本是被什么东西封装的。我输入argparse了一个函数,一开始一切都运行良好。我只是不知道是什么原因导致帮助消息发生变化。
这是代码:
#!/usr/bin/env python
import os
import sys
import json
import logging
import argparse
import handlers
HZZ_DIR = os.path.dirname(os.path.abspath(__file__))
ROOT_DIR = os.path.dirname(os.path.dirname(HZZ_DIR))
logger = logging.getLogger('hzz_logger')
logger.setLevel(logging.DEBUG)
console = logging.StreamHandler()
console.setLevel(logging.INFO)
logger.addHandler(console)
def parse_args():
arg_parser = argparse.ArgumentParser()
arg_parser.add_argument('job', choices=['ws','lm','np'],
help="ws: workspace; lm: limit; np: npranking")
arg_parser.add_argument('-a', '--action', nargs=1,
help="for Limit and NPranking: get/plot (limit/pull)")
arg_parser.add_argument('-b', '--blinded', action='store_true',
help="for Limit: true -- do expected only, false -- do observed as well.")
arg_parser.add_argument('-v', …Run Code Online (Sandbox Code Playgroud) 我在ELF二进制文件中看到了这个有用的功能 - Build ID."它......(通常)是ELF图像中所有代码部分的SHA1哈希值." 可以用GNU实用程序读取它:
$ readelf -n /bin/bash
...
Displaying notes found at file offset 0x00000274 with length 0x00000024:
Owner Data size Description
GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring)
Build ID: 54967822da027467f21e65a1eac7576dec7dd821
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种简单的方法可以自己重新计算Build ID?检查它是否没有损坏等
在内存分配报告中julia --track-allocation=user,最大分配是在这个函数中:
- function fuzzy_dot_square( v::Array{Int64, 1} )
- dot_prod = zero(Int64)
7063056168 for i::Int64 in 2:28
0 dot_prod += v[i]*(v[i] + v[i-1] + v[i+1] + v[i+28])# / 4 # no "top" pixel
- end
0 for i in 29:(28*27) # compiler should literate 28*27
0 dot_prod += v[i]*(v[i] + v[i-1] + v[i+1] + v[i-28] + v[i+28])# / 5 # all pixels
- end
0 for i in (28*27):(28*28 - 1)
0 dot_prod += v[i]*(v[i] + v[i-1] + …Run Code Online (Sandbox Code Playgroud) 我想尝试扩展一些Lisp(Scheme,Racket,Clojure,any)来运行外部命令,如下所示:
; having
(define foo ...)
(define bar ...)
; on command
(ls (foo bar) baz)
; this lisp should evaluate (foo bar) as usual, with result "foobar", then
(ls foobar baz)
; here "ls" is not defined
; instead of rising "undefined identifier" exception
; it must look for "ls" command in the directories
; in the "PATH" environment variable
; and launch the first found "ls" command
; with strings "foobar" and "baz" on input
Run Code Online (Sandbox Code Playgroud)
我只想运行它,无需从lisp的数据结构到字符串或处理退出代码和命令输出的正确转换stdout/stderr. …
根据文档 dir列出的只有"公共"变量.实际上,它并没有显示出来,并且可能在当前命名空间中不可用:
user=> (dir user)
nil
user=>
user=>
user=> (in-ns 'foo)
#<Namespace foo>
foo=>
foo=>
foo=> (dir foo)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: dir in this context, compiling:(NO_SOURCE_PATH:17)
Run Code Online (Sandbox Code Playgroud)
还存在哪些其他(非公开)类型的名称/变量?(这些可能是Java类型?)如何列出这些非公开名称?它们如何在启动时导入命名空间(或某些"默认情况"命名空间)?如何在运行时搜索默认名称空间?
例如,在Python中:dir()列出当前命名空间中的所有内容,如果未找到引用的变量,则在其中进行检查dir(__builtins__).
python ×4
julia ×2
argparse ×1
bash ×1
clojure ×1
common-lisp ×1
ctypes ×1
dll ×1
dsl ×1
elf ×1
eval ×1
function ×1
heap-memory ×1
hidden ×1
linker ×1
linux ×1
lisp ×1
methods ×1
namespaces ×1
overriding ×1
performance ×1
pyroot ×1
pythonpath ×1
r ×1
racket ×1