返回顶部
首页 > 资讯 > 后端开发 > Python >[PYTHON] 核心编程笔记之七-Py
  • 320
分享到

[PYTHON] 核心编程笔记之七-Py

核心笔记PYTHON 2023-01-31 01:01:05 320人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

7.1 映射类型:字典字典是python语言中唯一的映射类型,映射类型对象里哈希值(键)和指向的对象(值)是一对多的关系,字典对象可变,它是一个容器类型,能存储任意个Python对象注:什么是哈希表?哈希表是一种数据结构:哈希表中存储的每一

7.1 映射类型:字典


字典是python语言中唯一的映射类型,映射类型对象里哈希值(键)和指向的对象(值)是一对多的关系,字典对象可变,它是一个容器类型,能存储任意个Python对象


注:什么是哈希表?

哈希表是一种数据结构:哈希表中存储的每一条数据,叫做一个值(value),是根据与它相关的一个键(key)的数据项进行存储的,键和值合在一起呗称为"键-值 对"

哈希表的算法是获取键,对键执行一个叫做哈希函数的操作,并根据计算结果,在数据结构的某个地址来存储你的值


如何创建字典和给字典赋值:

>>> dict1 = {}

>>> dict2 = {'name':'earth','port':80}

>>> dict1,dict2

({}, {'name': 'earth', 'port': 80})


用工厂方法dict()来创建字典

>>> fdict = dict((['x',1],['y',2]))

>>> fdict

{'y': 2, 'x': 1}


使用内建方法fromkeys()创建一个默认字典

>>> ddict = {}.fromkeys(('x','y'),-1)

>>> ddict

{'y': -1, 'x': -1}

>>> edict = {}.fromkeys(('foo','bar'))

>>> edict

{'foo': None, 'bar': None}


如何访问字典中的值:

>>> dict2 = {'name':'earth','port':80}        

>>> for key in dict2.keys():                  

...   print 'key=%s,value=%s' %(key,dict2[key])

...

key=name,value=earth

key=port,value=80


>>> for key in dict2:                          

...   print 'key=%s,value=%s' %(key,dict2[key])

...

key=name,value=earth

key=port,value=80


获取字典某个元素值:

>>> dict2['name']

'earth'

>>> print 'host %s is running on port %d' %(dict2['name'],dict2['port'])

host earth is running on port 80


检查字典中是否有某个键的方法 has_key()或in,not in

>>> 'name' in dict2

True

>>> 'server' in dict2

False

>>> 'name' in dict2  

True

>>> dict2['name']

'earth'

>>> dict2.has_key('server')

False

>>> dict2.has_key('name')  

True


一个字典中混用数字和字符串的例子:

>>> dict3 = {}

>>> dict3[1] = 'abc'

>>> dict3['1'] = 3.14159

>>> dict3[3.2] = 'xyz'

>>> dict3

{'1': 3.14159, 1: 'abc', 3.2: 'xyz'}


整体赋值:

>>> dict3 = {'1': 3.14159, 1: 'abc', 3.2: 'xyz',33:'hehe'}

>>> dict3

{'1': 3.14159, 1: 'abc', 3.2: 'xyz', 33: 'hehe'}


更新字典:

>>> dict2['name'] = 'venus'

>>> dict2['port'] = 6969

>>> dict2['arch'] = 'sunos5'

>>> print 'host %(name)s is running on port %(port)d' %dict2

host venus is running on port 6969


删除字典元素和字典

>>> dict2

{'arch': 'sunos5', 'name': 'venus', 'port': 6969}

>>> del dict2['name']

>>> dict2

{'arch': 'sunos5', 'port': 6969}

>>> dict2.clear()

>>> dict2

{}

>>> del dict2

>>> dict2

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

NameError: name 'dict2' is not defined

>>> dict3

{'1': 3.14159, 1: 'abc', 3.2: 'xyz', 33: 'hehe'}

>>> dict3.pop(33)    

'hehe'

>>> dict3

{'1': 3.14159, 1: 'abc', 3.2: 'xyz'}


注:避免使用内建对象名字作为变量的标识符

类似: dict,list,file,bool,str,input,len


7.2 映射类型操作符

7.2.1 标准类型操作符

