我很费解这一点,php写多了,今天准备用python写算法题,因为人家没提供php编译器。
折腾了几个小时,也没会玩儿这字典列表和函数传址是怎么回事。
def my_cazz(n,l):
temp = n;
count = 0;
l.append(n);
while (n!=1):
if (n % 2 == 0):
n = int(n/2);
else:
n = int((3 * n + 1) / 2);
count = count + 1;
l.append(n);
# def cmp_list(l1,l2):
# li[0]
# n = int(raw_input());
# myinput = raw_input();
myinput = "2 3 4 5 6 7 8 10 12 14 15 16 17 18";
mylist = myinput.split(' ');
count = 0;
dic = {};
li = [];
for x in mylist:
dic[int(x)] = li;
my_cazz(int(x),dic[int(x)]);
for k in dic:
print dic[k];
没看懂你代码具体要表达什么,我就按照你的题目回答。
并不是Python中的函数对于列表和字典默认传址,而是函数接收的参数都默认传引用,也就是说的传址。
参数变量在函数的作用域里面是不同于外部的变量,虽然一开始它们都引用了同样的对象。
对于对象来说,分为可变对象和不可变对象,一个变量引用了不可变对象,又要改变其值的话,其实就是改变了引用,因为其引用的对象不可变。所以当传递给函数的参数是不可变对象的话,在函数内修改该参数变量,会导致参数变量改变了引用,而对于可变对象就不会有这个问题,这样就使得看起来像c语言中函数传值和传址。