Python语言基础

声明文件字符集

# -*- 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()设置断点


Python语言基础_第1张图片
星空.jpg

你可能感兴趣的:(Python语言基础)