小编Cpt*_*rkt的帖子

编写干净,灵活且易于维护的用户输入提示

我经常要求用户输入.我总是在主执行脚本中"按需"编写提示.这有点难看,因为我经常要求跨多个脚本输入相同类型的输入,我的代码只是复制/粘贴提示循环.这是我过去做过的事情:

while True:
    username = input("Enter New Username: ")
    if ldap.search(username):
        print "   [!] Username already taken."
    if not validator.validate_username(username):
        print "   [!] Invalid Username."
    else:
        break
Run Code Online (Sandbox Code Playgroud)

我想创建一些可以被称为的东西:

username = prompt(prompt="Enter New Username: ",
                  default=None,
                  rules=["user_does_not_exist",
                         "valid_username"])
Run Code Online (Sandbox Code Playgroud)

然后提示函数看起来像:

def prompt(prompt, default, rules):
    while True:
        retval = input(prompt)
        if default and retval == "":
            break
            return default
        if not rule_match(retval, rules):
            continue
        break
        return retval

def rule_match(value, rules):
    if "user_does_not_exist" in rules:
        if not user.user_exists(value):
            return False

    if "valid_username" in rules: …
Run Code Online (Sandbox Code Playgroud)

python prompt input python-3.x

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

手动连接Page_PreInit事件,AutoEventWireup设置为false

如果AutoEventWireup属性设置为false,则需要手动连接事件.但是,我似乎无法得到Page_PreInit解雇.我猜我可能会让连线发生得太晚(一旦我们已经过去Page_PreInit),但我不确定在哪里放置连线.

例如...

protected override void OnInit(EventArgs e)
{
    base.OnInit(e)
    PreInit += new EventHandler(Page_PreInit);
    Load += new EventHandler(Page_Load);
}

protected void Page_PreInit(object sender, EventArgs e)
{
    Response.Write("Page_PreInit event fired!<br>");  //this is never reached
}

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Page_Load event fired!<br>");
}
Run Code Online (Sandbox Code Playgroud)

上面的代码导致"Page_Load事件被触发!" 被展示,但没有Page_PreInit.我base.OnInit(e)在连线之前和之后尝试过,这没有任何效果.

此处显示的图表表明该OnInit方法实际上是在PreInit事件发生之后.考虑到这一点,我尝试重写OnPreInit并做同样的事情 - 没有效果.

这里的MSDN文章明确指出,如果AutoEventWireup设置为false,事件可以在覆盖中连接OnInit.他们使用的例子Page_Load当然就像它对我的作用一样,但他们没有说明这似乎不适用于该Page_PreInit事件. …

c# asp.net events page-lifecycle event-handling

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

Java教科书:"编译时必须知道数组的大小"

我只是浏览了一本旧的教科书,发现这篇文章用Java定义数组:

一维数组是一种结构化复合数据类型,由有序的同质元素的有限的,固定化的集合组成,可以直接访问.有限表明存在最后一个元素.固定大小意味着必须在编译时知道数组的大小,但这并不意味着数组中的所有插槽都必须包含有意义的值.

我对数组有一个基本的了解,并且我很乐意在每天的任务中使用它们,但是我很惊讶在编译时必须知道数组的大小.

一个非常简单的Java程序演示了可以在运行时使用可变大小实例化数组:

import java.util.Scanner;

public class test
{
   public static void main(String[] args)
   {
      Scanner scan = new Scanner(System.in);
      System.out.print("Enter a number: ");
      int size = scan.nextInt();
      int[] array = new int[size];
      System.out.println("You just create an array of size " + array.length);
   }
}
Run Code Online (Sandbox Code Playgroud)

这会编译,执行并到达终点而不会出错.

是什么赋予了?

java arrays runtime compile-time

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

为什么`<<`附加到Ruby字符串而`+ =`不附加?

我现在正在编写一个教程,我想了解为什么会发生以下情况:

original_string = "Hello, "
hi = original_string
there = "World"
hi += there
assert_equal "Hello, ", original_string

original_string = "Hello, "
hi = original_string
there = "World"
hi << there
assert_equal "Hello, World", original_string
Run Code Online (Sandbox Code Playgroud)

为什么+=没有效果original_string,<<是吗?我绝对肯定第二种情况也会相同"Hello, ",但事实并非如此.

hi = original string在第一个例子中似乎复制了original_stringinto 的值hi,但hi = original string在第二个例子中似乎设置hi为指向相同的字符串original string.我猜在幕后有关于是复制值还是复制引用的某种隐含决定......或者其他什么.

ruby string reference

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

符号/零扩展可以仅通过强制转换来完成吗?

我有一个家庭作业问题(MIPS 模拟器),它要求我们采用 16 位“立即”值并将其符号和/或零扩展为 32 位。我的印象是,这可以通过强制转换轻松完成,例如:

uint32_t imm = (uint16_t)IMM_FIELD(instruction); # Zero extend to 32-bits
Run Code Online (Sandbox Code Playgroud)

uint32_t imm = (int16_t)IMM_FIELD(instruction); # Sign extend to 32-bits
Run Code Online (Sandbox Code Playgroud)

但后来我在网上发现了一段代码,其中从事同一项目的人编写了自己的“sign_extension8to16”、“sign_extension16to32”函数,这些函数的工作原理是将 8 位数字右移 7 并评估是否最高有效位(现在位于 1 的位置)为 1,然后返回一个转换为 (uint16_t) 的数字,该数字相应地将高 8 位屏蔽为 0 或 1。

