一、概述
1、简介
Python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。
现在,全世界差不多有600多种编程语言,但流行的编程语言也就那么20来种。如果你听说过TIOBE排行榜,你就能知道编程语言的大致流行程度。这是最近10年最常用的10种编程语言的变化图:
总的来说,这几种编程语言各有千秋。C语言是可以用来编写操作系统的贴近硬件的语言,所以,C语言适合开发那些追求运行速度、充分发挥硬件性能的程序。而Python是用来编写应用程序的高级编程语言。
当你用一种语言开始作真正的软件开发时,你除了编写代码外,还需要很多基本的已经写好的现成的东西,来帮助你加快开发进度。比如说,要编写一个电子邮件客户端,如果先从最底层开始编写网络协议相关的代码,那估计一年半载也开发不出来。高级编程语言通常都会提供一个比较完善的基础代码库,让你能直接调用,比如,针对电子邮件协议的SMTP库,针对桌面环境的GUI库,在这些已有的代码库的基础上开发,一个电子邮件客户端几天就能开发出来。
Python就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写,直接使用现成的即可。
除了内置的库外,Python还有大量的第三方库,也就是别人开发的,供你直接使用的东西。当然,如果你开发的代码通过很好的封装,也可以作为第三方库给别人使用。
许多大型网站就是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。
龟叔给Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。
2、Python的缺点
任何编程语言都有缺点,Python也不例外。优点说过了,那Python有哪些缺点呢?
第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。
但是大量的应用程序不需要这么快的运行速度,因为用户根本感觉不出来。例如开发一个下载MP3的网络应用程序,C程序的运行时间需要0.001秒,而Python程序的运行时间需要0.1秒,慢了100倍,但由于网络更慢,需要等待1秒,你想,用户能感觉到1.001秒和1.1秒的区别吗?这就好比F1赛车和普通的出租车在北京三环路上行驶的道理一样,虽然F1赛车理论时速高达400公里,但由于三环路堵车的时速只有20公里,因此,作为乘客,你感觉的时速永远是20公里。
第二个缺点就是代码不能加密。如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。
3、Python的解释器种类
想要学一门编程语言:安装Python解释器、学习python语法并编写代码、使用Python解释器去执行编写好的代码。
Python在全球非常的火,很多公司都会想要来层热度。
由于Python太火了,所有就有很多的公司都开发了Python解释器(用来翻译python代码成为计算机能够识别的命令)。
- CPython【主流】,底层是由C语言开发出来的Python解释器。
- Jython,是由Java语言开发出来的Python解释器,方便与让Python和Java代码做集成。
- IronPython,是基于C#语言开发出来的Python解释器,方便与让Python和C#代码做集成。
- RubyPython,...
- PyPy,是对CPython的优化,他的执行效率提高了。引入编译器的功能,本质上将Python代码进行编译,再去执行编译后的代码。
- ...
注意:常说的Python解释器默认指的就是CPython解释器。
4、CPython解释器的版本
CPython的解释器主要有两大版本:
- 2.x,目前最新的Python2.7.18。(2020后不再维护)
- 3.x,目前最新的3.9.0版本(授课)
二、安装
目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的。由于3.x版越来越普及,我们的教程将以最新的Python 3.8版本为基础。请确保你的电脑上安装的Python版本是最新的3.8.x
1、下载地址
2、在Mac上安装Python
如果你正在使用Mac,系统是OS X>=10.9,那么系统自带的Python版本是2.7。要安装最新的Python 3.8,有两个方法:
方法一:从Python官网下载Python 3.8的安装程序,下载后双击运行并安装;
方法二:如果安装了Homebrew,直接通过命令brew install python3
安装即可
3、Windows版本
首先,根据你的Windows版本(64位还是32位)从Python的官方网站下载Python 3.8对应的安装程序,然后运行下载的exe安装包
特别要注意勾上Add Python 3.8 to PATH
,然后点“Install Now”即可完成安装
安装完终端输入python查看
C:\Users\Admin>python Python 3.8.10 (tags/v3.8.10:3d8993a, May 3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
三、第一个程序
在命令行模式下敲命令python
,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>
在Python交互模式下输入exit()
并回车,就退出了Python交互模式,并回到命令行模式
在交互模式的提示符>>>
下,直接输入代码,按回车,就可以立刻得到代码执行结果
C:\Users\Admin>python Python 3.8.10 (tags/v3.8.10:3d8993a, May 3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 1+1 2 >>>
如果要让Python打印出指定的文字,可以用print()
函数,然后把希望打印的文字用单引号或者双引号括起来,但不能混用单引号和双引号:
C:\Users\Admin>python Python 3.8.10 (tags/v3.8.10:3d8993a, May 3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 1+1 2 >>> print('你好 python') 你好 python >>>
在命令行模式下,可以执行python
进入Python交互式环境,也可以执行python hello.py
运行一个.py
文件。
执行一个.py
文件只能在命令行模式执行
记事本编写一个简单程序
print("你好 hello")
将其保存为py文件hello.py
然后执行
Microsoft Windows [版本 10.0.19044.1766] (c) Microsoft Corporation。保留所有权利。 D:\>hello.py 你好 hello
命令行参数
很多程序可以执行一些操作来查看一些基本信息,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. ]
我们在使用脚本形式执行 Python 时,可以接收命令行输入的参数,
获取命令行参数使用 sys 的 sys.argv 来获取或者Python 提供了 getopt 模块来获取命令行参数。
sys 的 sys.argv 来获取
#!/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 为相关选项的错误信息。
实例
#!/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
文本编辑器推荐微软出品的Visual Studio Code,它不是那个大块头的Visual Studio,它是一个精简版的迷你Visual Studio,并且,Visual Studio Code可以跨!平!台!Windows、Mac和Linux通用。
请注意,不要用Word和Windows自带的记事本。Word保存的不是纯文本文件,而记事本会自作聪明地在文件开始的地方加上几个特殊字符(UTF-8 BOM),结果会导致程序运行出现莫名其妙的错误。
关于Visual Studio和Visual Studio Code(VSCode)的区别
四、输入输出
输出
用print()
在括号中加上字符串,就可以向屏幕上输出指定的文字。比如输出'hello, world'
,用代码实现如下:
>>> print('hello, world')
print()
函数也可以接受多个字符串,用逗号“,”隔开,就可以连成一串输出:
>>> print('The quick brown fox', 'jumps over', 'the lazy dog') The quick brown fox jumps over the lazy dog
print()
会依次打印每个字符串,遇到逗号“,”会输出一个空格,因此,输出的字符串是这样拼起来的:
print()
也可以打印整数,或者计算结果:
>>> print(300) 300 >>> print(100 + 200) 300
因此,我们可以把计算100 + 200
的结果打印得更漂亮一点:
>>> print('100 + 200 =', 100 + 200) 100 + 200 = 300
注意,对于100 + 200
,Python解释器自动计算出结果300
,但是,'100 + 200 ='
是字符串而非数学公式,Python把它视为字符串,请自行解释上述打印结果。
输入
现在,你已经可以用print()
输出你想要的结果了。但是,如果要让用户从电脑输入一些字符怎么办?Python提供了一个input()
,可以让用户输入字符串,并存放到一个变量里。比如输入用户的名字:
>>> name = input() Michael
当你输入name = input()
并按下回车后,Python交互式命令行就在等待你的输入了。这时,你可以输入任意字符,然后按回车后完成输入。
输入完成后,不会有任何提示,Python交互式命令行又回到>>>
状态了。那我们刚才输入的内容到哪去了?答案是存放到name
变量里了。可以直接输入name
查看变量内容:
>>> name 'Michael'
**什么是变量?**请回忆初中数学所学的代数基础知识:
设正方形的边长为a
,则正方形的面积为a x a
。把边长a
看做一个变量,我们就可以根据a
的值计算正方形的面积,比如:
若a=2,则面积为a x a = 2 x 2 = 4;
若a=3.5,则面积为a x a = 3.5 x 3.5 = 12.25。
在计算机程序中,变量不仅可以为整数或浮点数,还可以是字符串,因此,name
作为一个变量就是一个字符串。
要打印出name
变量的内容,除了直接写name
然后按回车外,还可以用print()
函数:
>>> print(name) Michael
有了输入和输出,我们就可以把上次打印'hello, world'
的程序改成有点意义的程序了:
name = input() print('hello,', name)
运行上面的程序,第一行代码会让用户输入任意字符作为自己的名字,然后存入name
变量中;第二行代码会根据用户的名字向用户说hello
,比如输入Michael
:
C:\Workspace> python hello.py Michael hello, Michael
但是程序运行的时候,没有任何提示信息告诉用户:“嘿,赶紧输入你的名字”,这样显得很不友好。幸好,input()
可以让你显示一个字符串来提示用户,于是我们把代码改成:
name = input('please enter your name: ') print('hello,', name)
再次运行这个程序,你会发现,程序一运行,会首先打印出please enter your name:
,这样,用户就可以根据提示,输入名字后,得到hello, xxx
的输出:
C:\Workspace> python hello.py please enter your name: Michael hello, Michael
每次运行该程序,根据用户输入的不同,输出结果也会不同。
五、注释
作为程序员,写代码注释是非常基础且有用的技能,方便以后对代码进行维护和理解
文件夹注释
文件注释
""" 这个文件主要为项目提供工具和转换的功能,初次之外还有日志.... 例如: 1. 2. 3. """
代码注释
name = "alex" # 在名称后面添加一个大烧饼 data = name + "dsb" print(data) name = "alex" """ 在名称后面添加一个大烧饼,内部的实现机制: 1. xxx 2. xxx 3. xx """ data = name + "dsb" print(data)
六、中文编码
如何使用的是Python 2.0+
Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 # coding=utf-8 就行了
#!/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 设置步骤:
七、Python 标识符
在 Python 里,标识符由字母、数字、下划线组成。
在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。
Python 中的标识符是区分大小写的。
以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。
以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 __foo__ 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。
Python 可以同一行显示多条语句,方法是用分号 ; 分开,如:
>>> print ('hello');print ('runoob');
hello
runoob
八、Python 保留字符
下面的列表显示了在Python中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。
所有 Python 的关键字只包含小写字母。
and | exec | not |
assert | finally | or |
break | for | pass |
class | from | |
continue | global | raise |
def | if | return |
del | import | try |
elif | in | while |
else | is | with |
except | lambda | yield |
九、编码规范
在Python开发过程中会创建文件夹/文件/变量等,这些在命名有一些潜规则(编写代码时也要注意pep8规范)。
- 文件夹,小写 & 小写下划线连接,例如:
commands
、data_utils
等。 - 文件,小写 & 小写下划线连接,例如:
page.py
、db_convert.py
等。 - 变量
- 全局变量,大写 & 大写下划线连接,例如:
NAME = "武沛齐"
、BASE_NAME = 18
- 局部变量,小写 & 小写下划线连接,例如:
data = [11,22,33]
、user_parent_id = 9
等。
最后,请务必注意,Python程序是大小写敏感的,如果写错了大小写,程序会报错。
Python使用缩进来组织代码块,请务必遵守约定俗成的习惯,坚持使用4个空格的缩进。
在文本编辑器中,需要设置把Tab自动转换为4个空格,确保不混用Tab和空格
Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块。
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。
比如以下程序
#!/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空行
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
记住:空行也是程序代码的一部分。
十三、同一行显示多条语句
Python可以在同一行中使用多条语句,语句之间使用分号(;)分割,以下是一个简单的实例:
#!/usr/bin/python import sys; x = 'runoob'; sys.stdout.write(x + '\n')
执行以上代码,输出结果为:
$ python test.py runoob