标签: internals

确定给定的Python模块是否是内置模块

我正在对各种模块进行一些解析和内省,但我不想解析内置模块.现在,内置模块没有特殊类型,就像有一个types.BuiltinFunctionType,所以我该怎么做?

>>> import CornedBeef
>>> CornedBeef
<module 'CornedBeef' from '/meatish/CornedBeef.pyc'>
>>> CornedBeef.__file__
'/meatish/CornedBeef.pyc'
>>> del CornedBeef.__file__
>>> CornedBeef
<module 'CornedBeef' (built-in)>
Run Code Online (Sandbox Code Playgroud)

根据Python,如果模块没有__file__属性,它显然是内置的.这是否意味着hasattr(SomeModule, '__file__')检查模块是否内置的方法是什么?当然,它并不常见del SomeModule.__file__,但有没有更坚实的方法来确定模块是否内置?

python module internals python-internals

18
推荐指数
2
解决办法
4335
查看次数

R向导的参考

基于这个答案,我了解了一类可以从R访问的特殊内部函数:通过访问的一组函数.Internal(specialFunction).如果有人查询,?.Internal可能会发现以下摘录:

只有真正的R向导才应该考虑使用此函数,只有R开发人员才能添加到内部函数列表中.

我想为我的OWL有趣的R功能掌握魔药和防御暗黑艺术.R向导在哪里可以找到内部函数的列表和描述? 只要它不涉及分裂我的灵魂.

r internals

18
推荐指数
1
解决办法
1182
查看次数

为什么Single()不会在找到多个元素时直接返回?

我在Enumerable.Single方法中发现(大致)这个代码,同时用一些反编译器检查它:

foreach (TSource current in source)
{
    if (predicate(current))
    {
        result = current;
        num += 1L;
    }
}

