Python-元组(tuple),文件

摘要:
如果括号中的单个对象是元组对象而不是简单表达式,Python需要特殊指令注意:在这种情况下,二进制模式用于打开用于存储腌制对象的文件,因为Python 3中始终需要二进制模式。十、 pickle程序创建并使用字节字符串对象,这些对象意味着二进制模式文件===========================================================================;在某种意义上,它是另一种数据转换工具。

基础:

1. 元组由简单对象组构成。

2. 元组与列表类似,不过不能在原处修改(它们是不可变的),并且通常写成圆括号(),而不是方框号[]中的一系列项。

==========================================================================

>>> (1,2) + (3,4)

(1,2,3,4)

>>> (1,2)*4

(1,2,1,2,1,2,1,2)

>>> T = (1,2,3,4)

>>> T[0], T[1:3]

(1, (2,3))

===========================================================================

>>> x = (40)  # An integer!

>>> x

40

>>> y = (40,)  #A tuple containing an integer

>>> y

(40,)

注:在不会引发语法冲突的情况系啊,Python允许忽略元组的圆括号。

如果圆括号里的单一对象是元组对象而不是一个简单的表达式(圆括号可以把表达式括起来), 需要对Python进行特别说明。

如果确实像得到一个远足,只要在这一单个元素之后,关闭圆括号之前加一个逗号即可。

=============================================================================

