小编mgi*_*son的帖子

无法将类型为"System.DBNull"的对象强制转换为"System.String"

我的应用程序中出现上述错误.这是原始代码

public string GetCustomerNumber(Guid id)
{
     string accountNumber = 
          (string)DBSqlHelperFactory.ExecuteScalar(connectionStringSplendidmyApp, 
                          CommandType.StoredProcedure, 
                          "GetCustomerNumber", 
                          new SqlParameter("@id", id));
     return accountNumber.ToString();
 }
Run Code Online (Sandbox Code Playgroud)

我替换了

public string GetCustomerNumber(Guid id)
{
   object accountNumber =  
          (object)DBSqlHelperFactory.ExecuteScalar(connectionStringSplendidCRM, 
                                CommandType.StoredProcedure, 
                                "spx_GetCustomerNumber", 
                                new SqlParameter("@id", id));
    if (accountNumber is System.DBNull)
    {
       return string.Empty;
    }
    else
    {
       return accountNumber.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

这有更好的方法吗?

c# database asp.net null

99
推荐指数
4
解决办法
18万
查看次数

gnuplot里面的循环结构?

有没有办法迭代检索多个文件中的数据,并将它们绘制在gnuplot中的相同图形上.假设我有像data1.txt,data2.txt ...... data1000.txt这样的文件; 每个都有相同的列数.现在我可以写一些像 -

plot "data1.txt" using 1:2 title "Flow 1", \
     "data2.txt" using 1:2 title "Flow 2", \
      .
      .
      .
     "data1000.txt"  using 1:2 title "Flow 6"
Run Code Online (Sandbox Code Playgroud)

但这真的很不方便.我想知道是否有办法循环通过gnuplot中的情节部分.

gnuplot

76
推荐指数
4
解决办法
11万
查看次数

在Vim中自动包装长Git提交消息

使用Git,我的提交编辑是Vim.我一直在做一个很难记住包裹线的工作,所以我得到了很长的路线(例如,参见这个答案).有没有办法使用一些git config.vimrc魔法,我可以让Vim自动包裹72列的行?

相关问题.

git vim commit-message word-wrap

60
推荐指数
4
解决办法
2万
查看次数

使用*args,**kwargs和optional/default参数调用Python函数

在python中,我可以定义一个函数如下:

def func(kw1=None,kw2=None,**kwargs):
   ...
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我可以调用func作为:

func(kw1=3,kw2=4,who_knows_if_this_will_be_used=7,more_kwargs=Ellipsis)
Run Code Online (Sandbox Code Playgroud)

我也可以定义一个函数:

def func(arg1,arg2,*args):
    ...
Run Code Online (Sandbox Code Playgroud)

可称为

func(3,4,additional,arguments,go,here,Ellipsis)
Run Code Online (Sandbox Code Playgroud)

最后,我可以将两种形式结合起来

def func(arg1,arg2,*args,**kwargs):
    ...
Run Code Online (Sandbox Code Playgroud)

但是,什么是行不通的是:

func(arg1,arg2,*args,kw1=None,kw2=None,**kwargs):  #SYNTAX ERROR (in python 2 only,  apparently this works in python 3)
    ...
Run Code Online (Sandbox Code Playgroud)

我最初的想法是,这可能是因为一个功能

def func(arg1,arg2,*args,kw1=None):
    ...
Run Code Online (Sandbox Code Playgroud)

可以称为

func(1,2,3) #kw1 will be assigned 3
Run Code Online (Sandbox Code Playgroud)

因此,这将引入一些含糊不清的关于3是否应该打包成args或kwargs.但是,使用python 3,可以指定仅关键字参数:

def func(a,b,*,kw=None):  #can be called as func(1,2), func(1,2,kw=3), but NOT func(1,2,3)
   ...
Run Code Online (Sandbox Code Playgroud)

有了这个,似乎没有语法模糊:

def func(a,b,*args,*,kw1=None,**kwargs):
    ...
Run Code Online (Sandbox Code Playgroud)

但是,这仍然会导致语法错误(使用Python3.2测试).这是否有理由让我失踪?并且,有没有办法获得我上面描述的行为(使用默认参数*args) - 我知道我可以通过操作函数内部的kwargs字典来模拟该行为.

python syntax kwargs python-3.x

59
推荐指数
3
解决办法
3万
查看次数

为什么从列表中创建列表会使其更大?

我在使用sys.getsizeof相同的列表时看到了一些不一致的地方.(Python 2.7.5)

>>> lst = [0,1,2,3,4,5,6,7,8,9]
>>> sys.getsizeof(lst)
76
>>> lst2 = list(lst)
>>> sys.getsizeof(lst2)
104
>>> lst3 = list(lst2)
>>> sys.getsizeof(lst3)
104
>>> sys.getsizeof(lst[:])
76
>>> sys.getsizeof(lst2[:])
76
Run Code Online (Sandbox Code Playgroud)

有人有简单的解释吗?

python list python-internals

50
推荐指数
2
解决办法
1570
查看次数

使用NumPy的数据类型的大小

在NumPy中,我可以通过以下方式获取特定数据类型的大小(以字节为单位):

datatype(...).itemsize
Run Code Online (Sandbox Code Playgroud)

要么:

datatype(...).nbytes
Run Code Online (Sandbox Code Playgroud)

例如:

np.float32(5).itemsize #4
np.float32(5).nbytes   #4
Run Code Online (Sandbox Code Playgroud)

我有两个问题.首先,有没有办法在不创建数据类型实例的情况下获取此信息?第二,itemsize和之间的区别是nbytes什么?

python numpy

40
推荐指数
2
解决办法
3万
查看次数

有没有办法检查NumPy阵列是否共享相同的数据?

我的印象是,在NumPy中,两个阵列可以共享相同的内存.请看以下示例:

import numpy as np
a=np.arange(27)
b=a.reshape((3,3,3))
a[0]=5000
print (b[0,0,0]) #5000

#Some tests:
a.data is b.data #False
a.data == b.data #True

c=np.arange(27)
c[0]=5000
a.data == c.data #True ( Same data, not same memory storage ), False positive
Run Code Online (Sandbox Code Playgroud)

所以显然b没有复制a; 它只是创建了一些新的元数据并将其附加到a正在使用的相同内存缓冲区中.有没有办法检查两个数组是否引用相同的内存缓冲区?

我的第一印象是使用a.data is b.data,但返回false.我能做的a.data == b.data,返回真,但我不认为检查,以确保ab共享相同的内存缓冲区,只有内存块被引用a和引用的一个b具有相同的字节.

python numpy

38
推荐指数
4
解决办法
7440
查看次数

列出索引效率(python 2 vs python 3)

在回答另一个问题时,我建议用来timeit测试索引带有正整数和负整数的列表之间的区别.这是代码:

import timeit
t=timeit.timeit('mylist[99]',setup='mylist=list(range(100))',number=10000000)
print (t)
t=timeit.timeit('mylist[-1]',setup='mylist=list(range(100))',number=10000000)
print (t)
Run Code Online (Sandbox Code Playgroud)

我用python 2.6运行了这段代码:

$ python2.6 test.py
0.587687015533
0.586369991302
Run Code Online (Sandbox Code Playgroud)

然后我用python 3.2运行它:

$ python3.2 test.py
0.9212150573730469
1.0225799083709717
Run Code Online (Sandbox Code Playgroud)

然后我挠了挠头,做了一些谷歌搜索,并决定在这里发布这些观察结果.

操作系统:OS-X(10.5.8) - Intel Core2Duo

这对我来说似乎是一个非常显着的差异(差异超过1.5).有没有人知道为什么python3这么慢 - 特别是对于这样一个常见的操作?

编辑

我在我的Ubuntu Linux桌面(Intel i7)上运行相同的代码,并使用python2.6和python 3.2获得了可比较的结果.这似乎是一个依赖于操作系统(或处理器)的问题(其他用户在Linux机器上看到相同的行为 - 请参阅注释).

编辑2

在其中一个答案中请求了启动横幅,所以这里是:

Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Run Code Online (Sandbox Code Playgroud)

和:

Python 3.2 (r32:88452, Feb 20 2011, 10:19:59) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Run Code Online (Sandbox Code Playgroud)

UPDATE

我刚从http://www.python.org/download/安装了新版本的python2.7.3和python3.2.3

在这两种情况下,我都拿了 …

python indexing performance osx-leopard

27
推荐指数
1
解决办法
1946
查看次数

ascii字符串与二进制文件的"grep"偏移量

我正在生成二进制数据文件,这些文件只是连接在一起的一系列记录.每条记录包含一个(二进制)标题,后跟二进制数据.在二进制头内是一个长度为80个字符的ascii字符串.在某个地方,我编写文件的过程有点搞砸了,我试图通过检查每条记录的实际长度来调试这个问题.

似乎非常相关,但我不理解perl,所以我无法在那里得到公认的答案.bgrep我编译的其他答案指向,但它希望我提供一个十六进制字符串,我宁愿只有一个工具,我可以给它ascii字符串,它会在二进制数据中找到它,打印字符串和找到它的字节偏移量.

换句话说,我正在寻找一些像这样的工具:

tool foobar filename
Run Code Online (Sandbox Code Playgroud)

要么

tool foobar < filename
Run Code Online (Sandbox Code Playgroud)

它的输出是这样的:

foobar:10
foobar:410
foobar:810
foobar:1210
...
Run Code Online (Sandbox Code Playgroud)

例如匹配的字符串和匹配开始的文件中的字节偏移量.在这个示例中,我可以推断每条记录的长度为400字节.

其他限制:

  • 通过正则表达式搜索的能力很酷,但我不需要它来解决这个问题
  • 我的二进制文件很大(3.5Gb),所以我想尽可能避免将整个文件读入内存.

linux binary bash grep ascii

27
推荐指数
2
解决办法
2万
查看次数

如何匹配Python原始字符串中的新行字符

我对Python原始字符串有点困惑.我知道如果我们使用原始字符串,那么它会将'\'视为正常的反斜杠(例如r'\n'将是'\'和'n').但是,我想知道如果我想匹配原始字符串中的新行字符.我试过r'\n',但它不起作用.有人对此有一些好主意吗?

python regex rawstring

27
推荐指数
2
解决办法
7万
查看次数