>>> dict4 = {'abc': 123}

>>> dict5 = {'abc': 456}

>>> dict6 = {'abc':123,98.6:37}

>>> dict7 = {'xyz':123}

>>> dict4 < dict5

True

>>> (dict4 < dict6) and (dict4 < dict7)

True

>>> (dict4 < dict6) and (dict5 < dict7)

True

>>> dict6 < dict7

False


7.2.2 映射类型操作符


字典的键超找操作符 ([])

>>> 'name' in dict2

True

>>> 'phone' in dict2

False


7.3 映射类型的内建函数和工厂函数

7.3.1 标准类型函数[type(),str()和cmp()]


字典比较算法

>>> dict1 = {}

>>> dict2 = {'host':'earth','port':80}

>>> cmp(dict1,dict2)

-1

>>> dict1['host'] = 'earth'

>>> cmp(dict1,dict2)

-1

>>> dict1['port'] = 80          

>>> cmp(dict1,dict2)

0

>>> dict1['port'] = 'tcp'

>>> cmp(dict1,dict2)

1

>>> dict2['port'] = 'udp'

>>> cmp(dict1,dict2)    

-1

>>> cdict = {'fruits':1}

>>> ddict = {'fruits':1}

>>> cmp(cdict,ddict)

0

>>> cdict['oranges'] = 0

>>> cdict['apples'] = 0        

>>> cmp(cdict,ddict)

1


7.3.2 映射类型相关的函数


dict()

>>> dict(zip(('x','y'),(1,2)))

{'y': 2, 'x': 1}

>>> dict([['x',1],['y',2]])  

{'y': 2, 'x': 1}

>>> dict([('xy'[i-1],i) for i in range(1,3)])

{'y': 2, 'x': 1}


>>> dict(x=1,y=2)

{'y': 2, 'x': 1}

>>> dict8 = dict(x=1,y=2)

>>> dict8

{'y': 2, 'x': 1}

>>> dict9 = dict(**dict8)

>>> dict9

{'y': 2, 'x': 1}


>>> dict9 = dict8.copy()

>>> dict9

{'y': 2, 'x': 1}


len()

>>> dict2 = {'name':'earth','port':80}

>>> dict2

{'name': 'earth', 'port': 80}

>>> len(dict2)

2


7.4 映射类型内建方法

>>> dict2.keys()

['name', 'port']

>>> dict2.values()

['earth', 80]

>>> dict2.items()

[('name', 'earth'), ('port', 80)]

>>> for eachKey in dict2.keys():

...   print 'dict2 key',eachKey, 'has value',dict2[eachKey]

...

dict2 key name has value earth

dict2 key port has value 80


字典类型方法


方法名称操作

dict.clear()删除字典里所有元素

dict.copy()返回字典(浅复制)的一个副本

dict.fromkeys(seq,va1=None)创建并返回一个新字典,以seq中的元素做该字典的键,val做该字典中所有键对应的初始值(如果不提供此值,默认为None)

dict.get(key,default=None)对字典dict中的键key,返回它对应的值value,如果字典中不存在此键,则返回       default的值(参数default的默认值为None)

dict.has_key

dict.items()返回一个包含字典中(键,值)对元组的列表

dict,keys()返回一个包含字典中键的列表

dict.iter()

dict.pop(key[,default])如果字典中key键存在,删除并返回dict[key],不存在,且灭有给出没认值,会引发KeyError异常

dict.setdefault(key,default=None) 如果字典不存在key键,由dict[key]=default为它赋值

dict.update(dict2)将字典dict2键值对添加到字典dict

dict.values()返回一个包含字典中所有值的列表


例:

--------------------------------

for eachKey in sorted(dict2):

...   print 'dict2 key',eachKey,'has value,dict2[eachKey]'

dict2 key name has value

dict2 key port has value

---------------------------------


update()

----------------------

>>> dict2 = {'host':'earth','port':80}

>>> dict3 = {'host':'venus','server':'Http'}

>>> dict2

{'host': 'earth', 'port': 80}

>>> dict2.update(dict3)

>>> dict2

{'host': 'venus', 'port': 80, 'server': 'http'}

>>> dict3.clear()

>>> dict3

{}

-----------------------


copy()