>>> T = ('cc', 'aa', 'dd', 'bb’)

>>> tmp = list(T)          # Make a list from a tuple's items

>>> tmp.sort()

>>> tmp

['aa', 'bb', 'cc', 'dd']

>>> T = tuple(tmp)          # Make a tumple from the list's items

>>> T

('aa', 'bb', 'cc', 'dd')

>>> sorted(T)            # Or use the sorted built-in

['aa', 'bb', 'cc', 'dd']

=============================================================================

>>> T = (1, [2,3], 4)

>>> T[1] = 'spam'        # This fails: can't change tuple itself

TypeError

>>> T[1][0] = 'spam'       # This works: can change mutables inside

>>> T

(1, ['spam', 3], 4)

=============================================================================

eval能够把字符串当做可执行程序代码(从技术上来讲,就是一个含有Python表达式的字符串)

>>> line = "[1,2,3]${'a':1, 'b':2} "

>>> line

"[1,2,3]${'a':1, 'b':2} "

>>> parts = line.split('$')

>>> parts

['[1,2,3]',"{'a':1, 'b':2} "]

>>> eval(parts[0])

[1,2,3]

>>> objects = [eval(P) for P in parts]

>>> objects

[[1,2,3], {'a':1, 'b':2}]

=========================================================

用pickle存储Python的原生对象

pickle与eval的区别:

eval能够执行Python的任何表达式,有可能会删除计算机上所有文件的表达式;

pickle能够存储Python原生对象,也不要求把字符串转换。

>>> D = {'a': 1, 'b': 2}

>>> F = open('datafile.pkl', 'wb')

>>> import pickle

>>> pickle.dump(D, F)      # Pickle any object to file

>>> F.close()

之后想要取回字典时,只要简单的再用一次pickle进行重建就可以了;

>>> F = open('datafile.pkl', 'wb')

>>> E = pickle.load(F)

>>> E

{'a': 1, 'b': 2}

>>> open('datafile.pkl', 'rb').read()        # Format is prone to change!

b'x90x03}qx00(Xx01x00x00…….'

注:在这里是使用二进制模式打开用于储存pickle化的对象的文件,因为二进制模式总是Python 3.X中必须的,同时pickle程序创建和使用一个bytes字符串对象,并且这些对象意味着二进制模式文件(文本模式文件意味着Python 3.X中的str字符串)

===========================================================

struct模块能够创造并解析打包的二进制数据;

从某种意义上说,它是另一个数据转换工具。

>>> F = open('data.bin', 'wb')

>>> import struct

>>> data = struct.pack('>i4sh', 7, 'spam', 8)      # Make packed binary data

>>> data

b'x00x00x00x07spamx00x08'

>>> F.wirte(data)                    # Write byte string

>>> F.close()

>>> F = open('data.bin', 'rb')

>>> data = F.read()

>>> data

b'x00x00x00x07spamx00x08'

>>> values = struct.unpack('>i4sh', data)        # Convert to Python objects

>>> values

(7, 'spam', 8)

=========================================================

引用:

>>> X = [1,2,3]

>>> L = ['a', X, 'b']

>>> D = {'x': X, 'y': 2}

>>> X[1] = 'surprise'

>>> L 

['a', [1, 'surprise', 3], 'b']

>>> D

{'x': [1, 'surprise', 3], 'y': 2}

复制:

>>> L = [1,2,3]

>>> D = {'a': 1, 'b': 2}

>>> A = L[:]

>>> B = D.copy()

>>> A[1] = 'N1'

>>> D['c'] = 'spam'

>>> L,D

([1,2,3], {'a': 1, 'c': 'spam', 'b': 2})

>>> A,B

([1, 'Ni', 3], {'a': 1, 'b': 2})

如果将引用中修改为

>>> X = [1,2,3]

>>> L = ['a': X[:], 'b']

>>> D = {'x': X[:], 'y': 2]

则X的修改不会影响到L与D

========================================================

判断“一致性”与“相等性”

>>> L1 = [1,('a', 3)]

>>> L2 = [1,('a', 3)]

>>> L1 == L2, L1 is L2

(True, False)

“==”判断相等性,“is”判断一致性;

>>> S1 = 'spam'

>>> S2 = 'spam'

>>> S1 == S2, S1 is S2

(True, True)

>>> S1 = 'a longer string'

>>> S2 = 'a longer string'

>>> S1 == S2, S1 is S2

(True, false)

理由:

Python内部暂时存储并重复使用段字符串作为最佳化,因为'spam'实际上在内存中只存在一个字符串用于分享;

=====================================================================

None对象

None是Python中一种特殊数据类型的唯一值,一般起一个空的占位作用,与C语言中的NULL指针类似。

None不是意味着“未定义”。None是某些内容,而不是没有内容。它是一个真正的对象,并且有一块内存,由Python给定一个内置的名称。

=====================================================================

复制

>>> L = [4, 5, 6]

>>> X = L * 4

>>> Y = [L] * 4

>>> X

[4,5,6,4,5,6,4,5,6,4,5,6]

>>> Y

[[4,5,6],[4,5,6],[4,5,6],[4,5,6]]

>>> L[1] = 0                # Impacts y but not X

>>> X

[4,5,6,4,5,6,4,5,6,4,5,6]          # 赋值

>>> Y

[[4,0,6],[4,0,6],[4,0,6],[4,0,6]]      # 引用

======================================================================

嵌套,无限循环

无论何时Python在对象中检测到循环,都会打印成[...],而不会陷入无限循环

>>> L = ['grail']

>>> L.append(L)

>>> L

['grail', [...]]

=======================================================================

不可变类型不可以在原处改变

如果需要,可以通过分片、合并等操作来,通过创建一个新的对象,然后向后赋值给原因用

T = (1,2,3)

T[2] = 4      #Error!

T = T[:2] +(4,)    #OK: (1,2,4)

=======================================================================

 元组支持所有一般的序列操作,但是他们没有方法,因为是不可变的而不能进行任何在原处的修改。

注:

  内置函数与表达式可以跨越多种对象类型,如内置的len函数会传回Python任何容器对象的长度(包含元素的数目),包括元组在内;

  方法特定于一种单个的对象类型,尽管通过某些方式可以在多种类型上使用(例如,索引,在列表和元组上都有效)

========================================================================

>>> L = [1,2,3,4]

>>> L[3:1] = ['?']

>>> L

[1,2,3,'?',4]

========================================================================

>>> L = [1,2,3,4]

>>> L[2] = []

>>> L

[1,2,[],4]

>>> L[2:3] = []

>>> L

[1,2,4]

>>> del L[0]

>>> L

[2,4]

>>> del L[1:]

>>> L

[2]

>>> L[1:2] =1

TypeError

=====================================================

元组的赋值运算

>>> X = 'spam'

>>> Y = 'eggs'

>>> X, Y = Y, X

>>> X

'eggs'

>>> Y

'spam'

======================================================

+ 不适用于字典,因为那不是序列;

append方法只适用于列表,不适用于字符串;

append假设其目标是可变的,因为这是一个原地的扩展,字符串是不可变的。

======================================================

免责声明:文章转载自《Python-元组(tuple),文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇配置java 环境变量(jdk)PostgreSQL 字符串操作函数 迎客下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

1-多线程与多进程

  一 进程与线程的概念 1.1 进程 考虑一个场景:浏览器,网易云音乐以及notepad++ 三个软件只能顺序执行是怎样一种场景呢?假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源。你是不是已经想到在程序A读取数据的过程中,让程序B去...

windows下使用python googleprotobuf

  首先下载:protobuf-2.5.0.tar.gz 和protoc-2.5.0-win32.zip。两者的版本要对应; 将下载的google protobuf解压,会看到一个python目录,Windows下可将vsprojectsDebug下的protoc.exe拷贝到python目录下。 在cmd下,切换到该目录,执行python setup.p...

python 面向对象

概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处。 1 2 3 4 5 6 7 8...

SpringCloud 整合 Python 服务

SpringCloud提供了一个组件Sidecar,可以将非Java的微服务整合到SpringCloud中,本质就是建立一个Sidecar工程作为代理,Sidecar工程注册到Eureka服务,同时Sidecar工程调用非Java微服务的Http接口。 吐槽:看了很多博客,都是举得一个Python微服务的例子,如果Python只有一个服务,而不是分布式的服...

Python股票历史数据的获取

获取股票数据的接口很多,免费的接口有新浪、网易、雅虎的API接口,收费的就是证券公司及相应的公司提供的接口。收费试用的接口一般提供的数据只是最近一年或三年的,限制比较多,除非money足够多。所以本文主要讨论的是免费数据的获取及处理。 国内提供股票数据的接口如sinajs,money.163.com,yahoo,它们提供的API接口不同,每家提供的数据大同...

有趣的一行 Python 代码

https://mp.weixin.qq.com/s/o9rm4tKsJeEWyqQDgVEQiQ https://mp.weixin.qq.com/s/G5F_GaUGI0w-kugOZX145g Python 这门语言非常的有趣,不仅可以做高大上的人工智能、大数据、机器学习。还可以用来做 Web、爬虫。还有其它很多的应用。今天我就给大家展示下一行 P...