一、Pytnon特点
什么是编程语言
是用来定义计算机程序的形式语言。我们通过编程语言来编写程序代码,再通过语言处理程序执行向计算机发送指令,让计算机完成对应的工作。简单来说,编程语言就是人类和计算机进行交流的语言。
python特点
优点:规范的代码,简单,易学,高层语言,跨平台(可移植性强),支持面向对象编程,丰富的库等优点。
缺点:执行效率慢,这个是解释型语言所通有的。
Python 是完全面向对象的语言
◦函数、模块、数字、字符串都是对象,在 Python 中一切皆对象
◦完全支持继承、重载、多重继承
◦支持重载运算符,也支持泛型设计
拥有一个强大的标准库
Python 语言的核心只包含 数字、字符串、列表、字典、文件 等常见类型和函数,而由 Python 标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML 处理等额外的功能
Python 社区提供了大量的第三方模块,使用方式与标准库类似
它们的功能覆盖 科学计算、人工智能、机器学习、Web 开发、数据库接口、图形系统 多个领域
二、Python 2 与 Python 3
Python 2.x 与 Python 3.x之间的关系
我们分别使用Python2.7 和 Python3.5的解释器提供的交互式终端来分别执行以下两条指令:
print("Hello, World")
print "Hello, World"
通过上图的执行结果会发现,print "Hello, World" 这条语句在Python2.7中可以正常执行,而在Python 3.5中会报错,也就是说Python 3.x与Python 2.x是不兼容的。这貌似是Python开发者犯的一个错误,而事实是Guido Van Rossum(Python语言的最初创建者)故意为之。Guido的本意就是想不考虑太多向后兼容性的问题,去适当地清理一下Python 2.x中不合理的内容,而不是把Python 3.x简单的当做对Python 2.x的更新版本。
实际上,Python 3.0在2008年12月就已经发布了,Python官方在2010年年中发布2.7时宣布,2.7将是Python 2.x的最后一个主发布版本。其实Python 2.7 是向Python 3.x的一个过渡版本,里面支持了一些Python 3.x的特性。
2014年11月,Python官方宣布Python 2.7将会被支持到2020年,并再次确认了不会有Python 2.8发布,希望用户尽快迁移到Python 3.4+ 。3.x正在处于积极开发状态,并且在过去5年里已经发布了多个稳定版本,包括2012年的3.3,2014年的3.4,2015年的3.5。这意味着最近所有的标准库更新将默认只能在Python 3.x中可用。
Python 2.x 与 Python 3.x 的主要区别:
1) PRINT IS A FUNCTION
在Python 3.x中,输出语句需要使用print()函数,该函数接收一个关键字参数,以此来代替Python 2.x中的大部分特殊语法。下面是几个对比项:
目标Python 2.x的实现Python 3.x的实现
拼接并输出多个值
print "The result is", 2+3
print("The result is", 2+3)
打印一个元祖(1,2,3)
print(1,2,3) 或 print (1,2,3)
print((1,2,3))
输出一个内容并且不换行
print “Hello”,
print("Hello", end=" ")
输出一个新空白行
print()
将输出内容输出到标准错误输出文件
print >>sys.stderr, "fatal error"
print("fatal error", file=sys.stderr)
自定义多个输出内容之间的分隔/拼接符
N/A
print("There are possibilites!", sep="")
2) ALL IS UNICODE
Python 2.x中使用的默认字符编码为ASCII码,要使用中文字符的话需要指定使用的字符编码,如UTF-8;Python 3.x中使用的默认字符编码为Unicode,就不存在这个问题了。
3) 多变量同时赋值问题
python 2.x中如果要给多个变量同时赋值,要求=号右边的表达式返回结果的个数要与=号左边接收值的变量个数相等,不能多,也不能少。如:
a,b,c = (1,2,3) # 正常,a=1, b=2, c=3
a,b,c = range(5) # 报错,ValueError: too many values to unpack
a,b,c,d,e = [1,2,3] # 报错,ValueError: need more than 3 values to unpack
python 3.x中允许=号昨边的变量数小于=号右边表达式返回的结果的个数,但是需要有1个且只能有1个字典类型的变量来接收多余的返回值。与python 2.x相同的是 python 3.x中=号左边的变量数也是不能多与=号右边表达式的返回值个数,但是错误提示语更清晰了。
a,b,c = (1,2,3) # 正常,a=1, b=2, c=3
a,*b,c = range(5) # 正常,a=0, b=[1,2,3], c=4
a,b,c,d,e = [1,2,3] # 报错,ValueError: not enough values to unpack (expected 5, got 3)
4) 某些库改名字了
Old NameNew Name
_winreg
winreg
ConfigParser
configparser
copy_reg
copyreg
Queue
queue
SocketServer
socketserver
markupbase
_markupbase
repr
reprlib
test.test_support
test.support
5) 选择Python 2 还是 Python 3呢?
如果是要开发一个新项目,不用考虑与老项目的兼容问题,最好是使用Python 3,因为就像Python官方说的那样,Python 3才是Python语言的将来。现在很多第三方类库已经完成了或者正在积极完成对Python 3的支持,只是有些项目由于过于庞大,很难在短时间内完成。我们需要考虑的最大问题在于,新项目中是否存在必须的第三方类库,且该类库当前还不支持Python 3。如果不存在这个问题,那坚定的选择Python 3吧。
三、PYTHON脚本式编程
编译与解释
编译(静态语言):程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如 C、C++、java
解释(脚本语言):以文本方式存储程序代码,会将代码一句一句直接运行。在发布程序时,看起来省了道编译工序,但是在运行程序的时候,必须先解释再运行(将源代码逐条翻译成目标代码同时逐条运行),如Python 、Java Script、PHP
•速度 —— 编译型语言比解释型语言执行速度快
•跨平台性 —— 解释型语言比编译型语言跨平台性好
什么是编程语言
是用来定义计算机程序的形式语言。我们通过编程语言来编写程序代码,再通过语言处理程序执行向计算机发送指令,让计算机完成对应的工作。简单来说,编程语言就是人类和计算机进行交流的语言
python特点
优点:规范的代码,简单,易学,高层语言,跨平台(可移植性强),支持面向对象编程,丰富的库等优点
缺点:执行效率慢,这个是解释型语言所通有的
Python的执行过程与.pyc文件
在之前的文章我们已经解释过:Python是一个动态的、强类型的、解释型的编程语言。而实际上,解释型语言与编译型语言的界限正在变得模糊。包括Python在内的很多高级编程语言,会将源代码先编译成特定类型的中间代码,然后再由解释器去执行,这样可以提高执行效率。
Python的解释器同时也是生成Python中间代码的编译器,.pyc文件就是存放Python中间代码的文件。执行Python代码时,如果该源码文件导入了其他的.py文件,那么执行过程中会自动生成一个与导入的.py文件同名的.pyc文件。
运行Python的三种方式
方式一:cmd交互式解释器
前置条件:先在windows设置python环境变量
先进入cmd:
cd D:\python+selenium\TestCase (py文件存放的路径)
输入python **.py 直接执行某某py文件,比如:python “E:\private\...\TextProBarV2.py
以下为Python命令行参数:
选项 | 描述 |
-d | 在解析时显示调试信息 |
-O | 生成优化代码 ( .pyo 文件 ) |
-S | 启动时不引入查找Python路径的位置 |
-V | 输出Python版本号 |
-X | 从 1.6版本之后基于内建的异常(仅仅用于字符串)已过时。 |
-c cmd | 执行 Python 脚本,并将运行结果作为 cmd 字符串。 |
file | 在给定的python文件执行python脚本。 |
案例:
cmd +回车
输入:python
输入:print("hello world")
回车
方式二: 集成开发环境 (PyCharm)
Python 的 IDE-PyCharm:文件式编程,批量处理一组语句并运行结果,这是编程的主要方式。
集成开发环境:图形用户界面、代码编辑器(支持 代码补全/自动缩进)、编译器/解释器、调试器(断点/单步执行)
◦一个项目通常会包含 很多源文件
◦每个 源文件 的代码行数是有限的,通常在几百行之内
◦每个 源文件 各司其职,共同完成复杂的业务功能
安装 PyCharm 中文插件,打开菜单栏 File,选择 Settings,然后选 Plugins,点 Marketplace,搜索 chinese,然后点击 install 安装:
方式三: 解释器运行Python脚本
通过脚本参数调用解释器开始执行脚本,直到脚本执行完毕。当脚本执行完成后,解释器不再有效。
•Python 2.x 使用的解释器是 ipython
•Python 3.x 使用的解释器是 ipython3
默认:python shell
优点:•适合于学习/验证 Python 语法或者局部代码
缺点:•代码不能保存
•不适合运行太大的程序
IPython:◦支持自动补全
◦自动缩进
◦支持 bash shell 命令
◦内置了许多很有用的功能和函数
退出解释器:①直接输入 exit ②按热键 ctrl + d,IPython 会询问是否退出解释器
让我们写一个简单的 Python 脚本程序。所有 Python 文件将以 .py 为扩展名。将以下的源代码拷贝至 test.py 文件中。
print ("Hello, Python!")
这里,假设你已经设置了 Python 解释器 PATH 变量。使用以下命令运行程序:
$ python test.py
输出结果:
Hello, Python!
让我们尝试另一种方式来执行 Python 脚本。修改 test.py 文件,如下所示:
#!/usr/bin/python
print ("Hello, Python!")
这里,假定您的Python解释器在/usr/bin目录中,使用以下命令执行脚本:
$ chmod +x test.py # 脚本文件添加可执行权限
$ ./test.py
输出结果:
Hello, Python!
四、Python基础语法
Python 标识符
标识符是允许作为变量(函数、类等)名称的有效字符串。其中,有一部分是关键字(语言本身保留的标识符),它是不能做它用的标识符的,否则会引起语法错误(SyntaxError 异常)。
Python 还有称为 built-in 标识符集合,虽然它们不是保留字,但是不推荐使用这些特别的名字。
开发人员在程序中自定义的一些符号和名称,标识符是自己定义的,如变量名 、函数名等。
在 Python 里,标识符由字母、数字、下划线组成。
在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。
Python 中的标识符是区分大小写的。
标识符的命名方法
小驼峰式命名法:函数名 addName
大驼峰式命名法:类名 AddName
以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。
以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 __foo__ 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。
Python 可以同一行显示多条语句,方法是用分号 ; 分开,如:
>>> print ('hello');print ('runoob');
hello
runoob
行和缩进
学习 Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块。
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。
以下实例缩进为四个空格
if True:
print ("True")
else:
print ("False")
以下代码将会执行错误:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:test.py
if True:
print ("Answer")
print ("True")
else:
print ("Answer")
# 没有严格缩进,在执行时会报错
print ("False")
执行以上代码,会出现如下错误提醒:
File "test.py", line 11
print ("False")
^
IndentationError: unindent does not match any outer indentation level
IndentationError: unindent does not match any outer indentation level错误表明,你使用的缩进方式不一致,有的是 tab 键缩进,有的是空格缩进,改为一致即可。
如果是 IndentationError: unexpected indent 错误, 则 python 编译器是在告诉你"Hi,老兄,你的文件里格式不对了,可能是tab和空格没对齐的问题",所有 python 对格式要求非常严格。
因此,在 Python 的代码块中必须使用相同数目的行首缩进空格数。
建议你在每个缩进层次使用 单个制表符 或 两个空格 或 四个空格 , 切记不能混用
多行语句
Python语句中一般以新行作为语句的结束符。
但是我们可以使用斜杠( \)将一行的语句分为多行显示,如下所示:
total = item_one + \
item_two + \
item_three
语句中包含 [], {} 或 () 括号就不需要使用多行连接符。如下实例:
days = ['Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday']
Python 引号
Python 可以使用引号( ' )、双引号( " )、三引号( ''' 或 """ ) 来表示字符串,引号的开始与结束必须是相同类型的。
其中三引号可以由多行组成,编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当做注释。
word = 'word'
sentence = "这是一个句子。"
paragraph = """这是一个段落。
包含了多个语句"""
Python注释
单行注释: # 开头追加说明文字 注意:尽量在文字前面打个空格 在# 号前面需要追加两个空格。例如 print() # 注释
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:test.py
# 第一个注释
print ("Hello, Python!") # 第二个注释
输出结果:
Hello, Python!
注释可以在语句或表达式行末:
name = "Runoob" # 这里的内容是一个注释
python 中多行注释使用三个单引号 ''' 或三个双引号 """。
多行注释语法:
"""
注释内容
"""
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:test.py
'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
这是多行注释,使用单引号。
'''
"""
这是多行注释,使用双引号。
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""
Python空行
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
记住:空行也是程序代码的一部分。
在PEP8中规定,函数块之间需要空两行。
等待用户输入
下面的程序执行后就会等待用户输入,按回车键后就会退出:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
raw_input("按下 enter 键退出,其他任意键显示...\n")
以上代码中 ,\n 实现换行。一旦用户按下 enter(回车) 键退出,其它键显示。
同一行显示多条语句
Python可以在同一行中使用多条语句,语句之间使用分号(;)分割,以下是一个简单的实例:
#!/usr/bin/python
import sys; x = 'runoob'; sys.stdout.write(x + '\n')
执行以上代码,输入结果为:
$ python test.py
runoob
多个语句构成代码组
缩进相同的一组语句构成一个代码块,我们称之代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
我们将首行及后面的代码组称为一个子句(clause)。
如下实例:
if expression :
suite
elif expression :
suite
else :
suite
代码块
在Java和C语言中用花括号{}包起来的部分就是一个代码块,shell脚本中的代码块是由专门的开始和结束标识的,而python中的代码块是靠“缩进对齐”来表示的。下面我们分别一个if-else的条件判断来对这几个语言的代码块表示方式做一个对比:
1. Java
...
int a = 3;
int b = 5;
int big_num;
if(a > b){
big_num = a;
}else{
big_num = b;
}
System.out.println(big_num)
...
2. Shell
declare -i a=3
declare -i b=5
declare -i big_num
if [ $a -gt $b ];then
big_num=$a
else
big_num=$b
fi
echo $big_num
3. Python
a = 3
b = 5
if a > b:
big_num = a
else:
big_num = b
print(big_num)
导入模块
当Python内置的核心模块提供的功能无法满足我们的需求时就需要导入外部模块,而导入模块的功能有两种方式:
import MODULE :导入整个模块
from MODULE import XX :导入模块中的一部分(方法、变量、或常量等)
例如,要想查看或更改python查找模块的路径列表就需要使用sys模块下的path变量;若需要执行系统命令可以使用os模块下的system()方法。
import sys
from os import system
print(sys.path)
print(system("ping www.baidu.com"))
命令行参数
很多程序可以执行一些操作来查看一些基本信息,Python 可以使用 -h 参数查看各参数帮助信息:
$ python -h
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-c cmd : program passed in as string (terminates option list)
-d : debug output from parser (also PYTHONDEBUG=x)
-E : ignore environment variables (such as PYTHONPATH)
-h : print this help message and exit
[ etc. ]
我们在写shell脚本时,经常会通过接受执行脚本时传入的变量来做相应的操作,来保证脚本的灵活性。比如我们要写一个脚本来调用ping命令对指定的域名进行ping测试,这时候显然将域名当做参数传递给脚本要比把域名写死在脚本中灵活的多。shell中可以只用$1,$2这样的特殊变量来获取传入的参数,而python中需要用sys模块下的argv变量来获取。
sys.argv是一个列表,与shell相同,其第一个元素是当前脚本的名称,之后才是传入的参数。
编写一个ping.py,内容如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
import os
print(type(sys.argv))
print(sys.argv)
执行该脚本,结果如下图所示:
Python 提供了 getopt 模块来获取命令行参数。
$ python test.py arg1 arg2 arg3
Python 中也可以使用 sys 的 sys.argv 来获取命令行参数:
- sys.argv 是命令行参数列表。
- len(sys.argv) 是命令行参数个数。
注:sys.argv[0] 表示脚本名。
实例
test.py 文件代码如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
print '参数个数为:', len(sys.argv), '个参数。'
print '参数列表:', str(sys.argv)
执行以上代码,输出结果为:
$ python test.py arg1 arg2 arg3
参数个数为: 4 个参数。
参数列表: ['test.py', 'arg1', 'arg2', 'arg3']
getopt模块
getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式 - 和长选项模式 --。
该模块提供了两个方法及一个异常处理来解析命令行参数。
getopt.getopt 方法
getopt.getopt 方法用于解析命令行参数列表,语法格式如下:
getopt.getopt(args, options[, long_options])
方法参数说明:
- args: 要解析的命令行参数列表。
- options : 以字符串的格式定义,options 后的冒号 : 表示如果设置该选项,必须有附加的参数,否则就不附加参数。
- long_options : 以列表的格式定义,long_options 后的等号 = 表示该选项必须有附加的参数,不带等号表示该选项不附加参数。
- 该方法返回值由两个元素组成: 第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有 - 或 -- 的参数。
另外一个方法是 getopt.gnu_getopt,这里不多做介绍。
Exception getopt.GetoptError
在没有找到参数列表,或选项的需要的参数为空时会触发该异常。
异常的参数是一个字符串,表示错误的原因。属性 msg 和 opt 为相关选项的错误信息。
实例
假定我们创建这样一个脚本,可以通过命令行向脚本文件传递两个文件名,同时我们通过另外一个选项查看脚本的使用。脚本使用方法如下:
usage: test.py -i <inputfile> -o <outputfile>
test.py 文件代码如下所示:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys, getopt
def main(argv):
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
except getopt.GetoptError:
print 'test.py -i <inputfile> -o <outputfile>'
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print 'test.py -i <inputfile> -o <outputfile>'
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
print '输入的文件为:', inputfile
print '输出的文件为:', outputfile
if __name__ == "__main__":
main(sys.argv[1:])
执行以上代码,输出结果为:
$ python test.py -h
usage: test.py -i <inputfile> -o <outputfile>
$ python test.py -i inputfile -o outputfile
输入的文件为: inputfile
输出的文件为: outputfile
五、Python中文编码与转义
一般在两个地方会用到字符编码:
1、磁盘写入或读取数据时;
2、程序执行时的输入和输出;
磁盘写入或读取数据时使用的字符编码是由编辑器指定的工程或文件的字符编码决定的,这与Python解释器是无关的;但是Python程序执行时,将Python脚本文件加载到内存时所使用的字符编码是主要问题所在。在Python 2中,Python解释器默认使用的是ASCII码,此时如果要运行的程序中如果有中文Python解释器就会报错。
Python 2.x中使用的默认字符编码为ASCII码,要使用中文字符的话需要指定使用的字符编码,如UTF-8;Python 3.x中使用的默认字符编码为Unicode,就不存在这个问题了。
Python 输出 "Hello, World!",英文没有问题,但是如果你输出中文字符 "你好,世界" 就有可能会碰到中文编码问题。
Python 文件中如果未指定编码,在执行过程会出现报错:
#!/usr/bin/python
print ("你好,世界")
以上程序执行输出结果为:
File "test.py", line 2
SyntaxError: Non-ASCII character '\xe4' in file test.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 # coding=utf-8 就行了
注意:# coding=utf-8 的 = 号两边不要空格。
Python2.0
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print( "你好,世界" )
输出结果为:
输出结果为:
你好,世界
所以如果大家在学习过程中,代码中包含中文,就需要在头部指定编码。
注意:Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。
注意:如果你使用编辑器,同时需要设置 py 文件存储的格式为 UTF-8,否则会出现类似以下错误信息:
SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xc4 in position 0:
invalid continuation byte
Pycharm 设置步骤:
- 进入 file > Settings,在输入框搜索 encoding。
- 找到 Editor > File encodings,将 IDE Encoding 和 Project Encoding 设置为utf-8。
指定python解释器
通常python脚本都是跑在Linux上的,为了让python脚本文件可以像shell脚本那样可以直接调用执行,我们通常需要在python文件最开始的位置指定python解释器:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
print("你好,世界")
不建议写python解释器的绝对路径,如:
#!/usr/bin/python
# -*- coding:utf-8 -*-
print("你好,世界")
因为这样写的话,将来要想更换python解释器是非常麻烦的。
指定字符编码与解释器
1. 字符编码的作用
计算机只认识0和1组成的二进制序列,因此任何文件中的内容要想被计算机识别或者想存储在计算机上都需要转换为二进制序列。那么字符与二进制序列怎么进行想换转换呢?于是人们尝试建立一个表格来存储一个字符与一个二进制序列的对应关系。
编码 将字符转换为对应的二进制序列的过程叫做字符编码
解码 将二进制序列转换为对应的字符的过程叫做字符解码
2. 字符编码的简单发展过程
1) ASCII码诞生
最早建立这个字符与十进制数字对应的关系的是美国,这张表被称为ASCII码(American Standard Code for Information Interface, 美国标准信息交换代码)。ASCII码是基于拉丁字母的一套电脑编程系统,主要用于显示现代英语和其他西欧语言。它被设计为用1个字节来表示一个字符,所以ASCII码表最多只能表示2**8=256个字符。实际上ASCII码表中只有128个字符,剩余的128个字符是预留扩展用的。
2) GBK等各国编码诞生
随着计算机的普及和发展,很过国家都开始使用计算机。大家发现ASCII码预留的128个位置根本无法存储自己国家的文字和字符,因此各个国家开始制定各自的字符编码表,其中中国的的字符编码表有GB2312和GBK。
3) Unicode诞生
后来随着世界互联网的形成和发展,各国的人们开始有了互相交流的需要。但是这个时候就存在一个问题,每个国家所使用的字符编码表都是不同的。比如我们发送一句“你好,我好喜欢你演的爱情动作电影!”给岛国的仓老师,苍老师电脑上用的是日本的字符编码表,因此她的电脑无法正确显示我们发送的内容。这个时候,人们希望有一个世界统一的字符编码表来存放所有国家所使用的文字和符号,这就是Unicode。Unicode又被称为 统一码、万国码、单一码,它是为了解决传统的字符编码方案的局限性而产生的,它为每种语言中的每个字符设定了统一并且为之一的二进制编码。Unicode规定所有的字符和符号最少由2个字节(16位)来表示,所以Unicode码可以表示的最少字符个数为2**16=65536。
4) UTF-8诞生
为什么已经有了Unicode还要UTF-8呢?这是由于当时存储设备是非常昂贵的,而Unicode中规定所有字符最少要由2个字节表示。人们认为像原来ASCII码中的字符用1个字节就可以了,因此人们决定创建一个新的字符编码来节省存储空间。UTF-8是对Unicode编码的压缩和优化,它不在要求最少使用2个字节,而是将所有字符和符号进行分类:
ascii码中的内容用1个字节保存
欧洲的字符用2个字节保存
东亚的字符用3个字节保存
...
UTF-8是目前最常用,也是被推荐使用的字符编码。
六、Python格式化输出
输入:input("提示信息:")
输出:print("输出的是:")
换行输出: \n
Python2.x 中使用 Python3.x 的 print 函数
如果 Python2.x 版本想使用 Python3.x 的 print 函数,可以导入 __future__ 包,该包禁用 Python2.x 的 print 语句,采用 Python3.x 的 print 函数:
>>> list =["a", "b", "c"]
>>> print list # python2.x 的 print 语句
['a', 'b', 'c']
>>> from __future__ import print_function # 导入 __future__ 包
>>> print list # Python2.x 的 print 语句被禁用,使用报错
File "<stdin>", line 1
print list
^
SyntaxError: invalid syntax
>>> print (list) # 使用 Python3.x 的 print 函数
['a', 'b', 'c']
>>>
Python3.x 与 Python2.x 的许多兼容性设计的功能可以通过 __future__ 这个包来导入。
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上逗号 , 。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
x="a"
y="b"
# 换行输出
print x
print y
print '---------'
# 不换行输出
print x,
print y,
# 不换行输出
print x,y
以上实例执行结果为:
a
b
---------
a b a b
格式化输出
方式一:使用百分号(%)字符串格式化
print("my name is %s, and my age is %d" %(name,age))
方式二:使用format字符串格式化
位置参数
print("my name is {}, and my age is {}".format(age,name))print("my name is {}, and my age is {}".format(age,name))
关键字参数
print("my name is {name}, and my age is {age}".format(age=18,name="jack"))
注释: 位置参数("{0}".format()),关键字参数("{关键字}".format())