小编Dra*_*mon的帖子

在python中处理list.index(可能不存在)的最佳方法?

我的代码看起来像这样:

thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
Run Code Online (Sandbox Code Playgroud)

好的,这样简化但你明白了.现在thing可能实际上不在列表中,在这种情况下我想传递-1作为thing_index.在其他语言中index(),如果找不到元素,这是您期望返回的内容.事实上,它抛出了一个ValueError.

我能做到这一点:

try:
    thing_index = thing_list.index(thing)
except ValueError:
    thing_index = -1
otherfunction(thing_list, thing_index)
Run Code Online (Sandbox Code Playgroud)

但这感觉很脏,而且我不知道是否ValueError可以因为其他原因而被提出.我想出了基于生成器函数的以下解决方案,但它看起来有点复杂:

thing_index = ( [(i for i in xrange(len(thing_list)) if thing_list[i]==thing)] or [-1] )[0]
Run Code Online (Sandbox Code Playgroud)

是否有更清洁的方法来实现同样的目标?我们假设列表没有排序.

python indexing list find

96
推荐指数
7
解决办法
8万
查看次数

从Java中的方法返回状态标志和消息的最佳方法

我有一个看似简单的场景,我想要一个简单的解决方案,但是哪个是"最正确"或"大多数Java"并不明显.

假设我在某个类中有一个小的身份验证(客户端客户端)方法.验证可能由于多种原因而失败,我想为控制流返回一个简单的布尔值,但也为用户返回一条String消息.这些是我能想到的可能性:

  • 返回一个布尔值,并传入一个StringBuilder来收集消息.这是最接近C风格的方式.
  • 抛出异常而不是返回false,并包含消息.我不喜欢这样,因为失败并非例外.
  • 使用boolean和String创建一个名为AuthenticationStatus的新类.对于一种小方法来说,这似乎有些过分.
  • 将消息存储在成员变量中.这会引入潜在的竞争条件,我不喜欢它意味着某些状态并不存在.

还有其他建议吗?

编辑关闭此选项

  • 返回null表示成功 - 这不安全吗?

编辑方案:

我选择了最OO解决方案并创建了一个小型AuthenticationResult类.我不会用任何其他语言来做这个,但我喜欢Java.我也喜欢返回String []的建议,因为它像null返回但更安全.Result类的一个优点是,如果需要,您可以获得包含更多详细信息的成功消息.

java exception return-value

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

如何解码谷歌gclids

现在,我意识到对此的初步回应很可能是"你不能"或"使用分析",但我会继续希望有人比这更有洞察力.

带有"自动标记"功能的Google adwords会将"gclid"(可能是"google click id")添加到链接中,以便将您发送到广告网站.它出现在Web日志中,因为它是一个查询参数,分析将其用于将该访问与广告/广告系列相关联.

我想做的是从gclid中提取任何有用的信息,以便对我们的流量进行自己的分析.原因是:

  • 统计数据并不完美,但如果我们正在整理它们,我们确切地知道我们做出了哪些假设,以及它们是如何计算的.
  • 我们可以将数据与其余数据联系起来,并根据转化率生成更准确的统计数据.
  • 我们不必依靠javascript进行转换.

现在很明显,gclid是base64编码的(或者一些接近的变体),并且它的某些部分比其他部分变化得多.除此之外,我还无法确定它与之相关的内容.

有没有人能够深入了解我如何解决这个问题,或者是否有人已经将gclids与比较甚至账户相关联?

我曾经和谷歌的几个人谈过,尽管他们的"不是邪恶"的座右铭,他们完全不愿意讨论泄露这些信息的可能性,即使是在NDA下也是如此.看起来他们喜欢他们对我们的网络统计数据的垄断.

statistics analytics google-analytics protocol-buffers google-adwords

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

数据映射器模式

到目前为止,我一直在所有c#数据库驱动的应用程序中使用Active记录.但是现在我的应用程序需要将我的持久性代码从业务对象中分离出来.我已经阅读了很多关于Martin Fowler的数据映射模式的帖子,但我对这种模式的了解仍然非常有限.

我们使用以下示例:

如果我有2个表 - Customer和CustomerParameters.CustomerParameters表包含用于创建新Customer的默认Customer值.

然后,我将创建一个CustomersMapper类来处理所有Customer持久性.然后,我的Customer和CustomersList类将与此映射器类协作,以便持久保存客户数据.

