本文内容java
本系列文章使用的Python版本为3.6.2python
使用开发工具为Pycharm2017linux
Python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,做为ABC语言的一种继承。c++
最新的TIOBE排行榜,Python赶超PHP占据第五,Python崇尚优美、清晰、简单,是一个优秀并普遍使用的语言。程序员
目前Python主要应用领域:数据库
Python在一些公司的应用:编程
编程语言主要从如下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每一个分类表明什么意思呢,咱们一块儿来看一下。windows
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机能够直接以机器语言来运行此程序,速度很快;安全
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,因此运行速度是不如编译后的程序运行的快的。网络
这是由于计算机不能直接认识并执行咱们写的语句,它只能认识机器语言(是二进制的形式)。
就好像你想看一本英文书,编译器会将整本书翻译成中文供你观看,这时你看的就会很方便,怎么反复看都没有问题;解释器只会解释你当前想要看的语句,若是你想再次看一遍一样的语句则须要再次找解释器解释一遍,这样就会给你的阅读带来麻烦。
动态语言和静态语言
一般咱们所说的动态语言、静态语言是指动态类型语言和静态类型语言。
(1)动态类型语言:动态类型语言是指在运行期间才去作数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其余的各类脚本语言如VBScript也多少属于动态类型语言。
(2)静态类型语言:静态类型语言与动态类型语言恰好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明全部变量的数据类型,C/C++是静态类型语言的典型表明,其余的静态类型语言还有C#、JAVA等。
强类型定义语言和弱类型定义语言
(1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,若是不通过强制转换,那么它就永远是这个数据类型了。举个例子:若是你定义了一个整型变量a,那么程序根本不可能将a看成字符串类型处理。强类型定义语言是类型安全的语言。
(2)弱类型定义语言:数据类型能够被忽略的语言。它与强类型定义语言相反, 一个变量能够赋不一样数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,可是强类型定义语言带来的严谨性可以有效的避免许多错误。另外,“这门语言是否是动态语言”与“这门语言是否类型安全”之间是彻底没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。
经过上面这些介绍,咱们能够得出,python是一门动态解释性的强类型定义语言。那这些基因使成就了Python的哪些优缺点呢?咱们继续往下看。
Python的优势
当你用一种语言开始做真正的软件开发时,你除了编写代码外,还须要不少基本的已经写好的现成的东西,来帮助你加快开发进度。好比说,要编写一个电子邮件客户端,若是先从最底层开始编写网络协议相关的代码,那估计一年半载也开发不出来。高级编程语言一般都会提供一个比较完善的基础代码库,让你能直接调用,好比,针对电子邮件协议的SMTP库,针对桌面环境的GUI库,在这些已有的代码库的基础上开发,一个电子邮件客户端几天就能开发出来。
Python就为咱们提供了很是完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称做“内置电池(batteries included)”。用Python开发,许多功能没必要从零编写,直接使用现成的便可。
除了内置的库外,Python还有大量的第三方库,也就是别人开发的,供你直接使用的东西。固然,若是你开发的代码经过很好的封装,也能够做为第三方库给别人使用。
许多大型网站就是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣。不少大公司,包括Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。
龟叔给Python的定位是“优雅”、“明确”、“简单”,因此Python程序看上去老是简单易懂,初学者学Python,不但入门容易,并且未来深刻下去,能够编写那些很是很是复杂的程序。
总的来讲,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代码是不可能的,因此,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。
这个缺点仅限于你要编写的软件须要卖给别人挣钱的时候。好消息是目前的互联网时代,靠卖软件受权的商业模式愈来愈少了,靠网站和移动应用卖服务的模式愈来愈多了,后一种模式不须要把源码给别人。
再说了,如今如火如荼的开源运动和互联网自由开放的精神是一致的,互联网上有无数很是优秀的像Linux同样的开源代码,咱们千万不要高估本身写的代码真的有很是大的“商业价值”。那些大公司的代码不肯意开放的更重要的缘由是代码写得太烂了,一旦开源,就没人敢用他们的产品了。
若是你正在使用Mac,系统是OS X 10.8~10.10,那么系统自带的Python版本是2.7。要安装最新的Python 3.6,有两个方法:
方法一:从Python官网下载Python 3.6的安装程序(网速慢的同窗请移步国内镜像),双击运行并安装;
方法二:若是安装了Homebrew,直接经过命令brew install python3
安装便可。
若是你正在使用Linux,那么基本表明你有着Linux管理经验,Linux上自带Python2,若是想升级到最新版应该难不倒你的。
首先,根据你的Windows版本(64位仍是32位)从Python的官方网站下载Python 3.6对应的64位安装程序或32位安装程序,而后,运行下载的EXE安装包:
特别要注意勾上Add Python 3.6 to PATH
,而后点“Install Now”便可完成安装。
输出方式常用的有两种,第一种是print()函数,下面咱们输出hello world。
print("hello world")
输出结果:
第二种输出方式须要引入sys库,而后使用sys.stdout.write()函数输出。
import sys sys.stdout.write("afsd")
输出结果:
从输出结果能够看出两种输出方式的差异,print()函数输出结果后会再加一个换行,而sys.stdout.write()则没有换行。
Python和其余经常使用高级语言不一样的地方是Python一条语句结束时不须要加分号,而且在Python中也不会用到大括号,Python的语句就只是用换行符和缩进来表示语句之间的关系。
换行就表示一条语句的结束,缩进表示语句间的包含关系。
因为Python是动态类型语言,因此不须要定义变量类型,直接写变量名就能够。
name = "my name is Vector" print(name)
输出结果:
在Python3中是能够直接输入中文的,例如print(“姓名”)这样,可是在Python2中须要在文件的顶部加上 -- coding:utf-8 -- 这句话,由于Python3的默认字符为Unicode,而Python2的默认字符为ASCII。
在Python中不只有单行的字符串,还有多行的字符串,多行字符串用 '''内容''' 标记,以下。
msg = ''' 这里是第一行 这里是第二行 这里是第三行 ''' print(msg)
输出结果:
Python中的单行注释用 # 来注释,以下。
print('hello world') #这里即将输出hello world
多行注释用三个单引号来标记 '''内容''',以下。
''' 这里是第一行注释 这里是第二行注释 这里是第三行注释 '''
在Python中单引号和双引号没有区别,都不会转义其余字符。
用户输入一般咱们用input()函数,以下。
username = input('username:') password = input('password:') print(username,password)
咱们输入vector和asd123
输出结果:
有了输入后,咱们就能够控制格式化输出了。
name = input('name:') age = input('age:') info = ''' ------------- Info -------------- Name:''' + name + ''' age:''' + age + ''' ------------- Over -------------- ''' print(info)
这里咱们输入vector和18
输出结果:
用 %s %d %f 等来控制格式,并在结尾一次传入参数,传参格式为 %(参数1,参数2,...)
%s表明字符串,%d表明正数,%f表明浮点数。
name = input('name:') age = int(input('age:')) info = ''' ------------- Info -------------- Name:%s age:%d ------------- Over -------------- '''%(name,age) print(info)
输出结果:
若是想将输出的内容变成红色,则用\033[31;1m%s\033[0m
若是想将输出的内容变成绿色,则用\033[32;1m%s\033[0m
格式:\033[显示方式;前景色;背景色m
30 40 黑色
31 41 红色
32 42 绿色
33 43 黃色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色
0 终端默认设置
1 高亮显示
4 使用下划线
5 闪烁
7 反白显示
8 不可见
例子:
\033[1;31;40m <!--1-高亮显示 31-前景色红色 40-背景色黑色--> \033[0m <!--采用终端默认设置,即取消颜色设置-->
下面演示一下输出结果带颜色的例子:
name = input('name:') age = int(input('age:')) info = ''' ------------- Info -------------- Name:\033[31;1m%s\033[0m #输出结果为红色 age:\033[32;1m%s\033[0m #输出结果为绿色 ------------- Over -------------- '''%(name,age) print(info)
输出结果:
在字符串中插入形参(形参用大括号标记{形参}),最后在结尾给形参赋值。
name = input('name:') age = int(input('age:')) info = ''' ------------- Info -------------- Name:{_name} age:{_age} ------------- Over -------------- '''.format(_name=name,_age=age) print(info)
输出结果:
形参用数字表示,在结尾直接按照顺序给形参赋值。
name = input('name:') age = int(input('age:')) info = ''' ------------- Info -------------- Name:{0} age:{1} ------------- Over -------------- '''.format(name,age) print(info)
输出结果:
须要引入getpass模块。
import getpass password = getpass.getpass("password:") print(password)
可是这个getpass()这个函数在pycharm中很差使,在其余工具中好使。
格式:
if 条件1 and 条件2 or 条件3: pass # 注意这里必定要有缩进 elif 条件4 and 条件5: pass else: pass
例子:
_username = 'rev' _password = 'rev123' username = input('username:') password = input('password:') if _username == username and _password == password: print('Welcome user {name} login...'.format(name = username))# 注意这里必定要有缩进 elif _username == username and _password != password: print('password error!') else: print('login fail..')# 注意这里必定要有缩进
Python中的while还有else处理。
例子:
while True: print('this is loop...') break else: print('若是while循环条件不符合了,则执行这里的代码')
格式1:
for i in range(10): print('loop ',i)
这里的range表明循环次数,i 从0来是循环
输出结果:
格式2:
for i in range(0,10,2): print('loop ',i)
range中的第一个参数表明从几开始,第二个参数表明到几结束(不包括10),第三个参数2表明隔一个执行一次
格式3:
for i in "fasdfasd": print('loop ',i)
Python中的for循环还能够循环字符串、列表、元组等。
输出结果:
print(sys.path) # 打印环境变量 print(sys.argv) # 打印当前脚本的路径,在pycharm中打印绝对路径,在命令行中打印相对路径(原本打印的就是相对路径) one = sys.argv[1] #用来在外部调用的时候传参, 1表明传入的第一个参数, two = sys.argv[2] #2表明传入的第二个参数, 这样外部调用的时候就能够传多个参数了
print(os.system('dir')) # system函数就是命令行 cmd = os.system('dir') print(cmd) # 这里输出的是 0 由于,system是直接把输出到屏幕上,并非返回,若是输出成功则返回0 cmd = os.popen('dir').read() #popen()方法返回的是该对象的地址,read()方法是将地址中的内容读出来 print(cmd) # 建立目录函数 os.mkdir('new_dir')
//result = 值1 if 条件 else 值2 a,b,c = 1,3,5 d = a if a > b else c print(d) # d = c = 5 # 若是条件为真:result = 值1 # 若是条件为假:result = 值2
msg = '我爱大延边日不落帝国' print(msg) # 字符串输出 print(msg.encode(encoding='utf-8')) # 将字符串转换成二进制 print(msg.encode(encoding='utf-8').decode(encoding='utf-8')) # 将二进制转换成字符串 # 若是encode和decode不写参数,默认就是utf-8