本节内容:
1.深浅拷贝
2.三目运算
3.迭代器和生成器
4.装饰器
1.深浅拷贝
拷贝意味着对数据重新复制一份,深浅拷贝的含义就是:对于修改复制的数据是否会影响到源数据,拷贝操作对于基本数据结构需要分两类进行考虑,一类是字符串和数字,另一类是列表、字典等。如果要进行拷贝的操作话,要import copy。
1、数字和字符串
对于数字和字符串而言,深拷贝,浅拷贝没有什么区别,因为对于数字数字和字符串一旦创建便不能被修改,假如对于字符串进行替代操作,只会在内存中重新生产一个字符串,而对于原字符串,并没有改变,基于这点,深拷贝和浅拷贝对于数字和字符串没有什么区别,下面从代码里面说明这一点。
>>> import copy >>> >>> a =2 >>> b=copy.copy(a) ##把a的数据复制一份给b >>> b 2 >>> b =45 ##修改b的值,查看会不会影响到a >>> a ##a并不受b的影响,相互独立 2
2、字典、列表等数据结构
对于字典、列表等数据结构,深拷贝和浅拷贝有区别,从字面上来说,可以看出深拷贝可以完全拷贝,浅拷贝则没有完全拷贝,下面先从内存地址分别来说明,假设 n1
=
{
"k1"
:
"wu"
,
"k2"
:
123
,
"k3"
: [
"alex"
,
456
]}
。
浅拷贝在内存中只额外创建第一层数据 深拷贝在内存中将所有的数据重新创建一份
import copy n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} n2=copy.copy(n1) # 浅拷贝 n3=copy.deepcopy(n1) # 深拷贝 print(n1,id(n1),id(n1['k1']),id(n1['k3'])) print(n2,id(n2),id(n2['k1']),id(n2['k3'])) print(n3,id(n3),id(n3['k1']),id(n3['k3'])) # 从下面打印的值结合上面的图就可以很好的理解, # {'k3': ['alex', 456], 'k2': 123, 'k1': 'wu'} 2713748822024 2713753080528 2713755115656 # {'k3': ['alex', 456], 'k2': 123, 'k1': 'wu'} 2713755121416 2713753080528 2713755115656 # {'k3': ['alex', 456], 'k2': 123, 'k1': 'wu'} 2713753267656 2713753080528 2713754905800
2.三目运算符
三目运算符可以简化条件语句的缩写,可以使代码看起来更加简洁,三目可以简单的理解为有三个变量,它的形式是这样的 name= k1 if 条件 else k2 ,如果条件成立,则 name=k1,否则name=k2,下面从代码里面来加深一下理解,从下面的代码明显可以看出三目运算符可以使代码更加简洁。
#正常判断: 如果money大于100 happy 小于100 shit money = 100 if money >100 : print('happy') else: print('shit') ##三目运算 print('happy') if money>100 else print('shit') #输出: shit shit
3.列表生成式,迭代器&生成器
http://www.cnblogs.com/alex3714/articles/5765046.html
4.装饰器
http://www.cnblogs.com/alex3714/articles/5765046.html
user_list = [{'name':'crik','password':123},{'name':'alex','password':456}]
current_user = {'name':None,'password':None} def login_type(type): def login(func): print('type',type) def inner(): if type == 'file_type': if current_user['name'] and current_user['password']: for item in user_list: if item['name'] == current_user['name'] and item['password'] == current_user['password']: print('login...') func() return else: name = input('plz input name:').strip() password = int(input('plz input password:').strip()) current_user['name'] = name current_user['password'] =password for item in user_list: if item['name'] == current_user['name'] and item['password'] == current_user['password']: print('login...') func() return else: current_user['name'] = None current_user['password'] = None print('验证失败') return '验证失败' elif type == 'ldap': print('use ldap') return else: print('unknow type') return inner return login @login_type('ldap') ##实际就是 index = login_type('ldap') -- > index = login -->index = inner def index(): print('welcome to home...') @login_type('ss') def look(): print('female') index() look() # 输出结果: # type ldap # type ss # use ldap # unknow type