if (num > 1L)
{
     throw Error.MoreThanOneMatch();
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它会在投掷之前循环遍历所有项目.它为什么不打破num > 1

.net c# linq internals

18
推荐指数
1
解决办法
366
查看次数

s=s+c 字符串连接优化是如何决定的?

简短版本:如果s是字符串,则s = s + \'c\'可以就地修改字符串,但t = s + \'c\'不能。但是操作如何s + \'c\'知道它处于哪种场景呢?

\n

长版:

\n

t = s + \'c\'需要创建一个单独的字符串,因为程序随后需要旧字符串 ass和新字符串 as t

\n

s = s + \'c\'如果是唯一的引用,则可以就地修改字符串s,因为程序只想s成为扩展字符串。如果末尾有多余字符的空间,CPython 实际上会执行此优化。

\n

考虑这些重复添加字符的函数:

\n
def fast(n):\n    s = \'\'\n    for _ in range(n):\n        s = s + \'c\'\n        t = s\n        del t\n\ndef slow(n):\n    s = \'\'\n    for _ in range(n):\n        t = s …
Run Code Online (Sandbox Code Playgroud)

python performance cpython internals

18
推荐指数
1
解决办法
542
查看次数

如何实施弱参考?

我想知道弱引用是如何在内部工作的,例如在.NET或Java中.我的两个一般想法是:

  1. "侵入性" - 添加对最顶级类(对象类)的弱引用列表.然后,当一个对象被销毁时,可以迭代所有弱引用并将其设置为null.
  2. "非侵入式" - 维护对象指向弱引用列表的哈希表.当为对象B创建弱引用A时,将在哈希表中修改或创建一个条目,其键将是指向B的指针.
  3. "Dirty" - 为每个对象存储一个特殊的哈希值,当对象被销毁时,它将被归零.弱引用将复制该哈希值,并将其与对象的值进行比较,以检查对象是否处于活动状态.但是,当直接使用时,这会导致访问冲突错误,因此我需要有一个具有该哈希值的附加对象.

这些解决方案中的任何一个看起来既干净又效 有谁知道它是如何实际完成的?

.net java weak-references internals

17
推荐指数
4
解决办法
3272
查看次数

为什么函数(Python)的__code__是可变的

在昨天的一个问题中,在评论中,我开始知道在python __code__函数中的atrribute是可变的.因此我可以编写如下代码

def foo():
    print "Hello"

def foo2():
    print "Hello 2"

foo()
foo.__code__ = foo2.__code__
foo()
Run Code Online (Sandbox Code Playgroud)

产量

Hello
Hello 2
Run Code Online (Sandbox Code Playgroud)

我试过谷歌搜索,但要么因为没有信息(我非常怀疑这一点),或者关键字(__code__)不容易搜索,我找不到一个用例.

它似乎不是"因为Python中的大多数东西都是可变的"也是一个合理的答案,因为函数的其他属性 - __closure____globals__- 是显式只读的(来自Objects/funcobject.c):

static PyMemberDef func_memberlist[] = {
    {"__closure__",   T_OBJECT,     OFF(func_closure),
     RESTRICTED|READONLY},
    {"__doc__",       T_OBJECT,     OFF(func_doc), PY_WRITE_RESTRICTED},
    {"__globals__",   T_OBJECT,     OFF(func_globals),
     RESTRICTED|READONLY},
    {"__module__",    T_OBJECT,     OFF(func_module), PY_WRITE_RESTRICTED},
    {NULL}  /* Sentinel */
};
Run Code Online (Sandbox Code Playgroud)

为什么__code__在其他属性为只读时可写?

python internals python-internals

16
推荐指数
1
解决办法
1478
查看次数

我怎样才能最好地了解django如何在内部工作?

所以我一直在玩django一点,我真的喜欢这个框架.但是,我想更好地了解它是如何"在幕后"实际运作的.

这是我目前对client-server-django世界的看法,这是非常粗糙的,可能会让你的脚趾甲卷曲(对不起)......

  1. 浏览器向服务器发送Http请求.
  2. 服务器发挥其魔力并通过CGI将请求转储到django(?)
  3. django的某些部分(?)接收请求并将其转换为django请求对象.
  4. 请求对象在通过中间件的一些模糊路径上漫游,中间件用它做奇怪的事情.
  5. 请求对象最终以某个函数(哪个?)结束,该函数查看url,从urls.py中取出模式并调用视图函数.
  6. 视图函数发挥其魔力(模型和模板作为合作伙伴),这可能是我最强烈的理解错觉(好吧,除了数据库抽象魔法,就是......;)
  7. 视图函数返回一个HttpResponse对象,我想这是在CGI的一些模糊路径上返回的.
  8. Webserver再次接管并将Http响应发送给客户端.

好的,那么你问我的问题到底是什么?嗯,这一切是如何工作的,真的吗?我并不指望你用勺子喂我所有的东西......我怀疑答案最终将是"阅读源,卢克",但是,如果我感激不尽,

  1. 你可以清理我的错误观念
  2. 告诉我从哪里开始?我想做的是抓住一个调试器并且只是完成这个过程几次,但我真的不知道从哪里开始
  3. 你可以指出我能解释这个问题的任何文件......是的,我听说过谷歌的这个东西但是没有真正找到任何超级有用的东西.

非常感谢保罗

django webserver cgi internals

15
推荐指数
2
解决办法
4330
查看次数

怎么做ncurses等.人.工作?

有几个像ncurses这样的库可以帮助制作命令行GUI.

简单地说,它们是如何工作的?

我的第一个想法是ncurses拦截所有键盘输入,并通过逐行输出来绘制每个"帧".然而,仔细检查发现每个新框架都会覆盖前一个框架.它如何修改已经输出的行?此外,它如何处理颜色?

编辑:同样的问题适用于任何具有"花哨"界面的东西,比如vimemacs.

user-interface command-line internals ncurses

15
推荐指数
2
解决办法
3861
查看次数

为什么在ruby2.0中object_id为true和nil?

我在某个时候遇到过这个 ruby object_id分配问题,然后阅读了这篇讨论VALUE的精彩文章,并解释了为什么object_id为true,nil和false的方式.当我发现有关object_id为true和nil的明显变化时,我一直在使用ruby2.0 object_id.

forbidden:~$ ruby -v
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]
forbidden:~$
forbidden:~$ irb
irb(main):001:0> true.object_id
=> 20
irb(main):002:0> false.object_id
=> 0
irb(main):003:0> nil.object_id
=> 8
irb(main):004:0> exit
forbidden:~$
forbidden:~$ rvm use 1.9.3
Using /home/forbidden/.rvm/gems/ruby-1.9.3-p392
forbidden:~$ ruby -v
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]
forbidden:~$
forbidden:~$ irb
irb(main):001:0> true.object_id
=> 2
irb(main):002:0> false.object_id
=> 0
irb(main):003:0> nil.object_id
=> 4
Run Code Online (Sandbox Code Playgroud)

tl; dr: true和nil的值在1.9.3和1.8.7中分别为2,4,但在ruby2.0.0中已经更改为20,8,即使id为false仍然相同,即0和Fixnum的ID保持相同的旧2n + 1模式.

此外,Fixnum和Bignum的实现方式在2.0.0中仍然相同,因为上面提到的文章中给出的示例运行方式与以前相同:

irb(main):001:0> 
irb(main):002:0* ((2**62)).class
=> Bignum
irb(main):003:0> ((2**62)-1).class
=> …
Run Code Online (Sandbox Code Playgroud)

ruby internals objectid ruby-2.0

15
推荐指数
1
解决办法
1348
查看次数

如何在Windows上找出哪个.c文件包含R内部的.c功能?

我想查看R match.call函数的源代码.由于它是一个内部函数,我下载了R源代码,转到./src/main/names.c并寻找match.call那里.

因此,我发现调用了相应的.c函数do_matchcall.好的,但是如何找出./src/main/中的几十个.c文件中包含哪些功能do_matchcall

顺便说一句,我正在使用Windows机器,以防万一.

windows r function internals

14
推荐指数
3
解决办法
721
查看次数