python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
2018年9月的TIOBE排行榜,Python已经占据第四的位置, Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。
由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!!
Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。
编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下。
编译型与解释型
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)
编译型 优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型 优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。
(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,
在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。
(2)静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,
其他的静态类型语言还有C#、JAVA等。
(1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。
举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
(2)弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。
通过上面这些介绍,我们可以得出,python是一门动态解释性的强类型定义语言。
先看优点
Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。再看缺点
速度慢,Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.01s,用Python是0.1s,这样C语言直接比Python快了10倍,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。
由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。
Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
JyhtonPython的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。
IronPythonPython的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行。(与Jython类似)
PyPy(特殊)Python实现的Python,将Python的字节码字节码再编译成机器码。
Windows:
下载地址:https://www.python.org/downloads/
首先区分你当前的操作系统,然后选择相对应的内容进行点击,我当前操作系统是Windows我选择的是普通电脑系统.下一步如下图:
然后选择和你电脑相对应的点击,然后就自动下载了
一、'Hello World!'
1 2 3 4 5 python2写法: print 'hello world' python3写法: print ( 'hello world' )二、执行(解释器)
明确的指出 hello.py 脚本由 python 解释器来执行。执行Python代码时,如果导入了其他的 .py 文件,那么,执行过程中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码。
1 2 3 [meet@r usr]$ ls a.py * a.py a.pyc [meet@r usr]$ 1 2 3 #!/usr/bin/env python print "你好,世界"改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:
1 2 3 4 #!/usr/bin/env python # -*- coding: utf-8 -*- print "你好,世界"三、变量
1、声明变量
1 2 3 4 5 name = 'Meet' # 这样的形式就是在定义一个变量 name 是一个变量名 = 是一个赋值操作 'Meet' 是一个值变量的作用:昵称其代指内存里某个地址中保存的内容
变量定义的规则:
变量名只能是 字母、数字或下划线的任意组合变量名的第一个字符不能是数字以下关键字不能声明为变量名['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']变量名建议不使用拼音和中文变量的要具有意义变量名不要过长变量名要区分大小写变量名推荐写法: 驼峰体 MeetTheGirl下划线 meet_the_girl练习
1 2 3 4 5 6 ab c = 'meet' _ = 'meet' 7b = 'meet' a_c = 'meet' user_name = 'meet' <br>UserName = 'meet' <br> 以上那个是可以成立的,下边这个俩个都是变量命名的规范.倒数第二是下划线方法,官方推荐使用这用,倒数第一这个是驼峰体 答案2、变量的赋值
1 2 name1 = 'Meet' name2 = 'Guo'1 2 name1 = 'Meet' name2 = name1
变量的小高级
1 2 3 4 5 age1 = 18 age2 = age1 age1 = 12 age3 = age2 print (age1,age2,age3)常量:
常量就是将变量名大写,尽量保持不更改的一种量
练习
1 2 3 4 age = 12 age = 12 + 1 age1 = age + 1 print ( "我今年:" ,age1) 1 2 3 4 5 name1 = 'alex' name2 = name1 name1 = 'wusir' name3 = name2 打印name1,name2name3分别对应的值是什么 答案四、注释
单行注释:#Meet
多行注释:'''Meet'''
1 2 3 4 5 6 7 8 9 10 单行注释(当行注释) # Meet 多行注释 ''' M e e t '''五、基础数据类型(int,str,bool)
int是整型;也就是我们从小就接触的数学中的整数,整型在计算机中运于计算和比较在32位机器上int的范围是: -2**31~2**31-1,即-2147483648~2147483647
在64位机器上int的范围是: -2**63~2**63-1,即-9223372036854775808~9223372036854775807
够你用了吧. 注意这些是整数.
定义一个int类型 1 2 3 4 5 num1 = 2 num2 = 3 print (num1 + num2) 结果: 5 # 整型就和我们学的数学一样可以进行加减乘除str是字符串;也就是我们从小就接触的中文,如果我们在程序中直接把中文写入,程序是不能分辨这是个什么鬼东西.所以我们要遵循一种规则
让计算机能够识别,这个规则就是只要是用引号引起来就是字符串
在Python中,凡是用引号引起来的,全是字符串.
数字类型有 +-*/ 字符串串有么?
字符串只有 + *。
1 2 3 4 5 6 7 8 9 10 #字符串的拼接 s1 = 'a' s2 = 'bc' #print(s1 + s2) #相乘 str * int name = '坚强' #print(name*8字符串可以用单引号,双引号,或者三引号引起来,没有什么区别,只是一些特殊的格式需要不用的引号 比如:
1 msg = "My name is Alex , I'm 22 years old!" 这个就需要单双引号配合。 1 2 3 4 5 6 7 8 9 10 11 msg = """ 今天我想写首小诗, 歌颂我的同桌, 你看他那乌⿊的短发, 好像⼀一只炸毛鸡。 """想多行赋值一个字符串,就需要三引号。
bool是布尔值;其实这个东西也是我们很小就接触的东西,俗话说人要<是非分明>.其实这个bool值就是我们所说的是非,布尔值中一共分为俩个状态
True 就对应我们话中的是,白话来说就是真
False 就对应我们话中的非,白话来说就是假
例如我们想让计算机帮我们做一下俩个的大小比较
1 2 3 4 5 6 7 print ( 3 > 7 ) 结果: False print ( 7 > 3 ) 结果: True六、程序交互(用户交互)
输入用户名
1 2 3 4 5 6 7 8 9 10 11 #!/usr/bin/env python #-*- coding:utf-8 -*- #将用户输入的内容赋值给name变量 python2的写法 name = raw_input ( "请输入用户名:" ) print name python3的写法 name = input ( "请输入用户名:" ) print (name)输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即:
1 2 3 4 5 6 #!/usr/bin/env python #-*- coding:utf-8 -*- import getpass pwd = getpass.getpass( "请输入密码:" ) print (pwd)注意:这个密码不可见的方法只能在终端中实现
需要注意的是input程序交互获取到的内容是字符串,我们看下面的简单示例:
1 2 3 4 5 6 7 8 9 10 11 12 num = input ( '请输入数字:' ) print (num + 5 ) 结果: 请输入数字: 6 Traceback (most recent call last): File "D:/python_object/test.py" , line 350 , in <module> print (num + 5 ) TypeError: must be str , not int # 报错了,提示我们类型错误,数字和字符串是不能相加的.可是我们输入的明明是数字啊.其实我们看着输入的是 # 数字但是input获取到的都是字符串七、流程控制与缩进
判断条件
1 2 3 age = input ( "输入年龄:" ) if int (age) > = 18 : print ( "成年了,能干成年人的事了" )二选一游戏(两者选其一)
以上这种写法是让用户输入内容,然后进行比较,如果一个条件成立那就执行print,为了明确的区分改执行哪些部分,当条件成立后执行缩进的代码
然后程序就退出了.下边的else就不会在执行了
多个选项进行单选(选择题)
1 2 3 4 5 6 7 num = input ( '请输入要比较的数字:' ) if int (num) > = 22 : print ( '可以扯证了' ) elif int (num) > = 18 : print ( '成年了,可以干一些成年的事了' ) elif int (num) < 18 : print ( '还是小屁孩' )以上写法就是我们做的单选题一样,三个分支判断中只要有个成立,其余都不在执行
嵌套if
1 2 3 4 5 6 7 8 9 name = input ( '请输入名字:' ) if name = = 'meet' : age = input ( '请输入年龄:' ) if int (age) = = 18 : print ( '输入全部正确' ) else : print ( '年龄输入错误!' ) else : print ( '名字输入错误!' )这样写法很常用,这样我们就可以明确的知道用户输入的名字和年龄那个是错误的,并且还做一个判断如果名字正确后在进行判断密码
转载于:https://www.cnblogs.com/yuanyufei/p/11184359.html
