小编con*_*use的帖子

如何在C中检查变量是否属于某种类型(比较两种类型)?

在C(不是C++/C#)中,如何检查变量是否属于某种类型?

例如,像这样:

double doubleVar;
if( typeof(doubleVar) == double ) {
    printf("doubleVar is of type double!");
}
Run Code Online (Sandbox Code Playgroud)

或者更一般:我如何比较两种类型,以便compare(double1,double2)评估为true,compare(int,double)并将评估为false.我还想比较不同构图的结构.

基本上,我有一个函数,它对"struct a"和"struct b"类型的变量进行操作.我想用"struct a"变量做一件事,用"struct b"变量做另一件事.由于C不支持重载并且void指针丢失其类型信息,我需要检查类型.顺便说一句,typeof如果你不能比较类型,那么拥有一个算子会有什么意义呢?


对于我来说,sizeof方法似乎是一个实用的解决方案.谢谢你的帮助.我仍然觉得它有点奇怪,因为类型在编译时是已知的,但是如果我想象机器中的进程我可以看到,为什么信息不是按类型存储,而是按字节大小存储.除了地址之外,大小是唯一真正相关的东西.

c struct types

55
推荐指数
7
解决办法
14万
查看次数

bash中两个字符串的最长公共前缀

我有两个字符串.为了示例,它们设置如下:

string1="test toast"
string2="test test"
Run Code Online (Sandbox Code Playgroud)

我想要的是从字符串的开头找到重叠.对于重叠,我的意思是上面例子中的字符串"test t".

# So I look for the command 
command "$string1" "$string2"
# that outputs:
"test t"
Run Code Online (Sandbox Code Playgroud)

如果字符串是,string1="atest toast"; string2="test test"它们将没有重叠,因为检查从开头开始,而"a"在开头string1.

bash string-formatting

30
推荐指数
7
解决办法
7566
查看次数

bash:如何从变量创建函数?

如何创建一个从内容变量命名的函数?我想编写一个模板脚本,用于定义以脚本自己的文件名命名的函数.像这样的东西(当然不起作用):

#!/bin/bash
bname="$(basename $0)" # filename of the script itself

someprefix_${bname}() { # function's name created from $bname variable
    echo test
}
Run Code Online (Sandbox Code Playgroud)

因此,如果脚本的文件名是foo.sh,那么它应该定义一个名为someprefix_fooecho test 的函数.

bash function

20
推荐指数
2
解决办法
6558
查看次数

Python AppIndicator绑定 - >如何检查菜单是否打开?

以下是AppIndicator的最小示例:

#!/usr/bin/python

import gobject
import gtk
import appindicator

if __name__ == "__main__":
    ind = appindicator.Indicator("example-simple-client", "gtk-execute", appindicator.CATEGORY_APPLICATION_STATUS)
    ind.set_status (appindicator.STATUS_ACTIVE)
    menu = gtk.Menu()
    menu_items = gtk.MenuItem('Quit')
    menu.append(menu_items)
    menu_items.connect("activate", gtk.main_quit)
    menu_items.show()
    ind.set_menu(menu)
    gtk.main()
Run Code Online (Sandbox Code Playgroud)

不幸的是,关于此的文档非常不完整.我正在寻找的是一种检查AppIndicator菜单是否由用户打开的方法(例如,点击了指示器图标).那么当菜单打开时会发出一个信号吗?

python pygtk appindicator ubuntu-unity

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

Gnuplot在多项式拟合中表现奇怪.这是为什么?

我的一个朋友在gnuplot中发现了一些关于简单多项式拟合的奇怪行为Can sombody可以解释一下吗?

这是文件:

#!/usr/bin/gnuplot -p

f(x) = B*(x**4) + A
fit f(x) "data.txt" using ($1+273.14):2 via A, B

plot    "data.txt" using ($1+273.14):2 notitle,\
        f(x) notitle
Run Code Online (Sandbox Code Playgroud)

数据是:

# content of data.txt
350 3.856
330 3.242
290 2.391
250 1.713
210 1.181
170 0.763
130 0.437
Run Code Online (Sandbox Code Playgroud)

得到的图是绿线.蓝线显示使用基本相同形式的另一个功能更好的拟合.对于绿线A,用常数值代替(A = 0.2123,约为B*300 ^ 4)

奇拟合行为gnuplot

所以绿线显然不是最合适的,因为f(x) = B*(x**4) - 0.2123产量更好,结果也是B*x 4 + A的形式.在绿色拟合中,参数**A被gnuplot忽略,并且通过拟合算法保持不变.为A和B设置不同的初始值似乎没有多大帮助 - A的值永远不会因其初始值而改变.我的朋友和我正在使用Ubuntu附带的标准Gnuplot版本:gnuplot 4.4 patchlevel 3.

gnuplot

10
推荐指数
2
解决办法
5887
查看次数

如何在python中优雅地记录多个非常相似的事件?

使用pythons logging模块,有没有办法将多个事件收集到一个日志条目中?一个理想的解决方案是扩展python的logging模块或自定义格式化程序/过滤器,因此收集相同类型的日志记录事件在后台发生,并且不需要在代码体中添加任何内容(例如,在每次调用日志记录函数时).

这是一个生成大量相同或非常相似的日志记录事件的示例:

import logging

for i in range(99999): 
    try:
        asdf[i]   # not defined!
    except NameError:
        logging.exception('foo') # generates large number of logging events
    else: pass

# ... more code with more logging ...

for i in range(88888): logging.info('more of the same %d' % i)

# ... and so on ...
Run Code Online (Sandbox Code Playgroud)

所以我们有相同的例外99999次并记录它.如果日志只是说:

ERROR:root:foo (occured 99999 times)
Traceback (most recent call last):
  File "./exceptionlogging.py", line 10, …
Run Code Online (Sandbox Code Playgroud)

python logging exception

10
推荐指数
2
解决办法
1204
查看次数

找到四次方程的正实解的专门算法?

我正在寻找一种专门的算法来找到具有实系数的四次方程的正实解(也称为4阶的二次方程或多项式方程).他们有以下形式:

a 4 x 4 + a 3 x 3 + a 2 x 2 + a 1 x + a 0 = 0

一个1,一个2,......是实数.

它应该在微控制器上运行,这需要进行大量的计算.因此,性能是一个问题.这就是为什么我正在寻找一种专门用于正解的算法.如果可能的话,我希望它能够计算出确切的解决方案.

我知道有一种通用的方法来计算四次方程的解,但它涉及计算方面.

有人能指出我正确的方向吗?

编辑:

从答案来看:有些人似乎误解了我(虽然我很清楚).我知道解决四次方程的标准方法.他们不是为我做的 - 他们既不适合记忆,也不适合他们.我需要的是一种高精度的高效算法,只能找到具有实系数的四次方程的真实解(如果有帮助).我不确定是否有这样的算法,但我想你们可能都知道.PS:downvotes不是来自我.

algorithm math microcontroller

9
推荐指数
1
解决办法
2928
查看次数

如何在python中"将事后"附加到一个函数的装饰器?

我理解python中函数的装饰器(我可能错了)的方法是,它们应该添加副作用并修改函数的返回值.现在装饰器被添加到要装饰的函数的函数定义之上或通过赋值.这是一个小例子:

def print_args_decor(function):
    def wrapper(*args, **kwargs):
        print 'Arguments:', args, kwargs         # Added side-effect
        return function(*args, **kwargs)*5       # Modified return value
    return wrapper

@print_args_decor
def do_stuff(strg, n=10):
    """Repeats strg a few times."""
    return strg * n

new_decorated_func = print_args_decor(do_stuff)  # Decoration by assignment

print do_stuff('a', 2) # Output: aaaaaaaaaa
Run Code Online (Sandbox Code Playgroud)

现在,如何将装饰器附加到其他地方定义的函数,理想情况下保留原始函数的名称和文档字符串(如同functools.wraps)?例如,我sqrt()从Python的数学模块导入函数,并想要装饰它,我该怎么做呢?

from functools import wraps
from math import sqrt

def print_args_decor(function):
    @wraps(function)
    def wrapper(*args, **kwargs):
        print 'Arguments:', args, kwargs         # Added side-effect
        return function(*args, …
Run Code Online (Sandbox Code Playgroud)

python decorator python-2.7 python-decorators

9
推荐指数
1
解决办法
2581
查看次数

如何更改解释器路径并将命令行参数传递给Linux上的"可执行"共享库?

以下是"可执行"共享库的最小示例(假定文件名:)mini.c:

// Interpreter path is different on some systems
//+definitely different for 32-Bit machines

const char my_interp[] __attribute__((section(".interp"))) 
    = "/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2";

#include <stdio.h>
#include <stdlib.h>

int entry() {
    printf("WooFoo!\n");
    exit (0);
}
Run Code Online (Sandbox Code Playgroud)

如果用例如:编译它gcc -fPIC -o mini.so -shared -Wl,-e,entry mini.c."运行"结果.so将如下所示:

confus@confusion:~$ ./mini.so
WooFoo!
Run Code Online (Sandbox Code Playgroud)

我现在的问题是:
如何更改上述程序以将命令行参数传递给.so-file 的调用?更改后的示例shell会话可能如下所示:

confus@confusion:~$ ./mini.so 2 bar
1: WooFoo! bar!
2: WooFoo! bar!
confus@confusion:~$ ./mini.so 3 bla
1: WooFoo! bla!
2: WooFoo! bla!
3: WooFoo! bla!
5: WooFoo! Bar!
Run Code Online (Sandbox Code Playgroud)

在编译时检测 …

c linux linker compilation shared-libraries

8
推荐指数
1
解决办法
2170
查看次数

如何裁剪numpy数组的零边?

我有这个丑陋的,非蟒蛇式的野兽:

def crop(dat, clp=True):
    '''Crops zero-edges of an array and (optionally) clips it to [0,1].

    Example:
    >>> crop( np.array(
    ...       [[0,0,0,0,0,0],
    ...        [0,0,0,0,0,0],
    ...        [0,1,0,2,9,0],
    ...        [0,0,0,0,0,0],
    ...        [0,7,4,1,0,0],
    ...        [0,0,0,0,0,0]]
    ...     ))
    array([[1, 0, 1, 1],
           [0, 0, 0, 0],
           [1, 1, 1, 0]])
    '''
    if clp: np.clip( dat, 0, 1, out=dat )
    while np.all( dat[0,:]==0 ):
        dat = dat[1:,:]
    while np.all( dat[:,0]==0 ):
        dat = dat[:,1:]
    while np.all( dat[-1,:]==0 ):
        dat = dat[:-1,:]
    while np.all( dat[:,-1]==0 ):
        dat …
Run Code Online (Sandbox Code Playgroud)

python numpy crop

7
推荐指数
1
解决办法
3264
查看次数