python web框架企业实战详解(第六期)\第二课时-pickle&__eq__

Posted t0nsha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python web框架企业实战详解(第六期)\第二课时-pickle&__eq__相关的知识,希望对你有一定的参考价值。

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=123
print "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)= 30778664
id(aa)= 30778144
1
123
id(bb)= 44761936
id(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 pickle
dir(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:
        break

username=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:test
Please input your password:123
username=karliao,password=123456
username=test,password=123
>>> ================================ RESTART ================================
>>> 
Please input your username:test
Please input your password:111
>>> 


--eof--

以上是关于python web框架企业实战详解(第六期)\第二课时-pickle&__eq__的主要内容,如果未能解决你的问题,请参考以下文章

python web框架企业实战详解(第六期)\第三课时-css&bootstrap

python web框架企业实战详解(第六期)\第二课时-pickle&__eq__

python web框架企业实战详解(第六期)\第一课时-sorted&if&for

python web框架企业实战详解(第六期)第三课时-css&bootstrap

python web框架企业实战详解(第六期)第三课时-ajax&jquery&webpy

python web框架企业实战详解(第六期)第四课时-webpy&django