Python转换与其他

[TOC]

Python代码格式

Python中靠缩进识别代码块的首尾。

通过定义Tab键为4个空格Space,解决Python代码缩进和移植问题。


Python命名规则

驼峰命名法(Camel-Case)

多单词组合,第一个词首字母小写,其余词首字母大写;小驼峰

全部单词首字母大写;大驼峰(Pascal命名法)

1
myFirstName\yourObjects......

Guido命名法

见《Python命名规范》一文

匈牙利命名法

据说这种命名法是一位叫 Charles Simonyi 的匈牙利程序员发明的,后来他在微软待了几年,于是这种命名法就通过微软的各种产品和文档资料向世界传播开了。

这种命名法的出发点是把变量名按:属性+类型+对象描述的顺序组合起来。

Python GUI编程可用。

个人习惯使用大驼峰命名法,有时会加入对属性、类型的描述。


Python注释

1
2
3
4
#!/usr/bin/env python3
#-*- coding: utf-8 -*-

#coding=utf-8

第一行指定Python3解释器位置,第二行指定程序字符编码。

第一行为了兼容Linux,第二行为了兼容Python2的ASCⅡ编码。

#!/usr/bin/python3是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python3解释器; #!/usr/bin/env python3是为了防止用户没有将python3装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python3的安装路径,再调用对应路径下的解释器程序完成操作。

#!/usr/bin/python3相当于写死了python3路径; #!/usr/bin/env python3会去环境设置寻找python3目录。

1
2
3
# xxxxxxx
'''qweqwreqt
qwerqwetqtqrt'''

Python调试

Run|Python Shell

Debug|Debugger

Set BreakPoint

Run|Run Module

Linux中使用内置模块pdb调试。


进制转换

1
2
3
int([number | string[, base]])
# int(number)为取整
# int('number', [base])为转换成对应进制的数,注意输入数字为字符串形式
2进制 8进制 10进制 16进制
2进制 - bin(int(x, 8)) bin(int(x, 10)) bin(int(x, 16))
8进制 oct(int(x, 2)) - oct(int(x, 10)) oct(int(x, 16))
10进制 int(x, 2) int(x, 8) - int(x, 16)
16进制 hex(int(x, 2)) hex(int(x, 8)) hex(int(x, 10)) -
1
2
3
4
5
6
bin() # 二进制数
oct() # 八进制数
hex() # 十六进制数
# 以上函数返回值均为字符串,且带前缀‘0b’、'0o'、'0x'
ord(c) # 参数是长度为1的字符串。当参数为统一对象时(unicode object),返回能代表该字符的统一编码,当参数为8比特的字符串时,返回该字节的值。例如,ord('a')返回整形数值97,ord(u'\u2020')返回8224。
chr(i) # 返回一个字符,字符的ascii码等于参数中的整形数值。该方法是ord()的反方法。参数必须是0-255的整形数值,否则会抛出valueError错误。

list与dict的转换

1
2
3
4
5
6
7
8
9
10
11
# list 转成 dict
>>> key=['name','ID','age']
>>> value=['QCF','123456',18]

# zip(KeyList,ValueList) 变成zip对象
>>> Student = zip(key,value)
<zip object at 0x0000020422E36BC8>

# 转换成 dict
>>> dict(Student)
{'name': 'QCF', 'ID': '123456', 'age': 18}
1
2
3
4
5
6
7
8
9
# dict 转成 list

# 默认将 Key 转成 list
>>> list(Student)
['name', 'ID', 'age']

# 使用values()方法,将 value 转成 list
>>> list(Student.values())
['QCF', '123456', 18]

list与set的转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# set 转成 List 
>>> a = set('Google')
>>> type(a)
<class 'set'>

# 使用list()函数转换成list类型
>>> alist = list(a)
>>> type(alist)
<class 'list'>

>>> alist
['l', 'g', 'G', 'e', 'o']

# .sort()函数对alist元素按照alphabet或数字从小到大排序
>>> alist.sort()
>>> alist
['G', 'e', 'g', 'l', 'o']
1
2
3
4
5
6
7
8
9
10
11
# List 转成 set
>>> a = ['Google','123',1]
>>> type(a)
<class 'list'>

# 使用set()函数转换成set类型
>>> aset = set(a)
>>> aset
{'123', 'Google', 1}
>>> type(aset)
<class 'set'>

list与set的效率比较

1
2
3
4
5
6
7
~$ python -m timeit -n 1000 "[x for x in range(1000) if x in range(500, 1500)]"

1000 loops, best of 3: 13.8 msec per loop

~$ python -m timeit -n 1000 "set(range(1000)).intersection(range(500, 1500))"

1000 loops, best of 3: 50.4 usec per loop

List 大概用了Set的225倍的时间。List转Set基本用不了什么时间,所以如果有需要求(集合,列表等)的并集和交集的时候,最好使用Set。

考虑到range(500, 1500) 调用了1000次(会比较耗时),改成只调用一次的话,时间从28.2msec降到了18.2msec。仍然要(比Set)慢大概150倍。

1
~$  python -m timeit -n 1000 "range1500=range(500, 1500);[x for x in range(1000) if x in range1500]"

https://www.linuxidc.com/Linux/2012-07/66404.htm

Python 中list ,set,dict的大规模查找效率

https://blog.csdn.net/jmh1996/article/details/78481365