-----------------------

>>> dict4 = dict2.copy()

>>> dict4

{'host': 'venus', 'port': 80, 'server': 'http'}

>>> dict4.get('host')

'venus'

>>> dict4.get('xxx')

>>> type(dict4.get('xxx'))

<type 'NoneType'>

>>> dict4.get('xxx','no such key')

'no such key'

-------------------------


setdefault()

-------------------------------------

>>> myDict = {'host':'earth','port':80}

>>> myDict.keys()

['host', 'port']

>>> myDict.items()

[('host', 'earth'), ('port', 80)]

>>> myDict.setdefault('port',8080)

80

>>> myDict.setdefault('prot','tcp')

'tcp'

>>> myDict.items()

[('host', 'earth'), ('prot', 'tcp'), ('port', 80)]

-------------------------------------


fromkeys()

--------------------------------------

>>> {}.fromkeys('xyz')

{'y': None, 'x': None, 'z': None}

>>> {}.fromkeys(('love','hour'),True)

{'love': True, 'hour': True}

--------------------------------------


7.5 字典的键

7.5.1 不允许一个键对应多个值


>>> dict1 = {'foo':789,'foo':'xyz'}

>>> dict1

{'foo': 'xyz'}

>>> dict1['foo'] = 123

>>> dict1

{'foo': 123}


7.5.2键必须是可哈希的


# vi userpw.py

-----------------------------

#!/usr/bin/env python

db = {}

def newuser():

   prompt= 'please reGISt your name: '

   while True:

       name = raw_input(prompt)

       if db.has_key(name):

           prompt = 'name taken,try another: '

           continue

       else:

           break

   pwd = raw_input('passswd: ')

   db[name] = pwd

   print 'Newuser [%s] has added successfully!' %name

def olduser():

   name = raw_input('login: ')

   pwd = raw_input('passwd: ')

   passwd = db.get(name)

   if passwd == pwd:

       print 'welcome back',name

   else:

       print 'login incorrect!'


def showmenu():

   prompt = """

(N)ew User Login

(E)xisting User Login

(Q)uit

Enter choice: """

   while True:

       try:

           choice = raw_input(prompt).strip()[0].lower()

           print '\nYou picked: [%s]' % choice

           if choice not in 'neq':

               print 'invalid option,please try again'

           if choice == 'n':

               newuser()

           if choice == 'e':

               olduser()

           if choice == 'q':

               break

       except(EOFError,KeyboardInterrupt):

           print 'invalid option,please try again'


if __name__ == '__main__':

   showmenu()

-----------------------------


7.6 集合类型


如何创建集合类型和给集合赋值:

集合与列表和字典不同,没有特别语法格式

用集合的工厂方法可变集合set()和不可变集合frozenset()

>>> s = set('cheeseshop')

>>> s

set(['c', 'e', 'h', 'o', 'p', 's'])

>>> t = frozenset('bookshop')

>>> t

frozenset(['b', 'h', 'k', 'o', 'p', 's'])

>>> type(s)

<type 'set'>

>>> type(t)

<type 'frozenset'>

>>> len(s)

6

>>> len(s) == len(t)

True

>>> s == t

False


如何访问集合中的值:


>>> 'k' in s

False

>>> 'k' in t

True

>>> 'c' not in t

True

>>> for i in s:

...     print i

...

c

e

h

o

p

s


如何更新集合:

>>> s.add('z')

>>> s

set(['c', 'e', 'h', 'o', 'p', 's', 'z'])

>>> s.update('pypi')

>>> s

set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y', 'z'])

>>> s.remove('z')

>>> s

set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y'])

>>> s -= set('pypi')

>>> s

set(['c', 'e', 'h', 'o', 's'])


只有可变集合能被修改,修改不可变集合会引发异常

>>> t.add('z')

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

AttributeError: 'frozenset' object has no attribute 'add'


删除集合中的成员和集合

>>> del s

>>> s

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

NameError: name 's' is not defined


7.7 集合类型操作符


7.7.1 标准类型操作符(所有的集合类型)

成员关系(in,not in)

>>> s = set('cheeseshop')

>>> t = frozenset('bookshop')

>>> 'k' in s

False

>>> 'k' in t

True

