小编Kev*_*ase的帖子

"strlen(s1) - strlen(s2)"永远不会小于零

我目前正在编写一个需要频繁比较字符串长度的C程序,所以我编写了以下辅助函数:

int strlonger(char *s1, char *s2) {
    return strlen(s1) - strlen(s2) > 0;
}
Run Code Online (Sandbox Code Playgroud)

我注意到,即使s1长度比短,函数返回true s2.有人可以解释这种奇怪的行为吗?

c string debugging unsigned

76
推荐指数
2
解决办法
3543
查看次数

为什么在参数列表中使用*args语法的尾随逗号是SyntaxError?

为什么你不能*args在Python中使用尾随逗号?换句话说,这是有效的

>>> f(1, 2, b=4,)
Run Code Online (Sandbox Code Playgroud)

但事实并非如此

>>> f(*(1, 2), b=4,)
  File "<stdin>", line 1
    f(*(1, 2), b=4,)
                   ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

Python 2和Python 3都是这种情况.

python syntax python-internals

69
推荐指数
2
解决办法
3063
查看次数

正则表达式挂起程序(100%CPU使用率)

当我使用下面的字符串作为正则表达式的输入时,Java挂起了100%的CPU使用率.

使用RegEx:

这是我的应用程序中描述字段使用的正则表达式.

^([A-Za-z0-9\\-\\_\\.\\&\\,]+[\\s]*)+
Run Code Online (Sandbox Code Playgroud)

用于测试的字符串:

