python初学

  • 1.python基本结构语法
  • 1.python创建对象
  • 2.struct模块
  • 1.struct模块是什么?为什么要用到struct模块
  • 2.struct模块的常用函数(byte类型转换)
  • struct.pack==>打包成字节码
  • 3.python的socket模块(底层网络接口)
  • 1.socket的创建和关闭
  • 2.一个socket发送数据
  • 3.一个socket接受数据
  • 4.datatime模块
  • 1.datetime时间的获取
  • 2.字符串与datetime形式之间的互相转换
  • 3.不同时区的转换
  • 4.datetime的加减
  • 5.python的第三方库crc16模块
  • 6.python的线程模块
  • 7.crc常见小问题
  • 1.pass是干嘛用的
  • 2.self是什么用的
  • 八.python中的格式转换
  • 1.把2,8,10,16进制转换成10进制
  • 2.把2,8,10,16进制转换成16进制
  • 3.把2,8,10,16进制转换成2进制
  • 4.把十六进制型的字符串转换成对应的字节码
  • 4.把字节码转换成字符串或者十六进制
  • 8.getattr的使用(动态调用函数或属性)


1.python基本结构语法

print(1)#无论是import运行还是本模块之间运行本代码都会运行
def main():#调用main()函数才会运行,这就是一个普通的函数
    print(2)
if __name__ == '__main__':#当本模块直接运行时才会执行以下代码
    print(3)

1.python创建对象

2.struct模块

1.struct模块是什么?为什么要用到struct模块

在 Python 中跟二进制数据打交道的时候,就要用到 struct 这个模块了。struct 模块为 Python 与 C 的混合编程,处理二进制文件以及进行网络协议交互提供了便利。

2.struct模块的常用函数(byte类型转换)
struct.pack==>打包成字节码

同时打包多个内容(不常用)

import struct
s = "test.jpg"
sendData = struct.pack("!H8sb5sb",1,s.encode("utf-8"),0,("octet").encode("utf-8"),0)#将字符串打包成十六进制
print(sendData)#结果是b'\x00\x01test.jpg\x00octet\x00',b表示的是byte,后面是byte的编码,说明是二进制
struct.unpack("!H8sb5sb",sendData)#得到的结果是一个元组:(12, 34, b'abc', 56)
struct.calcsize("2I3sI")#计算所占用的字节数

注意:python默认使用Unicode编码,而struct必须要传入“utf-8”格式,因此要用.encode(“utf-8”)来更改编码格式

3.python的socket模块(底层网络接口)

1.socket的创建和关闭

------tcp

import socket
#1.创建tcp套接字s
#AF_INET说明是Internet进程间通信,AF_UNIX说明是本机进程间的通信
#SOCK_STREAM流式嵌套字(tcp协议),SOCK_DGRAM是数据报嵌套字,用于UDP
s1=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.使用TCP套接字功能,调用功能函数
#3.关闭套接字
s1.close()

-----udp

import socket
#1.创建udp套接字s
s2=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#2.使用TCP套接字功能,调用功能函数
#3.关闭套接字
s2.close()
2.一个socket发送数据
s1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s1.sendto(b"hhhh",("196.168.1.103",8080))#s1.sendto(("hhhh").encode("utf-8"),("196.168.1.103",8080))
    s1.close()

#要传入bite类型的数据(加上b或转换成utf-8的格式),不能传入str类型。

3.一个socket接受数据

接受数据前提是有一个固定的ip地址和端口。因此我们需要给套接字设定一个固定的端口号。

s1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    ip_port = ('', 20001)#绑定本机ip和任意一个大于1024的端口
    s1.bind(ip_port)#给套接字绑定一个固定端口
    recv_data=s1.recvfrom(1024)#本次接受的最大字节数为1024(1kb):接受到数据是一个元组例如:(b"hhhh",("196.168.1.103",8080))8.1.103",8080))
    print(recv_data[0].decode('gbk'))#显示接受的数据。[0]就是收到的数据内容,转化成gbk格式就不会中文乱码
    s1.close()

4.datatime模块

1.datetime时间的获取
#1.datetime时间的获取
timenow = datetime.now()# 获取当前时间,结果:2021-09-03 12:21:40.741251
ordinal = datetime(1970, 1, 2)#创建指定时间datetime# (1970-01-01 00:00:00)
timenow.timestamp()# 获取从1970年1月1日0点分秒到timenow经过了多少秒
2.字符串与datetime形式之间的互相转换
#2.字符串与datetime形式之间的互相转换
cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')#把本初始化格式的字符串转换成datetime的形式
nowStr=timenow.strftime('%a, %b %d %H:%M')#把datetime形式数据转换成本初始化格式的字符串
3.不同时区的转换
4.datetime的加减
timenow = datetime.now()
ordinal = datetime(1970, 1, 2)
t1=timenow-ordinal#1.两者距离的时间 18872 days, 12:50:31.088031
t2=t1.seconds#2.seconds获取的是仅仅是时间差的秒数,忽略微秒数,忽略天数。 total_seconds()是获取两个时间之间的总差。45912
t3=t1.total_seconds()#3.距离的总时间

5.python的第三方库crc16模块

6.python的线程模块

7.crc常见小问题

1.pass是干嘛用的

pass是用来做标记的,表示待完成的内容

def __init__(self):
        pass#pass是用来做标记的,表示待完成的内容
2.self是什么用的

在类中定义方法时会自动跳出这个self(也可以改为a,b),相当于java中的this嘛。

class a:
    def __init__(self):
        pass

八.python中的格式转换

1.把2,8,10,16进制转换成10进制
x = '10'
int(x, 2)#结果是2
int(x,8)#结果是8
int(x,16)#结果是16
2.把2,8,10,16进制转换成16进制
x = '10'
hex(int(x,2))#结果是2
hex(int(x,8))#结果是8
hex(int(x,10))#结果是16
3.把2,8,10,16进制转换成2进制
x = '10'
bin(int(x,2))#结果是  0b10
bin(int(x,8))#结果是  0b1000
bin(int(x,16))#结果是  0b10000
4.把十六进制型的字符串转换成对应的字节码
#字符串编码为字节码
'123abc'.encode('ascii')                  #b'123abc'
'123abc'.encode('utf-8')                  #b'123abc'

#十六进制字符串转字节
x="ff011a"
bytes.fromhex(x)                         #把"ff011a"转换成b'\xff\x01\x1a'


#十六进制数组转字节串
bytes([0x01,0x02,0x03,0xff])              #b'\x01\x02\x03\xff'
4.把字节码转换成字符串或者十六进制
#字节码解码为字符串
bytes(b'123abc\xe5\xa5\xbd').decode('utf-8')         #'123abc好'
#字节串转16进制表示
str(bytes(b'123abc\xe5\xa5\xbd'))                    #"b'123abc\\xe5\\xa5\\xbd'"
str(bytes(b'123abc\xe5\xa5\xbd'))[2:-1]              #'123abc\\xe5\\xa5\\xbd'
#字节串转换成16进制数组
[hex(i) for i in bytes(b'123')]                      #['0x31', '0x32', '0x33']

------编码与解码的运用如下:

bs=bytes(b'123abc\xe5\xa5\xbd')
str=bs.decode('utf-8')
print(bs)#b'123abc\xe5\xa5\xbd'
print(str)#123abc好
print(str.encode('utf-8'))#b'123abc\xe5\xa5\xbd'

8.getattr的使用(动态调用函数或属性)