Run
源代码
Python源代码的文件以"py"为扩展名,由Python程序解释,不需要编译
命令:python 文件
字节代码
Python源文件经过编译后生成的扩展名为"pyc"的文件
编译方法:
import py_compile
py_compile.compile("url") # url编译的文件的路径
编译后的文件为:xxx.cpython-36.pyc
优化代码
经过优化的源文件,扩展名为".pyo"
命令:pyhont -O -m py_comile 编译的文件
编译后的文件为:xxx.cpython-36.opt-1.pyc
Type
int, float, str, bool, NoneType
tuple, list, dict, set
Lists
list = []
list[i:j] # 返回列表的子集
list[-1] # 访问的最后一个元素
list[:-1] # 只返回最后一个元素
list[i] = val
list[i:j] = otherlist # replace ith to jth element with otherlist
del list[i:j]
list.append(item)
list.extend(list)
list.insert(0, item)
list.pop()
list.remove(i)
list1 + list2 # 结合两个列表
set(list) # 从列表中删除重复元素
list.reverse()
list.count(item)
sum(list)
list.sort()
zip(list1, list2)
sorted(list)
",".join(list)
Dict
dict.keys()
dict.values()
"key" in dict
dict["key"] # throws KeyError
dict.get("key")
dict.setdefault("key", 1)
Iteration
for item in ["a", "b", "c"]:
for i in range(4): # 0 到 3
for i in range(4, 8): # 4 到 7
for key, val in dict.items():
String
str[0:4]
len(str)
string.replace("-", " ")
",".join(list)
"hi {0}".format('j')
str.find(",")
str.index(",")
str.count(",")
str.split(",")
str.lower()
str.upper()
str.title()
str.lstrip()
str.rstrip()
str.strip()
str.islower()
len() # 求序列长度
+ # 连接2个序列
* # 重复序列元素
in # 判断元素是否在序列中
max() # 返回最大值
min() # 返回最小值
Set
集合Set于列表,元组类似,可以存储多个数据,但是,这些数据是不重复的。
集合对象支持union(联合), intersection(交集), difference(差集)和sysmmetric_difference(对称差集)等数学运算
>>> x = set('abcd')
>>> x
{'c', 'a', 'b', 'd'}
>>> type(x)
>>> y = set(['h','e','l','l','o'])
>>> y
{'h', 'e', 'o', 'l'}
>>> z = set('spam')
>>> z
{'s', 'a', 'm', 'p'}
>>> y&z # 交集
set()
>>> x&z # 交集
{'a'}
>>> x|y # 并集
{'a', 'e', 'd', 'l', 'c', 'h', 'o', 'b'}
>>> x-y # 差集
{'c', 'a', 'b', 'd'}
>>> x^z # 对称差集(在x或z中,但不会同时出现在二者中)
{'m', 'd', 's', 'c', 'b', 'p'}
Casting
int(str)
float(str)
str(int)
str(float)
bool(1)
Comprehensions
[fn(i) for i in list] # .map
map(fn, list) # .map, 返回的迭代
filter(fn, list) # .filter, 返回的迭代
[fn(i) for i in list if i > 0] # .filter.map
Regex
import re
re.match(r'^[aeiou]', str)
re.sub(r'^[aeiou]', '?', str)
re.sub(r'(xyz)', r'\1', str)
expr = re.compile(r'^...$')
expr.match(...)
expr.sub(...)
Function
定义函数
使用关键字:def。 依次写出函数名, 括号, 参数, 语句结束符 :。然后,在缩进块中编写函数体,函数的返回值用return语句返回
def my_abs (x):
if x >= 0:
return x
else:
return -x
空函数
定义一个什么也不做的空函数,使用pass语句
def nop ()
pass
空函数的作用:提供占位符
参数
默认参数一定要用不可变对象(基本变量类型和tuple), 如果是可变对象,程序运行时会有逻辑错误。
定义可变参数和关键字参数的使用:
*args是可变参数,args接收的是一个tuple
**kw是关键字参数,kw接收的是一个dict
调用函数时如何传入可变参数和关键字参数:
可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3));
关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})。
使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
命名的关键字参数作用:为了限制调用者可以传入的参数名,同时可以提供默认值。
定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数
返回值
函数执行完毕也没有return语句时,自动return None
函数可以同时返回多个值,但其实就是一个tuple
匿名函数
lamdba 参数:函数体
匿名函数自动具有返回值
Characteristic
区分大小写
语句结尾使用:
Tab符
if的各种假
Flase: '', None, 0, -0.0, 0.0 [], {}, (), Flase
==与is
is是比较两个引用是否指向了同一个对象(引用比较)
==是比较两个对象是否相等
a = 2
b = 2
a is b # True, 为True的原因是[-5, 256]
c = 500
d = 500
c is d # False
python解释器为了优化速度,会把[-5, 256]之间的数据提前存放到小整数对象池中,程序中要使用到[-5, 256]之间范围的数据,就不会重新创建一份,都是指向对象池中的同一份数据,除了这个区间之外的数据,每次使用时解释器都会重新申请一块内存,用来存储数据。
深拷贝和浅拷贝
浅拷贝:对于一个对象的顶层拷贝(拷贝了引用,并没有拷贝内容)
深拷贝:重新申请内存存储复制的数据.
import copy
a = [1, 2, 3]
b = a # 浅拷贝
c = copy.deepcopy(a) # 深拷贝
区别copy和deepcopy:
deepcopy:所有的内容都重新申请内存,依次拷贝
copy: 外层重新申请内存
拷贝元组的特点:
都是相同引用地址(元组是不可变类型,拷贝之后还是相同地址)