声明文件字符集
# -*- coding: cp-1252 -*-
数的表示方法
100 # 十进制
0xff00 # 16进制
1.23 # 浮点数
1.23e10 # 浮点数科学计数法
数学计算
加减乘除取余与其他语言相同
17//3 #不要余数的除法
5**2 #幂运算
2 & 3 #二进制按位与
2 | 3 #二进制按位或
2 ^ 3 #二进制按位异或
2 ~ 3 #二进制按位取反
1 << 10 #二进制左移——1024
1024 >> 2 #二进制右移——256
逻辑运算采用and
or
not
表示
成员运算in
not in
身份运算(判断引用)is
is not
运算优先级:
**
~ +@ -@
* / % //
+ -
>> <<
&
^ |
<= < > >=
== !=
= %= /= //= -= += *= **=
is is not
in not in
not or and
数学函数(import math
)
abs(x) #绝对值
ceil(x) #向上取整
floor(x) #向下取整
cmp(x, y) #比较,返回-1,0,1
exp(x) #e的n次幂
fabs(x) #数值绝对值
log(x) #对数
log10(x) #含基数对数
max(x1, x2,...) #最大值
min(x1, x2,...) #最小值
modf(x) 分别返回整数部分和小数部分
pow(x, y) 幂运算
round(x [,n]) 四舍五入
sqrt(x) 平方根
三角函数:acos(x)
asin(x)
atan(x)
atan2(y, x)
cos(x)
hypot(x, y) # 欧几里得范数
sin(x)
tan(x)
degrees(x) #弧度转角度
radians(x) #角度转弧度
常量:pi
e
随机函数:
choice(seq) #随机选取
randrange ([start,] stop [,step]) #指定范围随机数
random() #0-1随机数
seed([x]) #自定义生成器
shuffle(lst) #序列随机排列
uniform(x, y) #随机x-y实数
条件&循环
python的else if写作elif
python不支持switch
while x>0:
for x in range(10):
break中断整个循环
continue跳过当前循环
pass仅仅用于占位
字符串
单双引号可互相嵌套
*
可以重复输出字符串串
r
无转移字符串
ord(str)
chr(num)
字符整数相互转化
b'adad'
bytes类型数据
decode('utf-8',errors='ignore')
解码相应字符串
可以通过数组方法索引,可以切片,可以使用成员运算符
格式化字符串: %d #十进制
%f #浮点数
%s #字符串
%x #十六进制
%o #八进制
'%d%s'%(10,'test') #%格式化
'{0:d}{1:s}'.format(10,'test') #format格式化
'''
这是大段字符串
'''
test = 'just a test'
f'{test}'
# 模板字符串
from string import Template
Template('${test}').substitute(test='just a test')
# 模板字符串声明再实例
可迭代对象
列表类似其他语言数组,表现形式相同,可以不同类型元素
元组是小括号列表
字典类似对象,但是键可以是所有不可变对象,包括元组,字典没有顺序
集合是不重复的列表
#用已有可迭代对象构建迭代器
test_1 = iter([1,2,3])
#自定义可迭代对象
def __iter__(self):
return self
所有可迭代对象除了元组都是可变对象
函数
#匿名函数
def test(cb):
print(cb(2))
test(lambda x:x)
#装饰器——任何返回函数的高阶函数
def test(dec_data):
def wrapper(function):
def dec(*args, **kw): # 原函数会被替换
print(args, kw)
print(dec_data)
return function(*args, **kw)
return dec
return wrapper
@test('shit')
def test2(a, b, *args, **kw): # 非关键字参数 关键字参数——被解析为dict
print('just a test')
test2(1, 2, 3, 4,test = 3)
print(test2.__name__)
#偏函数——固定参数
from functools import partial
def test(a, b):
if b < 5:
print('b<5')
if a < 5:
print('a<5')
test2 = partial(test,a=1,b=6)
test2()
异步相关
# 生成器在有值的时候返回
import time
def test_1():
time.sleep(1) # 一般用while
yield print('success')
test_1_runner = test_1()
next(test_1_runner)
# coroutine 协程
import time
import types
import asyncio
@types.coroutine
def test_2():
time.sleep(1)
yield print('success')
async def test_3():
await test_2()
asyncio.get_event_loop().run_until_complete(asyncio.wait([test_3()]))
# 协程在事件循环中执行
test_3().send(None)
# 协程直接执行
类相关
__
表示不能被外部访问(私有)
__init__
构造函数
(self)
所有成员函数的self参数表示自引用
class Student(object):
表示继承
# 继承
class Test_1:
name = 'name'
class Test_2(Test_1):
def __init__(self):
print(self.name)
Test_2()
# 组合依赖注入
class Test_1:
name = 'name'
class Test_2:
def __init__(self, com):
print(com().name)
Test_2(Test_1)
# 限制属性
class Test(object):
__slots__ = ('name')
test = Test()
test.name = 1
test.func = 2
# getter setter
class Test(object):
@property
def test_1(self):
return self.__test_1
@test_1.setter
def test_1(self,val):
self.__test_1 = val
__str__()
自定义打印显示
__repr__()
交互解释器中的显示
__getitem__()
数组方法访问
__getattr__()
对象方法访问
__call__
函数方法
# 枚举类
from enum import Enum
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) # 类工厂写法
# 限制不重复
from enum import Enum, unique
@unique
class Weekday(Enum):
Sun = 0 # Sun的value被设定为0
Mon = 1
Tue = 2
Wed = 3
Thu = 4
Fri = 5
Sat = 6
# 类工厂 传入类名,父类元组,属性字典
Hello = type('Hello', (object,), dict(hello=fn))
# 元类 继承type,重载__new__方法
class Test1(type):
def __new__(cls, name, bases, attrs): # 第一个参数是当前实例
attrs['name'] = lambda self, value: print(value)
return type.__new__(cls, name, bases, attrs)
class Test2(metaclass=Test1):
pass
错误
try抛出,except处理,finally执行完毕
凡是用print可以打印的地方,都可以用assert断言替代
def foo(s):
n = int(s)
assert n != 0, 'n is zero!'
return 10 / n
logging可以输出到文件,并不会抛出错误
pdb.set_trace()设置断点