本文共 1973 字,大约阅读时间需要 6 分钟。
1、python的值传递和引用传递区别,哪些类型值传,哪些是引用传递?值传递和引用传递区别:依据对象是否可变来确定和其他语言不一样,传递参数的时候,python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。python一般内部赋值变量的话,都是传个引用变量,和C语言的传地址的概念差不多。可以用id()来查询内存地址如果a=b的话, a和b的地址是相同的;如果只是想拷贝,那么就得用 a=b[:]。# -*- coding: cp936 -*-#值传递def f1(aa): aa=1 print "id(aa)=" , id(aa) print aa bb=123print "id(bb)=" ,id(bb)f1(bb)print bb#引用传递def f2(aa): aa[0]=[1] print "id(aa)=" ,id(aa) print aa bb=[123]print "id(bb)=" ,id(bb)f2(bb)print bb>>> id(bb)= 30778664id(aa)= 307781441123id(bb)= 44761936id(aa)= 44761936[[1]][[1]]>>>2、使用python编写一个命令程序:里面保存了若干用户成员的信息,用户只有登陆后才能查看这些用户的信息。即:用户启动python脚本,然后输入用户名密码登陆成功后,使用命令可以查看其他用户信息# -*- coding: cp936 -*-class MyUser(object): def __init__(self,username,password): self.username=username self.password=password def __del__(self): pass def __str__(self): return str('username=%s,password=%s' % (self.username,self.password)) def __eq__(self,other): return self.username==other.username and self.password==other.password import pickledir(pickle)user1=MyUser('karliao','123456')user2=MyUser('test','123')fa=open('e:/aa.txt','w')pickle.dump(user1,fa,2) ##0->文本形式、1,2->二进制形式pickle.dump(user2,fa,2)fa.close()fr=open('e:/aa.txt','r')users=[]while True: try: user=pickle.load(fr) users.append(user) except EOFError,e: breakusername=raw_input('Please input your username:')password=raw_input('Please input your password:')curUser=MyUser(username,password)if curUser in users: for user in users: print user>>> Please input your username:testPlease input your password:123username=karliao,password=123456username=test,password=123>>> ================================ RESTART ================================>>> Please input your username:testPlease input your password:111>>> --eof--
转载地址:http://nktai.baihongyu.com/