我正在对各种模块进行一些解析和内省,但我不想解析内置模块.现在,内置模块没有特殊类型,就像有一个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__
,但有没有更坚实的方法来确定模块是否内置?
基于这个答案,我了解了一类可以从R访问的特殊内部函数:通过访问的一组函数.Internal(specialFunction)
.如果有人查询,?.Internal
可能会发现以下摘录:
只有真正的R向导才应该考虑使用此函数,只有R开发人员才能添加到内部函数列表中.
我想为我的OWL有趣的R功能掌握魔药和防御暗黑艺术.R向导在哪里可以找到内部函数的列表和描述? 只要它不涉及分裂我的灵魂.
我在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
?
简短版本:如果s
是字符串,则s = s + \'c\'
可以就地修改字符串,但t = s + \'c\'
不能。但是操作如何s + \'c\'
知道它处于哪种场景呢?
长版:
\nt = s + \'c\'
需要创建一个单独的字符串,因为程序随后需要旧字符串 ass
和新字符串 as t
。
s = s + \'c\'
如果是唯一的引用,则可以就地修改字符串s
,因为程序只想s
成为扩展字符串。如果末尾有多余字符的空间,CPython 实际上会执行此优化。
考虑这些重复添加字符的函数:
\ndef 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) 我想知道弱引用是如何在内部工作的,例如在.NET或Java中.我的两个一般想法是:
这些解决方案中的任何一个看起来既干净又效 有谁知道它是如何实际完成的?
在昨天的一个问题中,在评论中,我开始知道在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__
在其他属性为只读时可写?
所以我一直在玩django一点,我真的喜欢这个框架.但是,我想更好地了解它是如何"在幕后"实际运作的.
这是我目前对client-server-django世界的看法,这是非常粗糙的,可能会让你的脚趾甲卷曲(对不起)......
好的,那么你问我的问题到底是什么?嗯,这一切是如何工作的,真的吗?我并不指望你用勺子喂我所有的东西......我怀疑答案最终将是"阅读源,卢克",但是,如果我感激不尽,
非常感谢保罗
有几个像ncurses这样的库可以帮助制作命令行GUI.
简单地说,它们是如何工作的?
我的第一个想法是ncurses拦截所有键盘输入,并通过逐行输出来绘制每个"帧".然而,仔细检查发现每个新框架都会覆盖前一个框架.它如何修改已经输出的行?此外,它如何处理颜色?
编辑:同样的问题适用于任何具有"花哨"界面的东西,比如vim
和emacs
.
我在某个时候遇到过这个 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) 我想查看R match.call
函数的源代码.由于它是一个内部函数,我下载了R源代码,转到./src/main/names.c并寻找match.call
那里.
因此,我发现调用了相应的.c函数do_matchcall
.好的,但是如何找出./src/main/中的几十个.c文件中包含哪些功能do_matchcall
?
顺便说一句,我正在使用Windows机器,以防万一.