我有以下问题:

  1. 如何在不破坏某些业务规则的情况下将原始数据转移到我的Customer类到映射器?DTO的?

  2. 在我的Mapper类中使用SaveAll和LoadAll方法来更新和加载多个客户的数据是否可以接受?如果是这样,在SaveAll的情况下,映射器将如何知道何时更新或插入数据?

  3. 将客户映射类是负责从CustomerParameters表中检索的默认值,以及,还是会更好地创建一个CustomerParameters映射器?

AO/R映射器工具实际上并不在这里.我正在使用的数据库是Transactional,需要我编写自己的Mapper模式.

任何想法和评论将不胜感激.

datamapper

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

如何在WIN32中查找字符串的宽度(以像素为单位)

你能否在WIN32中更精确地测量字符串的宽度,而不是使用GetTextMetrics函数并使用tmAveCharWidth*strSize?

c++ windows winapi

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

我是否正确strcmp与文字相同(且安全)?

我们都知道溢出可能导致的问题,这就是strn*存在的原因 - 而且大部分时间它们都有意义.但是,我见过使用strncmp比较命令行参数的代码,如下所示:

if(... strncmp(argv[i], "--help", 6) == 0
Run Code Online (Sandbox Code Playgroud)

现在,我认为这是不必要的,甚至可能是危险的(对于更长的参数,很容易错误计算文字中的字符).

strncmp在空值上停止,代码已经假设argv [i]以空值终止.任何字符串文字都保证以null结尾,那么为什么不使用strcmp呢?

也许我错过了一些东西,但我已经看过几次了,而这一次它引起了我的兴趣.

c strcmp

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

如何防止Vim在括号中缩进包装文本

这已经困扰了我很长一段时间,并尝试我可能找不到绕道而行.

当我正在编辑文本(特别是乳胶,但没关系)文件时,我希望它在80列自动换行.它这样做,除非我碰巧在括号子句中间,它缩进文本非常烦人.例如,这很好

Here is some text... over
two lines.
Run Code Online (Sandbox Code Playgroud)

但事实并非如此

Here is some text... (over
                      two
                      lines
Run Code Online (Sandbox Code Playgroud)

如果有人能告诉我如何关闭它(仅用于文本/乳胶文件),我将非常感激.据推测,它与C中所需的行为有关,但我仍然无法弄清楚出了什么问题.

vim latex indentation word-wrap

14
推荐指数
2
解决办法
5781
查看次数

对于网络来说,什么样的状态比无国籍更好?

我一直主张无状态网络,但想知道有状态网络的拥护者在说什么.

你是否有任何有状态比无国籍更合适的情况?

state web-applications

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

你应该总是使用枚举而不是Java中的常量

在java <1.5中,常量将像这样实现

public class MyClass {
    public static int VERTICAL = 0;
    public static int HORIZONTAL = 1;

    private int orientation;

    public MyClass(int orientation) {
        this.orientation = orientation;
    }
...
Run Code Online (Sandbox Code Playgroud)

你会像这样使用它:

MyClass myClass = new MyClass(MyClass.VERTICAL);
Run Code Online (Sandbox Code Playgroud)

现在,在1.5中显然你应该使用枚举:

public class MyClass {
    public static enum Orientation {
        VERTICAL, HORIZONTAL;
    }

    private Orientation orientation;

    public MyClass(Orientation orientation) {
        this.orientation = orientation;
    }
...
Run Code Online (Sandbox Code Playgroud)

现在你会像这样使用它:

MyClass myClass = new MyClass(MyClass.Orientation.VERTICAL);
Run Code Online (Sandbox Code Playgroud)

我觉得有点难看.现在我可以轻松添加几个静态变量:

public class MyClass {
    public static Orientation VERTICAL = Orientation.VERTICAL;
    public static …
Run Code Online (Sandbox Code Playgroud)

java enums coding-style

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

您将为英国数据库使用多少个地址字段?

地址记录可能在大多数数据库中使用,但我看到了一些用于存储它们的略有不同的字段集.字段数似乎从3-7变化,有时所有字段都标记为address1..addressN,其他时间给定特定含义(城镇,城市等).

这是英国特定的,尽管我也对世界其他地方的评论持开放态度.在这里你需要地址的第一行(实际上只是数字)和邮政编码来识别地址 - 其他一切都是额外的奖励.

我现在赞成:

  • 地址1
  • 地址2
  • 地址3
  • 邮政编码

如果我们需要它,我们可以添加国家(不太可能).

你怎么看?这太少了,太多了吗?

database naming-conventions street-address

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