这样的做法真的有必要吗?我想选角肯定已经解决了这个问题。我问的原因是我收到了非常奇怪的错误消息,而且我无法查明问题,所以我认为原因可能是我错误地为零和符号扩展......

c integer casting mips bit

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

FileUpload 控件不接受 0kb 文件?

我正在使用空白文本文件来运行一些测试,并且很疯狂,因为 FileUpload1.HasFile 总是返回 false,即使它显然有一个文件。然后我将测试文件切换到 0 kb 以上的文件(即其中包含文本的 txt 文件),然后它就可以工作了。

据我所知,您不能上传 0 kb 的内容。这是真的? 我在 MSDN 上阅读了 FileUpload 类,但没有注意到任何说明 0 kb 的文件将被忽略/视为不是文件的内容。

实际上,我认为这不是什么大问题(你为什么要上传一个空白文件?),但我可以想象某种罕见的情况,我可能想要为某些东西保留空间还没有内容,比如一个空白的文本文件,供用户在他/她有时间的时候填写。

c# asp.net file-upload web-controls

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

使用默认成员资格提供程序或继承它的自定义提供程序有什么原因?

我在8个月前发布了这个问题.接受的答案涉及一些你不会通过默认提供商的规则播放而错过的东西.例如,如果您不使用从RoleProvider继承的自定义RoleProvider,则您将失去使用快速快捷方式的功能User.IsInRole().答案是指像"内置管道"这样的东西.

我想知道的是,我可以在哪里找到依赖于"内置管道"的完整列表,以及显示他们在幕后调用哪些重写方法的内容.

例如,HttpContext.Current.User.IsInRole()是(我假设)在我的自定义RoleProvider中引用并调用我的覆盖"IsUserInRole()"方法,但是我希望看到明确说明HttpContext.Current.User.IsInRole()实际调用的文档,IsUserInRole()对于所有提供者的所有此类方法.

我知道它应该是显而易见的(IsInRole()和IsUserInRole()是如此相似),但我的询问动机是看到并了解其他类型的可用的快捷方式,我甚至都不知道的.我有一种感觉,我已经多次重新发明了轮子,我甚至都不知道.

c# asp.net asp.net-membership roleprovider membership-provider

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

增加一个数字并在Bash中添加一个前导零

问题在于08和09号.我用Google搜索了这个,并找出08和09有问题的原因,但没有解决方案.

这是一个荒谬的例子,用于简要描述我的问题而不深入细节.

cursorDay=2;
let cursorDay=$cursorDay+1;

case "$cursorDay" in

1) cursorDay=01;;
2) cursorDay=02;;
3) cursorDay=03;;
4) cursorDay=04;;
5) cursorDay=05;;
6) cursorDay=06;;
7) cursorDay=07;;
8) cursorDay=08;;
9) cursorDay=09;

esac

echo "$cursorDay";
Run Code Online (Sandbox Code Playgroud)

我期望的输出是"03",实际上我确实得到了输出.但如果我做同样的事情尝试获得08或09,我这个错误:

line 100: let: cursorDay=08: value too great for base (error token is "08")
Run Code Online (Sandbox Code Playgroud)

问题是,有没有办法"强制"它将08和09视为常规数字?我发现了几个帖子详细说明如何消除零,但我想要零.

unix bash leading-zero

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

使用curses支持编译Python

我尝试编译和安装带有 curses 支持的 Python 的尝试失败了,我已经在编译标志和诸如此类的东西上尝试了各种迭代,但似乎无法让这个东西正常工作。

这是在 Solaris 11,Python 版本 3.4.3 上:

首先,这是问题所在

Python 3.4.3 (default, Mar  3 2015, 14:43:41) 
[GCC 4.5.2] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> import curses
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/pkg/python/3.4.3/lib/python3.4/curses/__init__.py", line 13, in <module>
    from _curses import *
ImportError: No module named '_curses'
Run Code Online (Sandbox Code Playgroud)

各种谷歌告诉我,这是因为在编译 Python 时,没有找到 ncurses 库。

所以我将curses从ftp://ftp.gnu.org/gnu/ncurses/(5.9)安装到/usr/local/pkg/ncurses/5.9并尝试重新编译Python,传入ncurses的位置:

export LDFLAGS=-L/usr/local/pkg/ncurses/5.9/lib
export CPPFLAGS="-I/usr/local/pkg/ncurses/5.9/include -I/usr/local/pkg/ncurses/5.9/include/ncurses"
./configure --enable-shared --prefix=/usr/local/pkg/python/3.4.3
make
make …
Run Code Online (Sandbox Code Playgroud)

python solaris ncurses python-curses

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

如何确定Matlab正在使用的线程数?

当我简单地运行时"matlab",maxNumCompThreads返回4.

当我运行时"matlab -singleCompThread",maxNumCompThreads返回1.

但是在这两种情况下ps uH p <PID> | wc -l(我从SO上的另一个问题中选择以确定进程正在使用的线程数)返回35.

是什么赋予了?有人可以向我解释35代表什么,以及我是否可以信任maxNumCompThreads表示Matlab只使用一个线程?

matlab multithreading pid process ps

4
推荐指数
1
解决办法
1353
查看次数