精华内容
下载资源
问答
  • Python中struct模块的用法 Python 为了保持语言的简洁,仅仅为用户提供了几种简单数据结构:int, float, str, list, dict 和 tuple。不同于编译型语言 C/C++,在 Python ,我们往往不需要关心不同类型变量在...

    Python中struct模块的用法

    Python 为了保持语言的简洁,仅仅为用户提供了几种简单的数据结构:int, float, str, list, dict 和 tuple。不同于编译型语言 C/C++,在 Python 中,我们往往不需要关心不同类型的变量在解释器内部的实现方式。例如,对于一个长整形数据,我们在 Python 2 中可以直接写成 a=123456789012345L,而不用去考虑变量 a 占了几个字节。这种抽象的方式为程序的编写提供了足够的支持,但是在某些情况下(比如读写二进制文件,进行网络 Raw Socket 编程)的时候,我们需要一些其他模块来实现我们关于变量长度控制的需求。

    struct 模块

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

    struct.pack(fmt, v1, v2, ...)
    struct.unpack(fmt, string)
    struct.calcsize(fmt)
    

    第一个函数 pack 负责将不同的变量打包在一起,成为一个字节字符串,即类似于 C 语言中的字节流。第二个函数 unpack 将字节字符串解包成为变量。第三个函数 calsize 计算按照格式 fmt 打包的结果有多少个字节。这里打包格式 fmt 确定了将变量按照什么方式打包成字节流,其包含了一系列的格式字符串。这里就不再给出不同格式字符串的含义了,详细细节可以参照 Python Doc (struct).

    使用 struct 打包定长结构

    一般而言,在使用 struct 的时候,要打包的数据都是定长的。定长的数据代表你需要明确给出要打包的或者解包的数据长度,否则打包解包函数将会出错。下面用例子说明什么是定长打包:

    import struct
    
    a = struct.pack("2I3sI", 12, 34, b"abc", 56)
    b = struct.unpack("2I3sI", a)
    
    print(b)
    
    (12, 34, b'abc', 56)
    

    上面的代码将两个整数 1234,一个字符串 “abc” 和一个整数 56 一起打包成为一个字节字符流,然后再解包。

    其中打包格式中明确指出了打包的长度:

    • "2I" 表明起始是两个unsigned int
    • "3s" 表明长度为4的字符串
    • 最后一个 "I" 表示最后紧跟一个 unsigned int

    所以上面的打印 b 输出结果是:(12, 34, ‘abc’, 56)

    我们可以调用 calcsize() 来计算 "2I3sI" 这个模式占用的字节数:

    print(struct.calcsize("2I3sI"))
    
    16
    

    可以看到上面的三个整型加一个 3 字符的字符串一共占用了 16 个字节。为什么会是 16 个字节呢?不应该是 15 个字节吗?其实,在 struct 的打包过程中,根据特定类型的要求,必须进行字节对齐。由于默认 unsigned int 型占用四个字节,因此要在字符串的位置进行4字节对齐,因此即使是 3 个字符的字符串也要占用 4 个字节。

    再看一下不需要字节对齐的模式:

    print(struct.calcsize("2Is"))
    
    9
    

    由于单字符出现在两个整型之后,不需要进行字节对齐,所以输出结果是 9.

    需要指出的是,对于 unpack 而言,只要 fmt 对应的字节数和字节字符串 string 的字节数一致,就可以成功的进行解析,否则 unpack 函数将抛出异常。

    例如我们也可以使用如下的 fmt 解析出 a:

    c = struct.unpack("2I2sI", a)
    print(struct.calcsize("2I2sI"))
    print(c)
    
    16
    (12, 34, b'ab', 56)
    

    可以看到这里 unpack 解析出了字符串的前两个字符,没有产生任何问题。

    struct 处理不定长数据

    在上一节的介绍中,我们看到了在使用 packunpack 的过程中,我们需要明确的指出打包模式中每个位置的长度。比如格式 "2I3sI" 就明确指出了整型的个数和字符串的个数。有时候,我们还可能会需要处理变长的打包数据。

    变长字符串的打包

    例如我们在程序中可能会得到一个字符串 s,这个 s 没有一个固定的长度,所以我们每次打包的时候都需要将 s 的长度也打包到一起,这样我们才能进行正确的解包。其实,这种情况在处理网络数据包中非常常见。在使用网络编程的时候,我们可能利用报文的第一个字段记录报文的长度。每次读取报文的时候,我们先读取报文的第一个字段,获取其长度之后在处理报文内容。

    我们可以采用两种方式处理这种情况:

    s = 'abcdef'
    s = bytes(s, 'utf-8')    # Or other appropriate encoding
    data = struct.pack("I%ds" % (len(s),), len(s), s)
    data
    
    b'\x06\x00\x00\x00abcdef'
    

    或者

    struct.pack("I", len(s)) + s
    
    b'\x06\x00\x00\x00abcdef'
    
    • 第一种方式先将报文转变成为字节码,然后获取字节码的长度,将长度嵌入到打包之后的报文中去。可以看到格式字符串中的 "I" 就用来记录报文的长度。
    • 第二种方式是直接将字符串的长度打包成字节字符串,再跟原始字符串做一个连接操作。

    变长字符串的解包

    根据上面的打包方式,我们可以轻松的解开打包串:

    int_size = struct.calcsize("I")
    print(int_size)
    (i,), data_unpack = struct.unpack("I", data[:int_size]), data[int_size:]
    print(i)
    print(data_unpack)
    
    4
    6
    b'abcdef'
    

    由于报文的长度 len(s) 我们使用定长的整型 "I" 进行了打包,所以解包的时候我们可以先将报文长度获取出来,之后再根据报文长度读取报文内容。

    展开全文
  • python中if判断的用法

    2020-09-10 17:23:27
    Python中的if 相比于其他的语言python中if的用法更加的放荡不羁。没有严格的括号要求,取而代之的是缩进。另外更值得注意的是python用and取代了&&,用or取代了||。话不多说直接上例子。 单个的if判断 定义...

    Python中的if

    相比于其他的语言python中if的用法更加的放荡不羁。没有严格的括号要求,取而代之的是缩进。另外更值得注意的是python用and取代了&&,用or取代了||。话不多说直接上例子。

    单个的if判断

    定义整数变量age并使用代码判断年龄范围是否正确
    age = int(input(“请输入年龄”))

    if age>0 and age<120:
    print(“年龄正确”)
    else:
    print(“年龄不正确”)
    #判断分数是否及格
    score = 1000
    if score>100:
    print(“成绩合格”)
    else:
    print(“成绩不”)

    嵌套的if判断

    #如果乘客有车票且带的刀的长度小于20可以乘车
    #定义是否有车票
    has_ticket = True
    #定义带的刀的长度
    knife_len = 12

    if has_ticket == True:
    if knife_len <=20:
    print(“可以乘车”)
    else:
    print(“不能乘车”)
    else:
    print(“不能乘车”)

    展开全文
  • 与c++,java有些不同,下面让来为大家介绍:在python中是不用声明变量类型的,不过在使用变量前需要对其赋值,没有值得变量是没有意义的,编译器也不会通过一 : 整型-----int:intpython中的用法与c++大致是一样的:...

    今天我给大家介绍的是python中的Number变量,与c++,java有些不同,下面让来为大家介绍:

    在python中是不用声明变量类型的,不过在使用变量前需要对其赋值,没有值得变量是没有意义的,编译器也不会通过

    一 : 整型-----int:

    int 在python中的用法与c++大致是一样的:

    a=12

    print a

    打印的结果就是:12

    在这里我要首先向大家介绍几个函数

    type():返回括号中的数据类型

    a="hello"

    print type(a)

    >>>>

    len():返回括号中的变量的长度

    注:使用len()方法是不能用int类型

    a="hello world"

    print len(a)

    >> >11

    二 : 浮点型------float

    浮点型由整数部分与小数部分组成,也可以用科学计数法表示

    a=1.23

    print type(a)

    >>

    三 :复数

    复数是由实数部分和虚数部分构成,可以用a+bj或comple(a,b),复数的实部a和虚部b都是浮点型

    四: 数据类型转换

    int(x) : 将x转换为一个整数

    float(x) : 将x转换为一个浮点数

    complex(x) :将x转换为一个复数,实数部分为x,虚数部分为0

    a=1.23

    print complex(a)

    >>>(1.23+0j)

    complex(x,y) : 将x和y转换为一个复数,实数部分为x,x和y是数字表达式

    五: 常量

    python中有两个比较常见的常量,即PI和E

    PI:数学常量pi(圆周率)

    E:数学常量e.即自然数

    总结

    以上所述是小编给大家介绍的Python语言的变量认识及操作方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    展开全文
  • python pack和unpack的用法

    千次阅读 2018-11-12 16:56:22
    Python是一门非常简洁的语言,对于数据类型表示,不像其他语言预定义了许多类型(如:在C#,光整型就定义了8种),它只定义了六种基本类型:字符串,整数,浮点数,元组,列表,字典。通过这六种数据类型,我们...

    Python是一门非常简洁的语言,对于数据类型的表示,不像其他语言预定义了许多类型(如:在C#中,光整型就定义了8种),它只定义了六种基本类型:字符串,整数,浮点数,元组,列表,字典。通过这六种数据类型,我们可以完成大部分工作。但当Python需要通过网络与其他的平台进行交互的时候,必须考虑到将这些数据类型与其他平台或语言之间的类型进行互相转换问题。打个比方:C++写的客户端发送一个int型(4字节)变量的数据到Python写的服务器,Python接收到表示这个整数的4个字节数据,怎么解析成Python认识的整数呢? Python的标准模块struct就用来解决这个问题。

    struct模块的内容不多,也不是太难,下面对其中最常用的方法进行介绍:

    struct.pack
    struct.pack用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,可以把这里的字符串理解为字节流,或字节数组)。其函数原型为:struct.pack(fmt, v1, v2, ...),参数fmt是格式字符串,关于格式字符串的相关信息在下面有所介绍。v1, v2, ...表示要转换的python值。下面的例子将两个整数转换为字符串(字节流):

    import struct   
      
    a = 20  
    b = 400  
      
    str = struct.pack("ii", a, b)  #转换后的str虽然是字符串类型,但相当于其他语言中的字节流(字节数组),可以在网络上传输   
    print 'length:', len(str)   
    print str   
    print repr(str)   
      
    #---- result   
    #length: 8   
    #    ----这里是乱码   
    #'/x14/x00/x00/x00/x90/x01/x00/x00'  

    格式符"i"表示转换为int,'ii'表示有两个int变量。进行转换后的结果长度为8个字节(int类型占用4个字节,两个int为8个字节),可以看到输出的结果是乱码,因为结果是二进制数据,所以显示为乱码。可以使用python的内置函数repr来获取可识别的字符串,其中十六进制的0x00000014, 0x00001009分别表示20和400。

    struct.unpack
    struct.unpack做的工作刚好与struct.pack相反,用于将字节流转换成python数据类型。它的函数原型为:struct.unpack(fmt, string),该函数返回一个元组。 下面是一个简单的例子:str = struct.pack("ii", 20, 400)   
    a1, a2 = struct.unpack("ii", str)   
    print 'a1:', a1   
    print 'a2:', a2   
      
    #---- result:   
    #a1: 20   
    #a2: 400  

    struct.calcsize
    struct.calcsize用于计算格式字符串所对应的结果的长度,如:struct.calcsize('ii'),返回8。因为两个int类型所占用的长度是8个字节。

    struct.pack_into, struct.unpack_from
    这两个函数在Python手册中有所介绍,但没有给出如何使用的例子。其实它们在实际应用中用的并不多。Google了很久,才找到一个例子,贴出来共享一下:

    import struct   
    from ctypes import create_string_buffer   
      
    buf = create_string_buffer(12)   
    print repr(buf.raw)   
      
    struct.pack_into("iii", buf, 0, 1, 2, -1)   
    print repr(buf.raw)   
      
    print struct.unpack_from('iii', buf, 0)   
      
    #---- result   
    #'/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00'   
    #'/x01/x00/x00/x00/x02/x00/x00/x00/xff/xff/xff/xff'   
    #(1, 2, -1) 

    展开全文
  • python中的字典和其他语言一样 也是key-value的形式 利用空间换时间 可以进行快速的查找 key 是唯一的 不可变的类型 比如 str int 等 不能是list之类的可变类型 1.定义 定义一个字典 格式{key:value,key:value}...
  • intpython中的用法与c++大致是一样的: a=12 print a 打印的结果就是:12 在这里我要首先向大家介绍几个函数 type():返回括号中的数据类型 \na='hello' print type(a) >>>> len():返回括号中的变量的长度 注:使用...
  • Python 随机数的用法

    2018-08-22 23:32:44
    python中随机数函数是random,其实好多语言中取随机数函数都是random 只是调用方法不一样 1.先列举一个最基本的用法 &lt;1&gt;随机数浮点型 r = random.random() print(r) 输出: 0....
  • python else用法

    千次阅读 2017-07-27 20:56:47
    但与多数编程语言不一样的是,else关键字在python中的用法不仅仅是普通的else 下面通过简单的例子说明else的三个用法 首先是最普通的,与if搭配的分支结构: [python] view plain copy print? ...
  • Python 代码,经常可以看到函数参数有 *args 和 **kwargs 这样参数。这是 Python 可变参数(也经常被称作不定长参数) 语法。本文介绍可变参数作用和用法。 在定义函数时候,经常碰到参数个数不...
  • python语言中,认识基本的数据类型是必不可少的,今天我给大家介绍几个基本数据类型: 一 · 整型 int通常被称为整型或整数,在python中的用法为: a=5 print a 打印出的结果为5,这时候a就表示为整型 二 . ...
  • 今天我给大家介绍的是python中的Number变量,与c++,java有些不同,下面让来为大家介绍: ...intpython中的用法与c++大致是一样的: a=12 print a 打印的结果就是:12 在这里我要首先向大家介绍几个函数 ...
  • Python-语言元素

    2020-01-18 15:23:39
    Python中的变量种类很多,这里只介绍几种常用的。 整型 与所有其他语言一样,整形写为int形式,需要注意的是在Python3.*中不区分int和long类型,并且支持多种进制,如: 二进制 0b000 八进制0o000 十六进制0x00...
  • Python基础知识:构造函数self用法

    千次阅读 2016-03-28 22:16:40
    Python开发(http://www.maiziedu.com/course/python-px/)编程语言中有种函数叫构造函数,在这个函数里面有一个关键词叫self,首先明确是self只有在类方法中才会有,独立函数或方法是不必带有self。...
  • Python开发(http://www.maiziedu.com/course/python-px/)编程语言中有种函数叫构造函数,在这个函数里面有一个关键词叫self,首先明确是self只有在类方法中才会有,独立函数或方法是不必带有self。...
  • Python中的else,不只是else

    千次阅读 2015-09-07 16:25:13
    但与多数编程语言不一样的是,else关键字在python中的用法不仅仅是普通的else 下面通过简单的例子说明else的三个用法 首先是最普通的,与if搭配的分支结构: num = int(input('请输入一个整数:')) if num % 2 ...
  • 其他语言中,比如C#,我们通常遍历数组是方法是: for (int i = 0; i &lt; list.Length; i++){ //todo with list[i]} 在Python中,我们习惯这样遍历: for item in sequence: process(item)...
  • 本文实例讲述了go语言变量定义用法。分享给大家供大家参考。具体如下: var语句定义了一个变量列表;跟函数参数列表一样,类型在后面。 代码如下:package main import “fmt” var x, y, z int var c, python, ...
  • Python中for循环和while循环

    千次阅读 2018-06-27 19:55:10
    (1)Python中for循环在形式上与其他语言有较大的不同,以下是C#中for循环和Python中的for循环 C#的for循环: for(int i = 0;i&lt;10;i++){} Python的for循环(for in 结构): for i in range(0,1...
  • Python的枚举类型

    千次阅读 2018-09-29 00:01:51
    Python中的枚举是作为一个类存在的,这是与其他语言的一个较为鲜明的特征,总结它的用法特点如下: 1. Python枚举作为一个类存在,使用它需要首先导入枚举模块,然后继承并自定义需要的枚举类; 2. 导入枚举模块可以...
  • 学习python的方法

    2020-07-22 11:49:52
    元祖,列表、集合、数字中的哪一种,一开始的时候不是特别习惯老是写成了int或者其他的修饰符来修饰变量了,后面习惯了这种用法发现还是比较方便了,我们在后面修改变量的时候直接可以对之前不是同一数据类型的进行...
  • Python是一种用于进行数据分析的优秀语言,主要是因为它有很多以数据为中心的packages可以使用,Pandas就是其中一个软件包,可以更轻松地导入和分析数据。 在分析数据时,很多时候用户想要查看特定列中的唯一值。 ...
  • 我们都知道,“C系语言(C\C++、C#、Java等)”都有一个共同知识点:三目运算符,其主要作用还是为了简化选择结构语句。让其不是那么冗杂,繁多,具体用法如下: C语言: #include&lt;stdio.h&gt; int...
  • Python的Strings类型

    2011-02-17 11:29:00
    常见的String类型用法  其实Python的String类型和其它的语言都很类似,可以这样定义a='Alex'或者a="Alex"可以字符串叠加,可以与整形之间相互转化,例如定义a='6' b=4+int(a),这个就相当于C#中的强制...
  • 此软件包至少需要安装Python 3.4,因为它使用IntEnum。 pip3 install wikipedia - api 用法 Wikipedia-API目标是提供简单易用API,以从Wikipedia检索信息。 波纹管是常见用例例子。 输入 import ...
  • python开发_++i,i += 1的区分 ...这样的语法在上述编程语言中可以实现自增(减),在python中也支持这样的语法,不过在python中 这样的用法不是用来自增(减),而是实现数学中的符号运算操作: 1 i = 2 2 ++ i ...
  • 在SciPython空间,针对数组表达语言的选择性嵌入式JIT专门化技术有很多尚未开发潜力和低落果实。 正在安装 Numpile需要numpy和llvmlite (后者包括所需LLVM库)。 您可以尝试使用OS软件包管理器来安装它们...

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

python语言中的int用法

python 订阅