该类collections.defaultdict采用默认工厂,用于生成默认值。
如果包含在dict-like 对象中的值应默认为False,则可以将实例创建为:
d_false = defaultdict(bool)
Run Code Online (Sandbox Code Playgroud)
为默认值实现相同的最pythonic 的方法是True什么?
换句话说,是否有一个标准的可调用对象返回True,它习惯上用作bool?
当然,工厂可以构建为 lambda 表达式:
d_true = defaultdict(lambda: True)
Run Code Online (Sandbox Code Playgroud)
但这可能是在重新发明轮子。
我刚刚开始使用Python创建自己的计算机游戏.这是第3章的示例代码:
1 # This is a Guess the Number game.
2 import random
3
4 guessesTaken = 0
5
6 print('Hello! What is your name?')
7 myName = input()
8
9 number = random.randint(1, 20)
10 print('Well, ' + myName + ', I am thinking of a number between 1 and 20.')
11
12 for guessesTaken in range(6):
13 print('Take a guess.') # Four spaces in front of "print"
14 guess = input()
15 guess = int(guess)
16 …Run Code Online (Sandbox Code Playgroud) 我试图使用#X格式说明符使用大写字母作为“数字”打印十六进制值,同时自动添加通常的0x前缀。例如,十进制10应表示为0xA。
但是,该说明符似乎并非如此:
>>> print(f'{10:#X}')
0XA
>>> '{:#X}'.format(10)
'0XA'
Run Code Online (Sandbox Code Playgroud)
看起来X修饰符使数字(包括前缀)的整个字符串表示0x通过str.upper而不是“数字部分”。我认为这足够公平,但是在检查Format Specification Mini-Language 之后,它看起来可能不是预期的结果(或者,至少,它没有明确记录)。以下是相关位:
该
'#'选项会导致使用“替代形式”进行转换。[...] 对于整数,当使用 [...] 十六进制输出时,此选项将前缀 [...] 添加'0x'到输出值。[...]
可用的整数表示类型有:
类型 意义 [...] [...] 'x'十六进制格式。输出以 16 为基数的数字,9 以上的数字使用小写字母。 'X'十六进制格式。输出以 16 为基数的数字,对 9 之上的数字使用大写字母。 [...] [...]
这似乎意味着大写字母应该只用于非十进制的十六进制数字 ( a, b, c, d, e, f),因此不应关注x(from 0x);那正确吗?
如果可能的话,如何声明一个用于任何类型参数的函数,T其中唯一的约束T是它被定义为 1D,array如
type T is array ( integer range <> ) of a_random_type;Run Code Online (Sandbox Code Playgroud)
哪里a_random_type可以是任何type.
以下语法错误的函数是所需的示例
function measure_size_of_any_array ( a : array ( integer range <> ) ) return natural is
variable r : natural := 0;
begin
for i in a'range loop
r := r + 1;
end loop;
return r;
end function;Run Code Online (Sandbox Code Playgroud)
然后可以用于任何 array
type natural_array is array ( integer range <> ) of natural;
type stdlogv_array …Run Code Online (Sandbox Code Playgroud)