最近在写python的时候发现了很多以前没有发现的问题,特此写一篇文章专门用来记录遇到的这些问题。其实也不能算是问题,算是一些语言方面的特性,比如和c/c++不一样的地方。
溢出判断
python的int是不会溢出的,达到界限后会自己转为long
https://blog.csdn.net/jiede1/article/details/84256507
对负数取余的写法,python和c++并不相同。如果想要取一个负数的每一位,c++和正数的写法一致,而python则有一些改变。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <cstdio> #include <cstring> #include <vector> #include <iostream>
using namespace std;
int main(){ int x; cin >> x; vector<int> a; while(x!=0){ int pop = x%10; x = x/10; a.push_back(pop); } for(int i=0;i<a.size();i++) { if (i!=a.size()-1) cout<<a[i]<<" "; else cout<<a[i]<<endl; } return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| def get_single_num(x): res=[] while x!=0: pop = x%10 x = x//10 res.append(pop) print(res)
get_single_num(123)
def get_single_num(x): res=[] while x!=0: pop = x%-10 x = int(x/10) res.append(pop) print(res)
get_single_num(-123)
|
深拷贝、浅拷贝
更详细的讲解:https://blog.csdn.net/u010712012/article/details/79754132
python中copy并不是完全的深拷贝,对于嵌套多个list的情况,原始list发生改变copy的list也会发生改变。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| list1 = [1,2,[1,2]] list2 = list1.copy()
list1[1] = 0 print(list1,list2)
list1[2][0] = 0 print(list1,list2)
list1[2].append(3) print(list1,list2)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import copy list1 = [1,2,[1,2]] list2 = copy.deepcopy(list1)
list1[1] = 0 print(list1,list2)
list1[2][0] = 0 print(list1,list2)
list1[2].append(3) print(list1,list2)
|
range和xrange的区别
简而言之:python3中没有xrange只有range了,但是python3中的range相当于python2中的range,是一个生成器对象。
详情请戳:https://blog.csdn.net/wtwcsdn123/article/details/89329403
iteritems
python3中不再有iteritems(),只有items(),items()返回的是一个列表,iteritems()返回的是迭代器,iteritems()在需要迭代结果的时候使用最适合,它的工作效率非常的高。