iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >[PYTHON] 核心编程笔记(16.P
  • 776
分享到

[PYTHON] 核心编程笔记(16.P

核心笔记PYTHON 2023-01-31 06:01:56 776人浏览 泡泡鱼

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

摘要

16.1 介绍16.1.1 什么是客户/服务器架构?硬件的客户/服务器架构软件客户/服务器架构16.1.2 客户/服务器网络编程16.2 套接字: 通讯端点16.2.1 什么是套接字?套接字是一种具有通讯端点感念的计算机网络数据结构16.2

16.1 介绍


16.1.1 什么是客户/服务器架构?


硬件的客户/服务器架构


软件客户/服务器架构


16.1.2 客户/服务器网络编程


16.2 套接字: 通讯端点


16.2.1 什么是套接字?


套接字是一种具有通讯端点感念的计算机网络数据结构


16.2.2 套接字地址:主机与端口


主机和端口类似区号和电话号码的一对组合

合法的端口号范围是0到65535,小于1024的端口号为系统保留端口


16.2.3 面向连接与无连接


面向连接(tcp)


套接字只有两种一种是面向连接套接字,即在通讯之前一定要建立一条连接,这种通讯方式提供了顺序的,可靠的不会重复的数据传输,每一份要发送的信息都会拆分成多份,每份都会不多不少的到达目的地后重新按顺序拼装起来,传给正在等待的应用程序


实现这种连接的主要协议就是传输控制协议(即TCP)

要创建TCP套接字就得在创建的时候指定套接字类型为SOCK_STREAM,表示为流套接字


无连接(UDP)


与虚电路相反的数据报型是无连接套接字,即无需建立连接就可以进行通讯,这意味着数据到达的顺序,可靠性及数据不重复性就无法保证,数据会保留在数据边界,数据不会像TCP协议那样被拆封为小块


使用数据报来传输数据就像邮政服务,邮件包裹不一定会按照他们发送的顺序到达,而且可能还到达不了,而且还可能被重传


由于面向连接套接字提供一些维持虚电路连接的开销,数据报较他来说基本上没有负担,所以它能更好的×××能,适合于某些应用场合


实现这种连接的主要协议就是用户数据报协议(即UDP)

要创建UDP套接字就得在创建的时候指定套接字类型为SOCK_DGRAM,即datagram数据报


由于这些套接字使用Internet协议来查找网络中的主机,这样形成的整个系统一般都会由这两对协议(TCP/IP)和(UDP/IP)来提及


16.3 python中的网络编程


本节我们主要使用Socket模块,模块中的socket()函数被用来创建套接字,其有自己的一套函数来提供基于套接字的网络传输


16.3.1 socket()模块函数:

创建套接字语法:

socket(socket_family,socket_type,protocol=0)


socket_family可以是AF_UNIX或AF_INET,soket_type可以是SOCK_STREAM或SOCK_DGRAM,protocal一般不填,默认为0


创建一个TCP/IP套接字,需要调用socket.socket()

tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


创建一个UDP/IP套接字,需要调用socket.socket()

udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)


使用from socket import * 将socket模块里的所有属性带到命名空间里

当我们创建了套接字对象后,所有的交互豆浆通过对该套接字对象的方法进行调用


16.3.2 套接字对象(内建)方法


函数描述

s.bind()绑定地址(主机,端口号对)到套接字

s.listen()开始TCP监听

s.accept()被动接受TCP服务器连接,(阻塞式)等待连接到来

s.connect()主动初始化TCP服务器连接

s.connect_ex()connect()函数的扩展版本,出错时返回出错码,而不是抛异常公共用途的套接字函数

s.recv()接收TCP数据

s.send()发送TCP数据

s.sendall()完整发送TCP数据

s.recvfrom()接收UDP数据

s.sendto()发送UDP数据

s.getpeername()连接到当前套接字的远端地址

s.getsockname()当前套接字的地址

s.getsockopt()返回指定套接字的参数

s.setsockopt()设置指定套接字的参数

s.close()关闭套接字


s.setblocking()设置套接字的阻塞与非阻塞模式

s.settimeout()设置阻塞套接字操作的超时时间

s.gettimeout()得到阻塞套接字操作的超市时间

面向文件的套接字的函数

s.fileno()曹姐字的文件描述符

s.makefile()创建一个与该套接字关联的文件


16.3.3 创建一个TCP服务器


ss.socket()#创建服务器套接字

ss.bind()#把地址绑定到套接字上

ss.listen()#监听连接

inf_loop()#服务器无限循环

cs=ss.accept()#接受客户的连接

comm_loop()#通讯循环

cs.recv()/cs.send()#对话(接收与发送)

cs.close()#关闭客户套接字

ss.close()#关闭服务器套接字(可选)


所有套接字都用socket().socket()函数创建,服务器需要"坐在某个端口上"等待请求,所以需要绑定到一个本地地址上,TCP服务器负责监听连接,设置完,服务器就可以进行无限循环了


默认服务器会调用accept()阻塞式函数等待连接,来之前程序一直会处于挂起状态


一旦接收到一个连接,accept()函数就会返回一个单独的客户的套接字用于后续通讯.


例,tsTserv.py文件会创建一个TCP服务程序,这个程序会把客户发过来的字符串加上一个时间戳(格式:'[时间]数据')返回给客户


# vi tsTserv.py

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

#!/usr/bin/env Python

#coding: UTF-8


from socket import *

from time import ctime


HOST = ''               #绑定IP

PORT = 21567            #端口号

BUFSIZ = 1024           #缓冲1K

ADDR = (HOST,PORT)


tcpSerSock = socket(AF_INET, SOCK_STREAM)

tcpSerSock.bind(ADDR)   #套接字

tcpSerSock.listen(5)    #最大连接数


while True:

   print 'waiting for connection...'

   tcpCliSock,addr = tcpSerSock.accept()

   print '...connected from: ', addr


   while True:

       data = tcpCliSock.recv(BUFSIZ)

       if not data:

           break

       tcpCliSock.send('[%s] %s'%(ctime(),data))

       print [ctime()],':',data


tcpCliSock.close()

tcpSerSock.close()

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


16.3.4 创建TCP客户端


cs = socket()#创建客户套接字

cs.connect()#尝试连接服务器

comm_loop#通讯循环

cs.send()/cs.recv()#对话(发送/接收)

cs.close()#关闭客户套接字


所有套接字都由socket.socket()函数创建,在客户有了套接字之后,可以调用connect()函数去连接服务器,连接服务器后,就可以与服务器对话,对话结束可关闭套接字结束连接


例,程序连接到服务器,提示用户输入要传输的数据,然后显示服务器返回的加了时间戳的结果


# vi tsTclnt.py

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

#!/usr/bin/env python

from socket import *


HOST = '192.168.8.18'

PORT = 21567

BUFSIZ = 1024

ADDR = (HOST, PORT)


tcpCliSock = socket(AF_INET, SOCK_STREAM)

tcpCliSock.connect(ADDR)


while True:

   data = raw_input('>')

   if not data:

       break

   tcpCliSock.send(data)

   data = tcpCliSock.recv(BUFSIZ)

   if not data:

       break

   print data

tcpCliSock.close()

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


16.3.5 运行我们的客户端与服务器程序


# python tsTserv.py

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

waiting for connection...

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


# python tsTclnt.py

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

>send test data

[Thu Dec 19 12:46:36 2013] send test data

>hi

[Thu Dec 19 12:46:51 2013] hi

>how are you?

[Thu Dec 19 12:47:08 2013] how are you?

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


# python tsTserv.py

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

waiting for connection...

...connected from:  ('192.168.8.19', 56868)

['Thu Dec 19 12:46:36 2013'] : send test data

['Thu Dec 19 12:46:51 2013'] : hi

['Thu Dec 19 12:47:08 2013'] : how are you?

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


核心提示:

"友好地"退出的一个方法就是把服务器无限循环放在一个try-except语句中try子句中,并捕获EOFError和KeyboardInterrupt异常,在异常处理子句中,调用close()函数关闭服务器的套接字


例:

# vi tsTserv.py

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

root@ubuntu:~/python# vi tsTserv.py    


#!/usr/bin/env python

#coding: UTF-8


from socket import *

from time import ctime


HOST = ''               #绑定IP

PORT = 21567            #端口号

BUFSIZ = 1024           #缓冲1K

ADDR = (HOST,PORT)


tcpSerSock = socket(AF_INET, SOCK_STREAM)

tcpSerSock.bind(ADDR)   #套接字

tcpSerSock.listen(5)    #最大连接数


try:

   while True:

       print 'waiting for connection...'

       tcpCliSock,addr = tcpSerSock.accept()

       print '...connected from: ', addr


       while True:

           data = tcpCliSock.recv(BUFSIZ)

           if not data:

               break

           tcpCliSock.send('[%s] %s'%(ctime(),data))

           print [ctime()],':',data

except EOFError,KeyboardInterrupt:

   tcpCliSock.close()

   tcpSerSock.close()

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


# vi tsTclnt.py

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

#!/usr/bin/env python

from socket import *


HOST = '192.168.8.18'

PORT = 21567

BUFSIZ = 1024

ADDR = (HOST, PORT)


tcpCliSock = socket(AF_INET, SOCK_STREAM)

tcpCliSock.connect(ADDR)

try:

   while True:

       data = raw_input('>')

       if not data:

           break

       tcpCliSock.send(data)

       data = tcpCliSock.recv(BUFSIZ)

       if not data:

           break

       print data

except EOFError,KeyboardInterrupt:

   tcpCliSock.close()

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


16.3.6 创建一个UDP服务器


ss = socket()#创建一个服务器套接字

ss.bind()#绑定服务器套接字

inf_loop:#服务器无限循环

cs = ss.recvfrom()/ss.sendto()#对话(接收与发送)

ss.close()#关闭服务器套接字


例,创建一个能接收客户的消息,在消息前加一个时间戳后返回的UDP服务器


# vi tsUserv.py

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

#!/usr/bin/env python


from socket import *

from time import ctime


HOST = ''

PORT = 21567

BUFSIZ = 1024

ADDR = (HOST,PORT)


udpSerSock = socket(AF_INET, SOCK_DGRAM)

udpSerSock.bind(ADDR)


while True:

   print 'waiting for message...'

   data, addr = udpSerSock.recvfrom(BUFSIZ)

   udpSerSock.sendto('[%s] [%s]' %(ctime(), data),addr)

   print '...received from and returned to:', addr

   udpSerSock.close()

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


UDP和TCP服务器的另一个重要区别是,由于数据报套接字是无连接的,所以无法把客户的链接将诶另外的套接字进行后续通讯,这些服务器只是接受消息,需要的话,给客户返回一个结果就可以了


16.3.7 创建一个UDP客户端


cs = socket()#创建客户套接字

comm_loop:#通讯循环

cs.sendto()/cs.recvfrom()#对话(发送/接收)

cs.close()#关闭客户套接字


在套接字对象创建好之后,我们就进入一个与服务器的对话循环,在通讯结束后,套接字就被关闭了


例,创建一个UDP客户端,程序会提示用户输入要传给服务器的信息,显示服务器返回的加了时间戳的结果


# vi tsUclnt.py

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

#!/usr/bin/env python


from socket import *

from time import ctime


HOST = ''

PORT = 21568

BUFSIZ = 1024

ADDR = (HOST,PORT)


udpSerSock = socket(AF_INET, SOCK_DGRAM)

udpSerSock.bind(ADDR)


while True:

   print 'waiting for message...'

   data, addr = udpSerSock.recvfrom(BUFSIZ)

   udpSerSock.sendto('[%s] %s' %(ctime(), data),addr)

   print '...received from and returned to:', addr

   print data

udpSerSock.close()

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


# vi tsUclnt.py    

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

#!/usr/bin/env python


from socket import *


HOST = '192.168.8.18'

PORT = 21568

BUFSIZ = 1024

ADDR = (HOST, PORT)


udpCliSock = socket(AF_INET,SOCK_DGRAM)


while True:

   data = raw_input('> ')

   if not data:

       break

   udpCliSock.sendto(data, ADDR)

   data, ADDR = udpCliSock.recvfrom(BUFSIZ)

   if not data:

       break

   print data


udpCliSock.close()

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


16.3.8 执行UDP服务器和客户端


# python tsUserv.py

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

waiting for message...

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


# python tsUclnt.py

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

> hi

[Thu Dec 19 17:25:01 2013] hi

> test1

[Thu Dec 19 17:25:03 2013] test1

> test2

[Thu Dec 19 17:25:05 2013] test2

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


# python tsUserv.py

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

waiting for message...

...received from and returned to: ('192.168.8.19', 46359)

hi

waiting for message...

...received from and returned to: ('192.168.8.19', 46359)

test1

waiting for message...

...received from and returned to: ('192.168.8.19', 46359)

test2

waiting for message...

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


16.3.9 套接字模块属性


属性名字描述

AF_UNIX,AF_INET,AF_INET6Python支持的套接字家族

SO_STREAM,SO_DGRAM套接字类型(TCP=流,UDP=数据报)

has_ipv6标识是否支持IPV6的标志变量


异常

error套接字相关错误

herror主机和地址相关的错误

gaierror地址相关错误

timeout超时


函数

socket()用指定的地址家族,套接字类型和协议类型(可选)创建一个套接字对象

socketpair()用指定的地址家族,套接字类型和协议类型(可选)创建一个套接字对象

fromfd()用一个已经打开的额文件描述符创建一个套接字对象

数据属性

ssl()在套接字初始化一个安全套接字层(SSL),不做整数验证

getaddrinfo()得到地址信息

getfqdn()返回完整的域的名字

gethostname()得到当前主机名

gethostbyname()由主机名得到对应的ip地址

gethostbyname()_ex()gethostbyname()扩展版本,返回主机名,主机所有的别名和IP地址列表

gethostbyaddr()由IP地址得到DNS信息,返回一个类似gethostbyname()_ex()的三元组

getprotobyname()由协议名(如"tcp")得到对应的号码

getservbyname()/由服务名得到对应的端口号或相反

getservbyport()两个函数中,协议名都是可选的

ntohl()/htohs()把一个整数由网络字节序转为主机字节序

htonl()/htons()把一个整数由主机字节序转为网络字节序

inet_aton()/把IP地址转为32位×××,以及反向函数(仅对IPV4有效)

inet_ptoa()

inet_pton()/把IP地址转为二进制格式以及反响函数(仅对IPV4有效)

inet_ntop()

getdefaulttimeout()/得到/设置默认的套接字超时时间,单位秒(浮点数)

setdefaulttimeout()


16.4 SocketServer模块

SocketServer是标准库中一个高级别的模块,用于简化网络客户与服务器的实现,模块中,已经实现了一些可供使用的类


SocketServer模块的类

类描述

BaseServer包含服务器的核心功能与混合(mix-in)类的钩子功能,这个类用于派生,不要直接生成

这个类的类对象,可以考虑使用TCPServer和IDPServer

TCPServer/基本的网络同步TCP/UDP服务器

UDPServer

UnixStreamServer/基本的基于文件同步TCP/UDP服务器

UnixDatagramServer

ForkingMixIn/实现了核心的进程化或线程化的功能,用于与服务器类进行混合(mix-in),以提供一些异步特性.

ThreadingMixIn不要直接生成这个类的对象

ForkingTCPServer/ForkingMixIn和TCPServer/UDPServer的组合

ForkingUDPServer

ThreadingTCPServer/ThreadingMixIn和TCPServer/UDPServer组合

ThreadingUDPServer

BaseRequestHandler包含处理服务请求的核心功能,只用于派生新的类,不要直接生成这个类的对象

可以考虑使用StreamRequestHandler或DatagramRequestHandler

StreamRequestHandler/TCP/UDP服务器的请求处理类的一个实现

DatagramRequestHandler


16.4.1 创建一个SocketServerTCP服务器

使用SocketServer里的TCPServer和StreamRequestHandler类创建一个时间戳TCP服务器

# vi tsTservSS.py

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

#!/usr/bin/env python


from SocketServer import (TCPServer as TCP,StreamRequestHandler as SRH)

from time import ctime


HOST = ''

PORT = 21567

ADDR = (HOST, PORT)


class MyRequestHandler(SRH):

   def handle(self):

       print "...connected from: ", self.client_address

       self.wfile.write('[%s] %s'% (ctime(), self.rfile.readline()))


tcpServ = TCP(ADDR, MyRequestHandler)

print 'waiting for connection...'

tcpServ.serve_forever()

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


16.4.2 创建SocketServerTCP客户端


例,这是一个时间戳TCP客户端,它知道如何与SocketServer里StreamRequestHandler对象进行


# vi tsTclntSS.py

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

#!/usr/bin/env python


from socket import *


HOST = 'localhost'

PORT = 21567

BUFSIZ = 1024

ADDR = (HOST, PORT)


while True:

   tcpCliSock = socket(AF_INET, SOCK_STREAM)

   tcpCliSock.connect(ADDR)

   data = raw_input('> ')

   if not data:

       break

   tcpCliSock.send('%s\r\n' % data)

   data = tcpCliSock.recv(BUFSIZ)

   if not data:

       break

   print data.strip()

   tcpCliSock.close()

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


16.4.2 执行TCP服务器和客户端

# python tsTservSS.py

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

waiting for connection...

...connected from:  ('127.0.0.1', 40712)

...connected from:  ('127.0.0.1', 40713)

...connected from:  ('127.0.0.1', 40714)

...connected from:  ('127.0.0.1', 40715)

...connected from:  ('127.0.0.1', 40716)

...connected from:  ('127.0.0.1', 40717)

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


# python tsTclntSS.py

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

> test1

[Fri Dec 20 04:44:02 2013] test1

> test2

[Fri Dec 20 04:44:16 2013] test2

> test3

[Fri Dec 20 04:44:18 2013] test3

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


注:连接服务器连接了2次


16.5 Twisted框架介绍


Twisted是一个完全事件驱动的网络框架,它允许你使用和开发完全异步的网络应用程序和协议


16.5.1 创建一个Twisted Reactor TCP服务器


例,这是一个使用Twisted Internet类的时间戳TCP服务器


# vi tsTservTW.py

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

#!/usr/bin/env python


from twisted.internet import protocol, reactor

from time import ctime


PORT = 21567


class TSServProtocol(protocol.Protocol):

   def connectionMade(self):

       clnt = self.clnt = self.transport.getPeer().host

       print '...connected from: ',clnt

   def dataReceived(self,data):

       self.transport.write('[%s] %s' %(ctime(), data))


factory = protocol.Factory()

factory.protocol = TSServProtocol

print 'waiting for connection...'

reactor.listenTCP(PORT, factory)

reactor.run()

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



16.5.2 创建一个Twisted Reactor TCP客户端


# vi tsTclntTW.py

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

#!/usr/bin/env python


from twisted.internet import protocol, reactor


HOST = 'localhost'

PORT = 21567


class TSClntProtocol(protocol.Protocol):

   def sendData(self):

       data = raw_input("> ")

       if data:

           print '...sending %s...' % data

           self.transport.write(data)

       else:

           self.transport.loseConnection()


   def connectionMade(self):

       self.sendData()


   def dataReceived(self, data):

       print data

       self.sendData()


class TSClntFactory(protocol.ClientFactory):

   protocol = TSClntProtocol

   clientConnectionLost = clientConnectionFailed = \

   lambda self, connector, reason: reactor.stop()


reactor.connectTCP(HOST, PORT, TSClntFactory())

reactor.run()

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


16.5.3 执行TCP服务器和客户端


Twisted客户显示的内容与我们之前的客户类似:


# python tsTservTW.py

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

waiting for connection...

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


# python tsTclntTW.py

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

> test1

...sending test1...

[Fri Dec 20 10:36:10 2013] test1

> test2

...sending test2...

[Fri Dec 20 10:36:15 2013] test2

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


# python tsTservTW.py

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

waiting for connection...

...connected from:  127.0.0.1

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

注: "connection from" 输出没有其他的信息,因为我们只询问服务器的transport对象的getPeer()函数要了主机地址的信息


16.6 相关模块


网络/套接字编程相关模块


模块描述

socket底层网络接口,本章讨论过

anycore/为能异步处理客户请求的网络应用程序提供底层功能

select在单线程网络服务器程序中,管理多个套接字连接

SocketServer包含了些网络应用程序服务器所需要的高级别模块,提供了完整的进程和线程版本

--结束END--

本文标题: [PYTHON] 核心编程笔记(16.P

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • [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] 核心编程笔记(11.P
    11.1 什么是函数函数式对程序逻辑进行结构化或过程化的一种编程方法,能够整块代码巧妙地隔离成易于管理的小块以下为创建,使用,或引用函数的方法:declaration/definition def foo(): print 'bar'fun...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(13.P
    13.1 介绍类与实例:类与实例相互关联,类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息下面的示例展示如何创建一个类:class MyNewObjectType(bases):    'define MyNewO...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(14.P
    在python中有多种运行外部程序的方法,比如,运行操作系统命令或另外的python脚本,或执行一个磁盘上的文件,或通过网络来运行文件在特定执行场景包括:在当前脚本继续运行创建和管理子进程执行外部命令或程序执行需要输入的命令通过网络来调用命...
    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] 核心编程笔记(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
  • [PYTHON]核心编程笔记(15.Py
    核心笔记:查找与匹配的比较15.1.1 您的第一个正则表达式:15.2 正则表达式使用的特殊符号和字符常用正则表达式符号和特殊符号:记号       说明                                          举...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记之十-Py
    10.1 什么是异常10.1.1 错误错误时语法或是逻辑上的,语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译当Python检测到一个错误时,解释器就会支出当前流已经无法继续执行下去,这时就出现了异常10.1.2 异常1...
    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
    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] 核心编程笔记之七-Py
    7.1 映射类型:字典字典是Python语言中唯一的映射类型,映射类型对象里哈希值(键)和指向的对象(值)是一对多的关系,字典对象可变,它是一个容器类型,能存储任意个Python对象注:什么是哈希表哈希表是一种数据结构:哈希表中存储的每一条...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • 《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
  • Python核心编程的四大神兽
    本文将主要分为4大部分,分别介绍Python核心编程中的迭代器、生成器 、闭包以及装饰器。 生成器 生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yield关键字时该函数会暂停执行该函数...
    99+
    2023-01-30
    神兽 核心 Python
  • Python核心编程答案(自整理)
    2–10.带循环和条件判断的用户输入 使用raw_input()函数来提示用户输入一个1和100之间的数,如果用户输入的数满足这个条件,显示成功并退出。否则显示一个错误信息然后再次提示用户输入数值,直到满足条件为止。#!/usr/bin/e...
    99+
    2023-01-31
    核心 答案 Python
  • python核心编程(第三版)网络编程错
    //服务器端代码from socket import * from time import ctime host='localhost' port=3330 bufsize = 1024 addr = (host,port) tcp...
    99+
    2023-01-30
    第三版 网络编程 核心
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作