来自Provider_One的SaaS服务VLAN
第二次尝试使用Didier SPT,因为他给我的第一个是错的:-(

当我以不同的组合分割相同的字符串时,它可以正常工作.就像"来自Provider_One的SaaS服务VLAN","他给我的第一个是错误的:-("等等.Java仅挂起以上给定的字符串.

我也试过优化正则表达式如下.

^([\\w\\-\\.\\&\\,]+[\\s]*)+
Run Code Online (Sandbox Code Playgroud)

即使这样也行不通.

java regex

26
推荐指数
2
解决办法
4925
查看次数

Collection根据Collection的内容抛出或不抛出ConcurrentModificationException

以下Java代码ConcurrentModificationException按预期抛出:

public class Evil
{
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<String>();
        c.add("lalala");
        c.add("sososo");
        c.add("ahaaha");
        removeLalala(c);
        System.err.println(c);
    }
    private static void removeLalala(Collection<String> c) 
    {
        for (Iterator<String> i = c.iterator(); i.hasNext();) {
            String s = i.next();
            if(s.equals("lalala")) {
                c.remove(s);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是下面的示例(仅在内容中有所不同)Collection执行时没有任何异常:

public class Evil {
    public static void main(String[] args) 
    {
        Collection<String> c = new ArrayList<String>();
        c.add("lalala");
        c.add("lalala");
        removeLalala(c);
        System.err.println(c);
    }
    private static void removeLalala(Collection<String> c) {
        for (Iterator<String> i …
Run Code Online (Sandbox Code Playgroud)

java concurrentmodification

17
推荐指数
1
解决办法
1050
查看次数

其他NaN值有哪些?

对文件java.lang.Double.NaN说,这是

保持类型的非数字(NaN)值的常量double.它相当于返回的值Double.longBitsToDouble(0x7ff8000000000000L).

这似乎暗示还有其他人.如果是这样,我如何抓住它们,这可以移植吗?

需要明确的是,我想找到的doublex,使得

Double.doubleToRawLongBits(x) != Double.doubleToRawLongBits(Double.NaN)
Run Code Online (Sandbox Code Playgroud)

Double.isNaN(x)
Run Code Online (Sandbox Code Playgroud)

都是真的.

java floating-point nan ieee-754

9
推荐指数
2
解决办法
2568
查看次数

size_t(SIZE_MAX)的最大值是否相对于其他整数类型定义?

我正在编写一个函数库,可以安全地在各种数字类型之间进行转换或者尝试.我的意图大致相当于创建有用库和学习C边缘案例.

int-到- size_t功能引发了GCC -Wtype-limits,声称我不应该测试,如果一个警告int是大于SIZE_MAX,因为它永远不会是真实的.(另一个转换intssize_t生成相同警告的函数SSIZE_MAX.)

我的MCVE,有额外的评论和婴儿步骤,是:

#include <stdint.h>  /* SIZE_MAX */
#include <stdlib.h>  /* exit EXIT_FAILURE size_t */

extern size_t i2st(int value) {
    if (value < 0) {
        exit(EXIT_FAILURE);
    }
    // Safe to cast --- not too small.
    unsigned int const u_value = (unsigned int) value;
    if (u_value > SIZE_MAX) {  /* Line 10 */
        exit(EXIT_FAILURE);
    }
    // Safe to cast --- not too big.
    return (size_t) …
Run Code Online (Sandbox Code Playgroud)

c types integer limit

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

使用joblib仅缓存类的某些方法的正确方法

我正在编写一个类,它有一些计算量很大的方法和一些用户希望迭代调整并且与计算无关的参数.

实际用途是用于可视化,但这是一个卡通示例:

class MyClass(object):

    def __init__(self, x, name, mem=None):

        self.x = x
        self.name = name
        if mem is not None:
            self.square = mem.cache(self.square)

    def square(self, x):
        """This is the 'computation heavy' method."""
        return x ** 2

    def report(self):
        """Use the results of the computation and a tweakable parameter."""
        print "Here you go, %s" % self.name
        return self.square(self.x)
Run Code Online (Sandbox Code Playgroud)

基本思想是用户可能希望使用相同x但不同的name参数创建此类的许多实例.我想允许用户提供一个joblib.Memory将缓存计算部分的对象,这样他们就可以"报告"许多不同的名称,而无需每次重新计算平方数组.

(我知道这有点奇怪.用户需要为每个名称设置不同的类实例的原因是他们实际上正在与看起来像这样的接口函数进行交互.

def myfunc(x, name, mem=None):
    theclass = MyClass(x, name, mem)
    theclass.report()
Run Code Online (Sandbox Code Playgroud)

但是现在让我们忽略它.


joblib文档之后,我square …

python memoization joblib

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

如何确定创建闭包的函数?

Python 2.7中的这段代码创建了一个闭包func,包含par变量:

def creator(par):
    def func(arg):
        return par + arg
    return func
Run Code Online (Sandbox Code Playgroud)

它可以像这样使用:

f = creator(7)
f(3)               # returns 10
Run Code Online (Sandbox Code Playgroud)

在运行时,有没有办法获取定义闭包的函数的名称?那就是:只能访问f变量,我能获得fcreator函数内定义闭包的信息吗?

我使用的是Python 2.7.

python closures python-2.x

6
推荐指数
1
解决办法
90
查看次数

如何打印链接列表的元素?

我今天在python上进行Node练习。我似乎已经完成了其中的一部分,但这并不是完全的成功。

class Node:
    def __init__(self, cargo=None, next=None):
        self.cargo = cargo
        self.next  = next

    def __str__(self):
        return str(self.cargo)

node1 = Node(1)
node2 = Node(2)
node3 = Node(3)

node1.next = node2
node2.next = node3

def printList(node):
  while node:
    print node,
    node = node.next
  print
Run Code Online (Sandbox Code Playgroud)

所以这是原始的__init____str__并且printList,这使得类似:1 2 3

我必须转变1 2 3[1,2,3]

append在创建的列表上使用过:

nodelist = []

node1.next = node2
node2.next = node3


def printList(node):
    while node:
        nodelist.append(str(node)), 
        node = node.next …
Run Code Online (Sandbox Code Playgroud)

python

5
推荐指数
1
解决办法
4810
查看次数

如何使 ConfigParser 返回默认值而不是引发 NoOptionError?

我有一个配置文件,其中定义了一些选项。有时,如果找不到请求的选项,我想忽略错误并返回None

setting.cfg

[Set]
ip=some_ip
verify=yes     #if verify does not exist here --> verify=None
Run Code Online (Sandbox Code Playgroud)

test.py

import sys
import ConfigParser

file="setting.cfg"

class ReadFile:
   def read_cfg_file(self):
      configParser = ConfigParser.RawConfigParser(allow_no_value=True)
      if os.path.isfile(file):
          configParser.read(file)
      else:
          sys.exit(1)
      try:
          verify = configParser.get('Set', 'verify')
      except ConfigParser.NoOptionError:
          pass

      return verify,and,lots,of,other,values
Run Code Online (Sandbox Code Playgroud)

如果我这样处理它,我将无法返回值,因为如果'verify'找不到该选项,它就会简单地传递。

如果找不到选项,有什么方法可以忽略错误,而是返回None

例如,这样的事情:

verify = configParser.get('Set', 'verify')
if not verify:
    verify=False
Run Code Online (Sandbox Code Playgroud)

python exception configparser python-2.7

5
推荐指数
2
解决办法
7582
查看次数