Python3 教程 第4页
以下实例在 Python3.4.3 版本下测试通过: Python Hello World 实例 Python 数字求和 Python 平方根 Python 二次方程 Python 计算三角形的面积 Python 随机数生成 Python 摄氏温度转华氏温度 Python 交换变量 Python if 语句 Python 判断字符串是否为数字 Python 判断奇数偶数 Python 判断闰年 Python 获取最大值函数 Python 质数判断 Python 阶乘实例 Python 九九乘法表 Python 斐波那契数列 Python 阿姆斯特朗数 Python 十进制转二进制、八进制、十六进制 Python ASCII码与字符相互转换 Python 最大公约数算法 Python 最小公倍数算法 Python 简单计算器实现 Python 生成日历 Python 使用递归斐波那契数列 Python 文件 IO Python 字符串判断 Python 字符串大小写转换 Python 计算每个月天数 Python 获取昨天日期 Python list 常用操作
在 Python3 中正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。 compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。 re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。 本章节主要介绍 Python 中常用的正则表达式处理函数。 re.match 函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。 函数语法: re.match(pattern, string, flags=0) 函数参数说明: 参数 描述 pattern 匹配的正则表达式 string 要匹配的字符串。 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 匹配成功 re.match 方法返回一个匹配的对象,否则返回 None。 我们可以使用 group(num) 或 groups() 匹配对象函数来获取匹配表达式。 匹配对象方法 描述 group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 实例 1: #!/usr/bin/python import re print(re.match('www', 'www.w3cschool.cn').span()) # 在起始位置匹配 print(re.match('cn', 'www.w3cschool.cn')) # 不在起始位置匹配 尝试一下 以上实例运行输出结果为: (0, 3) None 实例 2: #!/usr/bin/python3 import re line = "Cats are smarter than dogs" matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I) if matchObj: print ("matchObj.group() : ", matchObj.group()) print ("matchObj.group(1) : ", matchObj.group(1)) print ("matchObj.group(2) : ", matchObj.group(2)) else: print ("No match!!") 尝试一下 以上实例执行结果如下: matchObj.group()...
什么是 CGI CGI 目前由 NCSA 维护,NCSA 定义 CGI 如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端 HTML 页面的接口。 网页浏览 为了更好的了解 CGI 是如何工作的,我们可以从在网页上点击一个链接或 URL 的流程: 1、使用你的浏览器访问 URL 并连接到 HTTP web 服务器。 2、Web 服务器接收到请求信息后会解析 URL,并查找访问的文件在服务器上是否存在,如果存在返回文件的内容,否则返回错误信息。 3、浏览器从服务器上接收信息,并显示接收的文件或者错误信息。 CGI 程序可以是 Python 脚本,PERL 脚本,SHELL 脚本,C 或者 C++ 程序等。 CGI 架构图 Web 服务器支持及配置 在你进行 CGI 编程前,确保您的 Web 服务器支持 CGI 及已经配置了 CGI 的处理程序。 Apache 支持 CGI 配置(这里使用PHPstudy集成的Apache): 打开Apache的配置文件httpd-conf,在文件中找到如下内容: 首先找到ScriptAlias(图片内容为已经修改过的值,默认值应该有所不同而且是被注释掉的) 修改为项目地址 ScriptAlias /cgi-bin/ "F:/phpstudy/phpstudy_pro/WWW/webpy" (之前的项目都放在F:/phpstudy/phpstudy_pro/WWW/下,这个文件夹是PHPstudy的apache默认项目文件夹,将路径改为这样可以方便localhost访问)。 然后找到Directory,将其修改为 <Directory "F:/phpstudy/phpstudy_pro/WWW/webpy"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all </Directory> 注意:这里的路径和上面设置的路径是一样的。 接着找到AddHandler 添加.py。使apache识别.py文件为cgi程序(图中已添加)。 接下来我们就可以在webpy文件夹下写pythonCGI程序了。 第一个CGI程序 我们使用 Python 创建第一个 CGI 程序,文件名为 hello.py,文件位于 /var/www/cgi-bin目录中,内容如下: #!/usr/bin/python3 # 请注意第一行代码,在linux中需要在py文件中正确指定python解释器的路径才能运行 # 在Windows中使用Python CGI文件也需要正确指定python解释器的路径才能运行 #coding=utf-8 print("Content-type:text/html") # 指定返回的类型,没有这行代码会报错 print() # 空行,告诉服务器结束头部 # 以下是要返回的HTML正文 print ('<html>') print ('<head>')print ('<title>Hello Word - 我的第一个 CGI 程序!</title>') print ('</head>') print ('<body>') print ('<h2>Hello Word! 我的第一CGI程序</h2>') print ('</body>') print ('</html>') 文件保存后修改 hello.py,修改文件权限为 755(linux和macos需要在webpy文件夹下使用下面的命令来修改文件读写权限,在Windows环境下需要修改文件的读写权限): chmod 755 hello.py 以上程序在浏览器访问显示结果如下: 这个的 hello.py 脚本是一个简单的 Python 脚本,脚本第一行的输出内容”Content-type:text/html”发送到浏览器并告知浏览器显示的内容类型为”text/html”。 用 print 输出一个空行用于告诉服务器结束头部信息。 注:如果此处出现乱码,可以在打印html的时候打印 ,在下文部分代码中有所体现(注意,这里不使用UTF-8的原因是小编在这里使用utf-8出现乱码,这是因为小编的系统是Windows系统,系统默认字符集是GBK,所以会出现乱码)。 另外:请注意第一行代码,在linux中需要在py文件中正确指定python解释器的路径才能运行 。在Windows中使用Python...
本文我们为大家介绍 Python3 使用 PyMySQL 连接数据库,并实现简单的增删改查。 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2 中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。 PyMySQL 安装 在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。 PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL。 如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL: $ pip install PyMySQL 如果你的系统不支持 pip 命令,可以使用以下方式安装: 1、使用 git 命令下载安装包安装(你也可以手动下载): $ git clone https://github.com/PyMySQL/PyMySQL $ cd PyMySQL/ $ python3 setup.py install 2、如果需要制定版本号,可以使用 curl 命令来安装: $ # X.X 为 PyMySQL 的版本号 $ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz $ cd PyMySQL* $ python3 setup.py install $ # 现在你可以删除 PyMySQL* 目录 注意:请确保您有 root 权限来安装上述模块。 安装的过程中可能会出现”ImportError: No module named setuptools”的错误提示,意思是你没有安装setuptools,你可以访问https://pypi.python.org/pypi/setuptools 找到各个系统的安装方法。 Linux 系统安装实例: $ wget https://bootstrap.pypa.io/ez_setup.py $ python3 ez_setup.py 数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB. 在 TESTDB 数据库中您已经创建了表 EMPLOYEE EMPLOYEE 表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。 连接数据库 TESTDB 使用的用户名为...
Python 提供了两个级别访问的网络服务。: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统 Socket 接口的全部方法。 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。 什么是 Socket? Socket 又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。 socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: socket.socket([family[, type[, proto]]]) 参数 family: 套接字家族可以使 AF_UNIX 或者 AF_INET type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM protocol: 一般不填默认为0. Socket 对象(内建)方法 函数 描述 服务器端套接字 s.bind() 绑定地址(host,port)到套接字, 在 AF_INET 下,以元组(host,port)的形式表示地址。 s.listen() 开始 TCP 监听。backlog 指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为 1,大部分应用程序设为 5 就可以了。 s.accept() 被动接受 TCP 客户端连接,(阻塞式)等待连接的到来 客户端套接字 s.connect() 主动初始化 TCP 服务器连接,。一般 address 的格式为元组(hostname,port),如果连接出错,返回 socket.error 错误。 s.connect_ex() connect() 函数的扩展版本,出错时返回出错码,而不是抛出异常 公共用途的套接字函数 s.recv() 接收 TCP 数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag 提供有关消息的其他信息,通常可以忽略。 s.send() 发送 TCP 数据,将 string 中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于 string 的字节大小。 s.sendall() 完整发送 TCP 数据,完整发送 TCP 数据。将 string 中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回 None,失败则抛出异常。 s.recvfrom() 接收 UDP 数据,与 recv() 类似,但返回值是(data,address)。其中 data 是包含接收数据的字符串,address 是发送数据的套接字地址。 s.sendto() 发送 UDP 数据,将数据发送到套接字,address 是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。 s.close() 关闭套接字 s.getpeername() 返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。 s.getsockname() 返回套接字自己的地址。通常是一个元组(ipaddr,port) s.setsockopt(level,optname,value) 设置给定套接字选项的值。 s.getsockopt(level,optname[.buflen]) 返回套接字选项的值。 s.settimeout(timeout) 设置套接字操作的超时期,timeout 是一个浮点数,单位是秒。值为 None 表示没有超时期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如 connect())...
在Python3 中应用的SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 python的 smtplib 提供了一种很方便的途径发送电子邮件。它对 smtp 协议进行了简单的封装。 Python创建 SMTP 对象语法如下: import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] ) 参数说明: host: SMTP 服务器主机。 你可以指定主机的 ip 地址或者域名如:w3cschool.cn,这个是可选参数。 port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为 25。 local_hostname: 如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。 Python SMTP 对象使用 sendmail 方法发送邮件,语法如下: SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options] 参数说明: from_addr: 邮件发送者地址。 to_addrs: 字符串列表,邮件发送地址。 msg: 发送消息 这里要注意一下第三个参数,msg 是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意 msg 的格式。这个格式就是 smtp 协议中定义的格式。 实例 以下是一个使用 Python 发送邮件简单的实例: #!/usr/bin/python3 import smtplib from email.mime.text import MIMEText from email.header import Header sender = 'from@w3cschool.cn' receivers = ['429240967@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱 # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码 message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') message['From'] = Header("W3Cschool教程", 'utf-8') message['To'] = Header("测试", 'utf-8') subject = 'Python SMTP 邮件测试' message['Subject'] =...
多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理。 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 程序的运行速度可能加快 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 每个线程都有他自己的一组 CPU 寄存器,称为线程的上下文,该上下文反映了线程上次运行该线程的 CPU 寄存器的状态。 指令指针和堆栈指针寄存器是线程上下文中两个最重要的寄存器,线程总是在进程得到上下文中运行的,这些地址都用于标志拥有线程的进程地址空间中的内存。 线程可以被抢占(中断)。 在其他线程正在运行时,线程可以暂时搁置(也称为睡眠) — 这就是线程的退让。 线程可以分为: 内核线程:由操作系统内核创建和撤销。 用户线程:不需要内核支持而在用户程序中实现的线程。 Python3 线程中常用的两个模块为: _thread threading(推荐使用) thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用”thread” 模块。为了兼容性,Python3 将 thread 重命名为 “_thread”。 开始学习 Python 线程 Python 中使用线程有两种方式:函数或者用类来包装线程对象。 函数式:调用 _thread 模块中的 start_new_thread() 函数来产生新线程。语法如下: _thread.start_new_thread ( function, args[, kwargs] ) 参数说明: function – 线程函数。 args – 传递给线程函数的参数,他必须是个 tuple 类型。 kwargs – 可选参数。 实例: #!/usr/bin/python3 import _thread import time # 为线程定义一个函数 def print_time( threadName, delay): count = 0 while count < 5: time.sleep(delay) count += 1 print ("%s: %s" % ( threadName, time.ctime(time.time()) )) # 创建两个线程 try: _thread.start_new_thread( print_time, ("Thread-1", 2, ) ) _thread.start_new_thread( print_time, ("Thread-2", 4, ) ) except: print ("Error: 无法启动线程") while 1: pass 执行以上程序输出结果如下: Thread-1: Wed Apr 6...
什么是XML? XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 你可以通过本站学习 XML教程 XML 被设计用来传输和存储数据。 XML 是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。 它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。 python对XML的解析 常见的 XML 编程接口有 DOM 和 SAX,这两种接口处理 XML 文件的方式不同,当然使用场合也不同。 Python 有三种方法解析 XML,SAX,DOM,以及 ElementTree: 1.SAX (simple API for XML ) Python 标准库包含 SAX 解析器,SAX 用事件驱动模型,通过在解析 XML 的过程中触发一个个的事件并调用用户定义的回调函数来处理 XML 文件。 2.DOM(Document Object Model) 将 XML 数据在内存中解析成一个树,通过对树的操作来操作 XML。 本章节使用到的 XML 实例文件 movies.xml 内容如下: <collection shelf="New Arrivals"> <movie title="Enemy Behind"> <type>War, Thriller</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>10</stars> <description>Talk about a US-Japan war</description> </movie> <movie title="Transformers"> <type>Anime, Science Fiction</type> <format>DVD</format> <year>1989</year> <rating>R</rating> <stars>8</stars> <description>A schientific fiction</description> </movie> <movie title="Trigun"> <type>Anime, Action</type> <format>DVD</format> <episodes>4</episodes> <rating>PG</rating> <stars>10</stars> <description>Vash the Stampede!</description> </movie> <movie title="Ishtar"> <type>Comedy</type> <format>VHS</format> <rating>PG</rating> <stars>2</stars> <description>Viewable boredom</description> </movie> </collection> Python 使用 SAX 解析 xml SAX 是一种基于事件驱动的 API。 利用 SAX 解析 XML 文档牵涉到两个部分:解析器和事件处理器。 解析器负责读取 XML 文档,并向事件处理器发送事件,如元素开始跟元素结束事件;...
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于 ECMAScript 的一个子集。 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码。 json.loads(): 对数据进行解码。 在json的编解码过程中,Python 的原始类型与 json 类型会相互转换,具体的转化对照如下: Python 编码为 JSON 类型转换对应表: Python JSON dict object list, tuple array str string int, float, int- & float-derived Enums number True true False false None null JSON 解码为 Python 类型转换对应表: JSON Python object dict array list string str number (int) int number (real) float true True false False null None json.dumps 与 json.loads 实例 以下实例演示了 Python 数据结构转换为 JSON: #!/usr/bin/python3 import json # Python 字典类型转换为 JSON 对象 data = { 'no' : 1, 'name' : 'W3CSchool', 'url' : 'http://www.w3cschool.cn' } json_str = json.dumps(data) print ("Python 原始数据:", repr(data)) print ("JSON 对象:", json_str) 尝试一下 执行以上代码输出结果为: Python 原始数据: {'url': 'http://www.w3cschool.cn', 'no': 1, 'name':...
Python3 日期和时间 Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。 Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。 时间间隔是以秒为单位的浮点小数。 每个时间戳都以自从 1970 年 1 月 1 日午夜(历元)经过了多长时间来表示。 Python 的 time 模块下有很多函数可以转换常见日期格式。如函数 time.time() 用于获取当前时间戳, 如下实例: #!/usr/bin/python3 import time; # 引入time模块 ticks = time.time() print ("当前时间戳为:", ticks) 以上实例输出结果: 当前时间戳为: 1459996086.7115328 时间戳单位最适于做日期运算。但是 1970 年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX 和 Windows 只支持到 2038 年。 什么是时间元组? 很多 Python 函数用一个元组装起来的9组数字处理时间: 序号 字段 值 0 4 位数年 2020 1 月 1 到 12 2 日 1 到 31 3 小时 0 到 23 4 分钟 0 到 59 5 秒 0 到 61 (60 或 61 是闰秒) 6 一周的第几日 0 到 6 (0 是周一) 7 一年的第几日 1 到 366 (儒略历) 8 夏令时 -1, 0, 1, -1是决定是否为夏令时的旗帜 上述也就是struct_time元组。这种结构具有如下属性: 序号 属性 值 0 tm_year 2020 1 tm_mon 1 到 12 2 tm_mday...