我是Python的新手,我不理解以下程序中的指令:
n = int(input("enter an number : ")
b = 3
p = 1
while n > 0:
n,r = n//2,n%2
p* = b**r
b = b*b
print(p)
我不明白这句话:n,r = n//2,n%2
。它做了什么?
答案 0 :(得分:3)
这是一项并行任务:
n, r = n // 2, n % 2
n
等于n
除以2
使用整数除法,r
等于n
modulo 2
。它与:
t1 = n // 2
t2 = n % 2
n = t1
r = t2
评估右边的值,然后分配它们,推迟覆盖原始值,直到我们不再需要它们为止。
答案 1 :(得分:3)
这是元组赋值。左侧元组中的每个值都分配给右侧元组中的相应值。由于在发生任何赋值之前评估右侧的值,因此使用语句前的n
值。所以该行相当于:
tmp = n
n = tmp // 2
r = tmp % 2
答案 2 :(得分:3)
大多数答案都不正确。
void ft_list_clear(struct Node *begin_list)
{
if(begin_list == NULL)
return;
ft_list_clear(begin_list->next);
free(begin_list);
}
是一个名为" tuple unpacking"的Pythonic概念。
a, b = c, d
表示"将n,r=n//2,n%2
分配给n//2
"和"将n
分配给n % 2
"但r
是n,r
。在元组解包中,RHS上的所有表达式都在 分配之前进行评估。因此tuple
在n
被评估之前n//2
不变异。
元组解包中操作顺序的概念证明:
n%2