小编Ant*_*ala的帖子

如何从另一个模块更改模块变量?

假设我有一个名为的包bar,它包含bar.py:

a = None

def foobar():
    print a
Run Code Online (Sandbox Code Playgroud)

并且__init__.py:

from bar import a, foobar
Run Code Online (Sandbox Code Playgroud)

然后我执行这个脚本:

import bar

print bar.a
bar.a = 1
print bar.a
bar.foobar()
Run Code Online (Sandbox Code Playgroud)

这就是我的期望:

None
1
1
Run Code Online (Sandbox Code Playgroud)

这是我得到的:

None
1
None
Run Code Online (Sandbox Code Playgroud)

任何人都能解释我的错误观念吗?

python import module

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

C中的嵌套函数

我们可以在C中使用嵌套函数吗?嵌套函数有什么用?如果它们存在于C中,它们的实现是否因编译器而异?

嵌套函数是否允许使用任何其他语言?如果是,那么它们的意义何在?

c nested function

84
推荐指数
5
解决办法
7万
查看次数

为什么C++支持在结构中成员分配数组,但一般不支持?

我理解不支持成员分配数组,因此以下方法不起作用:

int num1[3] = {1,2,3};
int num2[3];
num2 = num1; // "error: invalid array assignment"
Run Code Online (Sandbox Code Playgroud)

我只是接受了这个事实,认为该语言的目的是提供一个开放式框架,并让用户决定如何实现诸如复制数组之类的东西.

但是,以下工作正常:

struct myStruct { int num[3]; };
struct myStruct struct1 = {{1,2,3}};
struct myStruct struct2;
struct2 = struct1;
Run Code Online (Sandbox Code Playgroud)

该数组num[3]是从其实例中成员分配struct1到其实例中的struct2.

为什么结构支持成员方式的数组,但一般情况下不支持?

编辑:Roger Pate 在结构中的线程std :: string中的注释- 复制/赋值问题?似乎指向答案的大致方向,但我不知道自己确认.

编辑2:许多出色的回应.我之所以选择Luther Blissett,是因为我对这种行为背后的哲学或历史原理很感兴趣,但James McNellis对相关规范文档的引用也很有用.

c c++ arrays struct variable-assignment

82
推荐指数
2
解决办法
7481
查看次数

在C和C++中使用的exec有哪些不同版本?

这些是可以在C(和C++)中使用的exec的所有版本

execl
execle
execlp
execv
execve
execvp
Run Code Online (Sandbox Code Playgroud)

他们之间有什么区别?你怎么知道使用哪一个?

c c++ exec

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

如何检查列表是否只有一个真值?

在python中,我有一个列表应该只有一个 truthy值(即,bool(value) is True).有没有一种聪明的方法来检查这个?现在,我只是遍历列表并手动检查:

def only1(l)
    true_found = False
    for v in l:
        if v and not true_found:
            true_found=True
        elif v and true_found:
             return False #"Too Many Trues"
    return true_found
Run Code Online (Sandbox Code Playgroud)

这似乎不优雅,不是非常pythonic.有更聪明的方法吗?

python

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

你如何正确使用WideCharToMultiByte

我已经阅读了有关WideCharToMultiByte的文档,但我坚持这个参数:

lpMultiByteStr
[out] Pointer to a buffer that receives the converted string.
Run Code Online (Sandbox Code Playgroud)

我不太确定如何正确初始化变量并将其输入函数

c++ unicode character-encoding codepages

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

将float转换为字符串,没有科学记数法和错误的精度

我想打印一些浮点数,以便它们总是以十进制形式写入(例如,12345000000000000000000.0或者0.000000000000012345不是科学记数法,但我想保持15.7十进制数字的精度而不是更多.

众所周知,如果指数大于15或小于-4 ,则floata repr用科学记数法写成:

>>> n = 0.000000054321654321
>>> n
5.4321654321e-08  # scientific notation
Run Code Online (Sandbox Code Playgroud)

如果float使用,则再次生成的字符串采用科学计数法:

>>> str(n)
'5.4321654321e-08'
Run Code Online (Sandbox Code Playgroud)

有人建议我可以用strformat标志和足够的精度摆脱了科学计数法:

>>> format(0.00000005, '.20f')
'0.00000005000000000000'
Run Code Online (Sandbox Code Playgroud)

它适用于该数字,但它有一些额外的尾随零.但是相同的格式失败了f,它给出了超出float的实际机器精度的十进制数字:

>>> format(0.1, '.20f')
'0.10000000000000000555'
Run Code Online (Sandbox Code Playgroud)

如果我的号码是.1,使用4.5678e-20仍然会失去相对精确度:

>>> format(4.5678e-20, '.20f')
'0.00000000000000000005'
Run Code Online (Sandbox Code Playgroud)

因此,这些方法与我的要求不符.


这导致了一个问题:以十进制格式打印任意浮点数的最简单且性能最好的方法是什么,具有与.20f(或repr(n)在Python 3中)相同的数字,但总是使用小数格式,而不是科学记数法.

也就是说,例如将浮点值转换str(n)为字符串的函数或操作0.00000005; '0.00000005'0.1; '0.1'to 420000000000000000.0'420000000000000000.0'将float值格式化420000000000000000 …

python floating-point python-2.x number-formatting python-3.x

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

JSF中的CSRF,XSS和SQL注入攻击防范

我有一个基于JSF的Web应用程序,MySQL作为DB.我已经实现了代码来防止我的应用程序中出现CSRF.

现在,由于我的底层框架是JSF,我想我不必处理XSS攻击,因为它已经被处理了UIComponent.我没有在任何视图页面中使用任何JavaScript.即使我使用,我真的需要实现代码来防止XSS攻击?

对于DB,我们在所有数据库交互中使用预准备语句和存储过程.

是否还需要处理其他任何事情以防止这3种常见攻击?我已经通过了OWASP网站和他们的备忘单.

我是否需要处理任何其他潜在的攻击媒介?

xss jsf sql-injection csrf owasp

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

为什么正则表达式匹配对象即使实现__getitem__也不可迭代?

您可能知道,实现__getitem__方法会使类可迭代:

class IterableDemo:
    def __getitem__(self, index):
        if index > 3:
            raise IndexError

        return index

demo = IterableDemo()
print(demo[2])  # 2
print(list(demo))  # [0, 1, 2, 3]
print(hasattr(demo, '__iter__'))  # False
Run Code Online (Sandbox Code Playgroud)

但是,对于正则表达式匹配对象,这不适用:

>>> import re
>>> match = re.match('(ab)c', 'abc')
>>> match[0]
'abc'
>>> match[1]
'ab'
>>> list(match)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '_sre.SRE_Match' object is not iterable
Run Code Online (Sandbox Code Playgroud)

值得注意的是,该__iter__方法中没有抛出此异常,因为该方法甚至没有实现:

>>> hasattr(match, '__iter__')
False
Run Code Online (Sandbox Code Playgroud)

那么,如何在__getitem__不使类可迭代的情况下实现呢?

python iterable

53
推荐指数
1
解决办法
1849
查看次数

默认变量值

如果我在声明它时没有为变量赋值,它是默认为零还是只是以前在内存中的任何内容?

例如

float x;
Run Code Online (Sandbox Code Playgroud)

c++

51
推荐指数
5
解决办法
6万
查看次数