>>> 'c' not in t

True


集合等价/不等价

>>> s == t

False

>>> s != t

True

>>> u = frozenset(s)

>>> s == u

True

>>> set('posh') == set('shop')

True


子集/超集

>>> set('shop') < set('cheeseshop')

True

>>> set('bookshop') >= set('shop')

True


7.7.2 集合类型操作符(所有的集合类型)


联合(|)

等价于or或uNIOn()方法

>>> s | t

set(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])


交集(&)

等价于and或intersection()方法

>>> s & t

set(['h', 's', 'o', 'p'])


差补

指一个集合,只属于集合s,而不属于集合t

>>> s - t

set(['c', 'e'])


对称差分(^)

指一个集合,只属于集合s或集合t,但不能同时属于两个集合

>>> s ^ t

set(['b', 'e', 'k', 'c'])


7.7.3 集合类型操作符(仅适用于可变集合)

|= 等价于update()


>>> s = set('cheeseshop')

>>> u = frozenset(s)

>>> s |= set('pypi')

>>> s

set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y'])


7.8 内建函数:

7.8.1 标准类型函数:

len()

把集合作为参数传递给内建函数len(),返回集合的基数(或元素的个数)

>>> s = set(u)

>>> s

set(['p', 'c', 'e', 'h', 's', 'o'])

>>> len(s)

6


7.8.2集合类型工厂函数

set() and frozenset()


>>> set()

set([])

>>> set([])

set([])

>>> set(())

set([])

>>> set('shop')

set(['h', 's', 'o', 'p'])

>>> frozenset(['foo','bar'])

frozenset(['foo', 'bar'])

>>> f = open('numbers','w')

>>> for i in range(5):

...   f.write('%d\n' %i)

...

>>> f.close()

>>> f = open('numbers','r')

>>> set(f)

set(['0\n', '3\n', '1\n', '4\n', '2\n'])

>>> f.close()


7.9.1 方法

7.9.2 方法(仅适用于可变集合)

7.9.3 操作符和内建方法比较


方法名操作

s.update(t)用t中的元素修改s,即s包含s或t的成员

....

s.add(obj)在集合s中添加对象obj

s.remove(obj)从集合s中删除对象obj,如果obj不是集合s中的元素,将引发keyError错误

s.discard(obj)如果obj是集合s中的元素,从集合s中删除对象obj

s.pop()删除集合s中任意一个对象,并返回它

s.clear()删除集合s中的所有元素


7.10 操作符,函数/方法


7.11 相关模块


.....





--结束END--

本文标题: [PYTHON] 核心编程笔记之七-Py

