IMO python 如果参数是基本类型(如数字、布尔值),则按值传递
func_a(bool_value):
bool_value = True
Run Code Online (Sandbox Code Playgroud)
不会改变外面bool_value吧?
所以我的问题是如何使更改bool_value在外部生效(通过引用传递?
我正在使用Subversion与一些由另一个应用程序管理的文件.我想重命名文件,但重命名必须在应用程序内完成,以便正确更新自己的元数据.这意味着我不能简单地使用SVN的rename命令 - 应用程序的元数据将变得不一致.
那么我怎么能告诉SVN工作副本中的文件已被这个应用程序重命名,以便它以与rename命令相同的方式保存历史记录?
我正在为PIC32MX编写C语言,使用Microchip的PIC32 C编译器(基于GCC 3.4)编译.
添加我遵循的标准是GNU99(带有GNU扩展的C99,编译器标志-std=gnu99)
我的问题是:我有一些可重新编程的数字数据存储在EEPROM或芯片的程序闪存中.这意味着当我想存储浮动时,我必须做一些类型的惩罚:
typedef union
{
int intval;
float floatval;
} IntFloat;
unsigned int float_as_int(float fval)
{
IntFloat intf;
intf.floatval = fval;
return intf.intval;
}
// Stores an int of data in whatever storage we're using
void StoreInt(unsigned int data, unsigned int address);
void StoreFPVal(float data, unsigned int address)
{
StoreInt(float_as_int(data), address);
}
Run Code Online (Sandbox Code Playgroud)
我还将默认值包含为编译时常量数组.对于(无符号)整数值,这是微不足道的,我只使用整数文字.但是对于浮点数,我必须使用这个Python片段将它们转换为它们的单词表示形式,以将它们包含在数组中:
import struct
hex(struct.unpack("I", struct.pack("f", float_value))[0])
Run Code Online (Sandbox Code Playgroud)
...所以我的默认数组有这些难以理解的值,如:
const unsigned int DEFAULTS[] =
{
0x00000001, // Some default integer value, 1
0x3C83126F, // …Run Code Online (Sandbox Code Playgroud) 下面的代码创建一个包含三个标签的列.我想采用中间标签,并在初始创建UI后使用标签中的文本将其替换为另一个小部件.
我的实际用例是使用GTKBuilder填充的UI,并在运行时用动态包装的标签替换任何特定的命名标签.(我在这里使用了一个按钮,因为它很简单但很独特.)然后我仍然可以使用Glade设置UI,包括标签,如果我以后想要制作标签包装,不要用我的Python代码加错标签和字符串.
现在的代码不起作用 - 新的按钮被添加到列的末尾,我希望它保持在中间,从那里label2开始.我能做些什么,最好是在哪里wrap_in_button,以确保它最终到达正确的位置?我宁愿保持一般,因为父母可能是一个Box或一个Table或任何将军Container.
import pygtk
import gtk
def destroy(widget, data=None):
gtk.main_quit()
def wrap_in_button(label):
text = label.get_text()
button = gtk.Button(text)
parent = label.get_parent()
if parent:
parent.remove(label)
parent.add(button)
def Main():
# Pretend that this chunk is actually replaced by GTKBuilder work
# From here...
window = gtk.Window()
window.connect('destroy', destroy)
box = gtk.VBox()
window.add(box)
label1 = gtk.Label("Label 1")
label2 = gtk.Label("Label 2")
label3 = gtk.Label("Label 3")
box.pack_start(label1) …Run Code Online (Sandbox Code Playgroud) 考虑一下这个递归函数,由我的一位同事挖掘出来:
def a():
try:
a()
except:
a()
Run Code Online (Sandbox Code Playgroud)
如果你运行它,(Python 2.7)解释器挂起.这让我感到惊讶,因为我预计一旦递归深度(比如N)被击中它就会抛出一个RuntimeError,跳到第(N-1)个except区块,得到另一个RuntimeError,跳到第(N-2)个except等等.
所以我充实了调试功能:
y = 10000
def a(x=0):
global y
if y:
y -= 1
try:
print "T: %d" % x
a(x+1)
except RuntimeError:
print "E: %d" % x
a(x+1)
Run Code Online (Sandbox Code Playgroud)
该y仅仅是有给力的功能在某些时候结束,我不认为它,否则转换功能的行为.在我的解释器中(递归限制为1000),调用a()产生如下序列:
T: 998
E: 998
E: 997
T: 998
E: 998
E: 990
T: 991
T: 992
T: 993
T: 994
T: 995
T: 996
T: 997
T: 998
E: 998 …Run Code Online (Sandbox Code Playgroud) 我想分析一些 VCS 软件,为此我想在随机排列的目录中生成一组随机文件。我正在用 Python 编写脚本,但我的问题很简单:如何生成一个随机目录树,其中每个目录的平均子目录数和每个目录的文件分布广泛?
澄清:我不是在比较不同的 VCS 存储库格式(例如 SVN 与 Git 与 Hg),而是分析处理 SVN(以及最终其他)工作副本和存储库的软件。
我想要的约束是指定文件总数(称为“N”,可能是 ~10k-100k)和目录结构的最大深度(“L”,可能是 2-10)。我不在乎每个级别生成了多少个目录,并且我不想最终每个目录生成 1 个文件,或者在一个目录中生成 100k 个文件。
分布是我不确定的,因为我不知道 VCS(特别是 SVN)在非常均匀的结构还是非常倾斜的结构下表现会更好或更差。尽管如此,如果我能想出一种算法,它不会对大数“均衡”,那就太好了。
我的第一个想法是:使用某种方法生成目录树,然后用文件统一填充树(平等对待每个目录,不考虑嵌套)。我的粗略计算告诉我,如果有“L”级,每个目录有“D”子目录,每个目录有大约 sqrt(N) 个文件,那么将有大约 D^L 目录,所以 N =~ sqrt(N)*(D^L) => D =~N^(1/2L)。所以现在我有了“D”的近似值,我如何生成树?如何填充文件?
我会很感激一些指向我可以使用的算法的好资源的指针。我的搜索只找到了漂亮的小程序/闪存。
我刚看了一个开源的.在其中,我看到一些代码,它让我不熟悉.所以这是关于结构的东西:
struct _NameStruct;
typedef struct _NameStruct NameStruct
Run Code Online (Sandbox Code Playgroud)
之后,他们(开源)使用NameStruct来包含一些变量.我想知道为什么struct _NameStruct还没有定义一些变量,所以他们如何使用它?
假设我正在调试valgrind并gdb执行:
$ valgrind --vgdb-error=0 ./magic
Run Code Online (Sandbox Code Playgroud)
......然后在第二个终端:
$ gdb ./magic
...
(gdb) target remote | /usr/lib/valgrind/../../bin/vgdb
Run Code Online (Sandbox Code Playgroud)
如果我想检查一些内存的定义,我可以使用:
(gdb) p &batman
$1 = (float *) 0xffeffe20c
(gdb) p sizeof(batman)
$2 = 4
(gdb) monitor get_vbits 0xffeffe20c 4
ffffffff
Run Code Online (Sandbox Code Playgroud)
使用三个命令做一件事有点烦人,特别是因为我通常想对同一堆栈帧中的许多不同变量做几次这样的事情.但是,如果我尝试显而易见的事情,我得到:
(gdb) monitor get_vbits &batman sizeof(batman)
missing or malformed address
Run Code Online (Sandbox Code Playgroud)
是否有可能与我的命令gdb进行评估&batman并sizeof(batman) 在同一行monitor?
我正在使用Microchip的编译器编写微控制器(dsPIC24).外围设备都是内存映射变量.偶尔有必要通过读取来清除缓冲区,我通常只做:
SPI1BUF;
Run Code Online (Sandbox Code Playgroud)
... 在Microchip的标题中SPI1BUF声明volatile char了哪里.它适用于我,但现在我很好奇:它是标准化的行为吗?我记得如果我执行任务:
unsigned char x = SPI1BUF;
Run Code Online (Sandbox Code Playgroud)
......标准说必须读取volatile变量.但对于标识符整体表达式情况,这也是如此吗?
我是C的新手,我编译这段代码时遇到问题.
#include <stdio.h>
void suma( int a, int b, int wynik)
{
wynik=0;
printf("a=\n");
scanf("%d",&a);
printf("b=\n");
scanf("%d",&b);
wynik=a+b;
printf("wynik = %d",&wynik);
}
int main()
{
suma(int a, int b, int wynik);
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么但是编译器告诉我2参数的int类型为int*insted.我不知道这是什么意思,我错了.