本文链接: https://lsjlt.com/news/183457.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • [PYTHON] 核心编程笔记之七-Py
    7.1 映射类型:字典字典是Python语言中唯一的映射类型,映射类型对象里哈希值(键)和指向的对象(值)是一对多的关系,字典对象可变,它是一个容器类型,能存储任意个Python对象注:什么是哈希表哈希表是一种数据结构:哈希表中存储的每一条...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记之八-Py
    8.1 if语句if expression:    expr_true_suite8.1.1 多重条件表达式单个if 语句可以通过使用and,or和not实现多重判断条件或是否定判断条件if not warn and (system_loa...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记之十-Py
    10.1 什么是异常10.1.1 错误错误时语法或是逻辑上的,语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译当Python检测到一个错误时,解释器就会支出当前流已经无法继续执行下去,这时就出现了异常10.1.2 异常1...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记之六-Py
    6.序列:字符串,列表和元祖6.1序列6.1.1标准类型操作符6.1.2序列类型操作符成员关系操作符(in,not in)判断一个元素是否属于一个序列字符串判断一个字符是否属于这个字符串元祖判断一个对象是否属于该对象序列in/not in ...
    99+
    2023-01-31
    之六 核心 笔记
  • [PYTHON] 核心编程笔记之九-Py
    9.2 文件内建函数[open()和file()]内建函数open()[以及file()]提供了初始化输入/输出(I/0)操作的通用接口,open()内建函数成功打开文件后会返回一个文件对象,否则引发一个错误,当操作失败,Python会产生...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记之五-Py
    5.1 数字类型创建数值对象和给变量赋值anInt = 1aLong = -9999999999LaFloat = 3.1415926aComplex = 1.23+4.56j如何更新数字对象变量像一个指针指向装变量值的盒子,对不可变类型来...
    99+
    2023-01-31
    之五 核心 笔记
  • [PYTHON] 核心编程笔记之四-Py
    4.1 Python 对象Python 使用对象模型来存储数据所有的Python对象都拥有三个特性: 身份,类型和值:身份: 每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到,这个值可以认为是该对象的内存地...
    99+
    2023-01-31
    之四 核心 笔记
  • [PYTHON]核心编程笔记(15.Py
    核心笔记:查找与匹配的比较15.1.1 您的第一个正则表达式:15.2 正则表达式使用的特殊符号和字符常用正则表达式符号和特殊符号:记号       说明                                          举...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(16.P
    16.1 介绍16.1.1 什么是客户/服务器架构硬件的客户/服务器架构软件客户/服务器架构16.1.2 客户/服务器网络编程16.2 套接字: 通讯端点16.2.1 什么是套接字套接字是一种具有通讯端点感念的计算机网络数据结构16.2.2...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(14.P
    在python中有多种运行外部程序的方法,比如,运行操作系统命令或另外的python脚本,或执行一个磁盘上的文件,或通过网络来运行文件在特定执行场景包括:在当前脚本继续运行创建和管理子进程执行外部命令或程序执行需要输入的命令通过网络来调用命...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(13.P
    13.1 介绍类与实例:类与实例相互关联,类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息下面的示例展示如何创建一个类:class MyNewObjectType(bases):    'define MyNewO...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(17.P
    17.1 什么是因特网客户端17.2 文件传输17.2.1 文件传输因特网协议流行的有文件传输协议(FTP),Unix-to-Unix复制协议(UUCP),以及网页的超文本传输协议(HTTP),另外,还有(Unix下的)远程文件复制指令sc...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(11.P
    11.1 什么是函数函数式对程序逻辑进行结构化或过程化的一种编程方法,能够整块代码巧妙地隔离成易于管理的小块以下为创建,使用,或引用函数的方法:declaration/definition def foo(): print 'bar'fun...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(20.W
    20.1 介绍20.1.1 Web应用:客户端/服务器计算20.1.2 因特网20.2 使用Python进行Web应用:创建一个简单的Web客户端20.2.1 统一资源定位符20.2.2 urlparse模块urlparse(urlstr,...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • 并发编程系列---【线程池七大核心参数】
    一、七大核心参数 corePoolSize                            核心线程数 maximumPoolSize                   最大线程池参数 keepAliveTime       ...
    99+
    2023-09-03
    java jvm 开发语言
  • 《Python核心编程》第五章
    5-1.整型。讲讲Python普通整型和长整型的区别?   答案:    在大多数32位机器上,标准整型的取值范围是-2^31~2^31-1,如果在64位机器上使用64位编译器编译的Python,则整型是64位的。而长整型能表示的数值仅仅与...
    99+
    2023-01-31
    第五章 核心 Python
  • Python核心编程第三版
    Python核心编程第三版高清版 PDF链接: https://pan.baidu.com/s/16jAUKZc3wHUoFZbPnhpVMw 密码: 2y8d ...
    99+
    2023-01-31
    第三版 核心 Python
  • Python核心编程习题解答
    最近在学Python,准备把《Python核心编程(第二版)》上课后有意思的习题做一做,也算是对语言的内容更熟悉一些。我做的代码在github上(链接),可以上去根据题号查看或搜索。难免有理解或做得不对的地方,请指正或一起讨论。慢慢来,踏实...
    99+
    2023-01-31
    习题 核心 Python
  • c++核心编程之函数的重载
    目录1.函数重载概述2.函数重载的注意事项1.函数重载概述 ​作用​:函数可以相同,提高复用性 ​函数重载必须满足的条件​: 1​.同一个作用域下​2.​函数名称相同​3.函数​参...
    99+
    2024-04-02
  • python核心编程(第三版)网络编程错
    //服务器端代码from socket import * from time import ctime host='localhost' port=3330 bufsize = 1024 addr = (host,port) tcp...
    99+
    2023-01-30
    第三版 网络编程 核心
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作