Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,做为ABC语言的一种继承.Python是纯粹的自由软件,源代码和解释器CPython遵循 GPL(GNU General Public License)协议.关于python的哲学:python崇尚:"优雅"、"明确"、"简单",Python是用最简单最优雅最明确的方法来解决问题.java
Python 是一种动态解释型的编程语言,Python 简单易学、功能强大,支持面向对象、与函数式编程.Python能够在 Windows、Unix等多个操做系统上使用,同时Python也被称为"胶水语言",Python做为最流行的脚本语言之一,其具备内置的高级数据结构和简单有效的面向对象编程思想实现.同时语法简洁而清晰,类库丰富而强大,很是适合于进行快速原型开发,能够用最少的时间换取最高效的开发效率,另外Python能够运行在多种系统平台下,从而使得只须要编写一次代码,就能够在多个系统平台下都保持有同等的功能,这一点丝绝不逊色于Java虚拟机.python
Python 语言是由Guido van Rossum(吉多·范罗苏姆)
,在1989年开发的,1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,以做为ABC语言的一种继承,其设计思想是简洁明了Python的设计具备很强的可读性,相比其余语言常用英文关键字,其余语言的一些标点符号,它具备比其余语言更有特点语法结构.linux
Python 语言已经诞生20多年了,正逐渐发展为主流程序设计语言之一,目前在TIOBE编程语言排行榜中长期占据第4的位次,因为Python 语言的动态性,程序解释执行的速度比编译型语言慢,但随着Python语言的不断优化,一些诸如PyPy项目的不断发展,以及计算机硬件技术的不断发展,动态语言已经愈来愈受到工业领域的重视,另外最大的一点好处是,Python是纯粹的自由软件,源代码和解释器CPython遵循GPL(GNU General Public License)
协议,Python的哲学就是崇尚"优雅"、"明确"、"简单",Python是用最简单最优雅最明确的方法来解决问题.
程序员
程序设计语言在不断发展,从最初的汇编语言到后来的C、Pascal语言,发展到如今的C++、Java等高级编程语言,程序设计的难度在不断减少,软件的开发和设计已经造成了一套标准,开发工做已经再也不是复杂的任务.最初只能使用机器码编写代码,而如今可使用具备良好调试功能的IDE环境编程,Python使用C语言开发,可是Python再也不有C语言中的指针等复杂数据类型,Python的简洁性使得软件的代码大幅度地减小,开发任务进一步简化.django
面向对象的特性:
面向对象的程序设计解决告终构化程序设计的复杂性,使得程序设计更贴近现实生活.结构化程序设计把数据和逻辑混合在一块儿,不便于程序的维护.面向对象的程序设计抽象出对象的行为和属性,把行为和属性分离开,但又合理地组织在一块儿.Python语言具备很强的面向对象特性,并且简化了面向对象的实现,它消除了保护类型、抽象类、接口等面向对象的元素,使得面向对象的概念更容易理解.编程
内置的数据结构:
Python提供了一些内置的数据结构,这些数据结构实现了相似Java中集合类的功能,Python的数据结构包括元组、列表、字典、集合等.内置数据结构的出现简化了程序的设计,元组至关于"只读"的数组,列表能够做为可变长度的数组使用,字典至关于Java中的HashTable类型.vim
语言自己的简洁性:
Python语言的关键字比较少,它没有分号、begin、end等标记符号,代码块使用空格或制表键进缩进方式来分割,其代码简洁、短小,易于阅读,Python简化了相关循环语句,就算很是复杂的语句,也可以快速读懂.centos
语言自己的健壮性:
Python提供了异常处理机制,能捕获程序的异常状况.此外Python的堆栈跟踪对象可以指出程序出错的位置和出错的缘由,异常机制可以避免不安全退出的状况,同时能帮助程序员调试程序.数组
跨平台(相似Java):
Python代码会先编译为与平台相关的二进制代码,而后再解释执行,这种方式相似java,Python的执行速度提升了,Python编写的应用程序能够运行在 Windows、UNIX、Linux等,不一样的操做系统上.安全
Python 的应用领域
● 云计算:云计算最火的语言就是Pythhon,典型应用OpenStack框架就是使用Python开发的.
● WEB开发:众多优秀的WEB框架,众多大型网站均为Python开发,例如django框架.
● 人工智能:NumPy,SciPy,Matplotlib,Enthought,librarys这些框架是人工智能的主要实现.
● 系统运维:运维人员开发脚本进行自动化管理,因为全部的Linux/Mac默认集成Python环境.
● 金融计算:量化交易,金融分析,金融工程领域的普遍应用.
● 黑客编程:拥有大量的黑客攻击模块,能够很方便的使用这些模块.
● 图形GUI:PyQT,WxPython,TkInter等图形框架,如今已经逐步变得更加的完善.
Python 这些公司在用
● 谷歌:Google App Engine 谷歌爬虫等项目都在大量使用Python
● CIA:美国中情局网站就是用Python开发的
● NASA:美国航天局(NASA)大量使用Python进行数据分析和运算
● YouTube:世界上最大的视频网站YouTube就是用Python开发的
● Dropbox:美国最大的在线云存储网站,所有用Python实现,天天网站处理10亿个文件的上传和下载
● Facebook:大量的基础库均经过Python实现的
● Redhat:世界上最流行的Linux发行版本中的yum包管理工具就是用python开发的
● 豆瓣:豆瓣公司几乎全部的业务均是经过Python开发
Python 语言的优缺点
● 优雅:Python程序看上去老是简单易懂,能够编写那些很是很是复杂的程序.
● 效率:Python有很是强大的第三方库,避免重复造轮子,开发效率很是高.
● 高级语言:用Python语言编写程序的时候,你无需考虑诸如如何管理程序使用的内存的底层细节.
● 可移植性:因为开源本质,已经被移植在许多平台上,您写的程序能够不加修改的运行在任何系统上.
● 可扩展性:Python被称做胶水语言能够与各类语言实现的功能交互互相调用.
● 可嵌入性:你能够把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能.
● 速度慢:Python是脚本语言,解释执行因此其执行效率很低,但通常工做足以应对.
● 代码不能加密:python是解释语言代码,没法加密,开源精神很重要.
● 线程不能利用多CPU问题:GIL即全局解释器锁,使得任什么时候刻仅有一个线程在执行.
以上就是所有的关于Python的简单介绍了,具体若是想进一步了解Python的其余历史,请自行问度娘.
参考博客 cnblogs.com/alex3714
Python的开发环境安装和配置很是的简单,若是是Linux系统则会默认集成安装了Python环境,Python的可执行文件被放在了/usr/local/bin
目录下,库函数被安装在了/usr/local/python
目录中,接下来咱们将使用源码的方式来编译安装一下Python解释器.
1.首先安装gcc编译器,和Python的相关依赖包.
[root@localhost ~]# yum -y install gcc zlib zlib-devel openssl openssl-devel libffi-devel Package gcc-4.8.5-36.el7.x86_64 already installed and latest version Package zlib-1.2.7-18.el7.x86_64 already installed and latest version Package zlib-devel-1.2.7-18.el7.x86_64 already installed and latest version Package 1:openssl-1.0.2k-16.el7.x86_64 already installed and latest version Package 1:openssl-devel-1.0.2k-16.el7.x86_64 already installed and latest version Package libffi-devel-3.0.13-18.el7.x86_64 already installed and latest version Nothing to do
2.这里咱们须要编译并安装Python解释器.
[root@localhost ~]# yum install -y readline [root@localhost ~]# wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz [root@localhost ~]# tar xvzf Python-3.7.0.tgz -C /usr/src/python3.7 [root@localhost ~]# cd /usr/src/Python-3.7.0/ [root@localhost ~]# ./configure --prefix=/usr/local/python3.7 [root@localhost ~]# make && make altinstall
3.将Python头文件拷贝到标准目录,避免直接使用Python找不到所需的头文件.
[root@localhost ~]# cd /usr/local/include/python3.7/ [root@localhost ~]# cp -a ./* /usr/local/include/
4.接着咱们备份一下旧版本的Python,并建立符号连接连接到新版本的Python上面.
[root@localhost ~]# cd /usr/bin/ [root@localhost bin]# mv python python.old [root@localhost bin]# ln -s /usr/local/bin/python3.7 /usr/local/bin/python [root@localhost bin]# rm -rf /usr/bin/python [root@localhost bin]# cp /usr/local/bin/python3.7 /usr/bin/python
5.因为yum是用Python开发的,这里为了不冲突要改掉他的配置.
[root@localhost ~]# vim /usr/bin/yum #!/usr/bin/python2.7 ←此处将python改为python2.7 [root@localhost ~]# vim /usr/libexec/urlgrabber-ext-down #!/usr/bin/python2.7 ←此处将python改为python2.7
6.最后测试python新版本是否生效了.
[root@localhost ~]# python Python 3.7.0 (default, Apr 17 2018, 11:03:21) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> exit()
python3中格式化输出默认接收的都视为字符串,若是须要数字则须要另外强制转换为int()转换为数字.
>>> name = input("请输入你的名字:") 请输入你的名字:lyshark >>> print("Hello " + name) Hello lyshark >>> age = input("请输入你的年龄:") 请输入你的年龄:22 >>> type(age) <class 'str'> #默认状况是字符串 >>> age1 = input("请输入你的年龄:") >>> age1 = int(age1) #此处强制类型转换 >>> type(age1) <class 'int'> #再次查询已变成整形
输入密码时,若是想要不可见,须要利用getpass模块中的getpass方法,即:
import getpass # 将用户输入的内容赋值给 pwd 变量 pwd = getpass.getpass("请输入密码:") 请输入密码: # 打印输入的内容 print(pwd)
输出字符串: 格式化输出字符串.
>>> str="hello python" >>> print(str) hello python
输出整数: 格式化输出整数.
>>> strHello="the length of (%s) is %d" %("hello world",len("hello world")) >>> print(strHello) the length of (hello world) is 11
进制输出: 格式化输出十进制,十六进制,八进制.
>>> nHex=0x20 >>> print("十六进制=%x,十进制=%d,八进制=%o"%(nHex,nHex,nHex)) 十六进制=20,十进制=32,八进制=40
二进制输出: 格式化输出二进制,可使用python函数bin().
>>> bin(155) '0b10011011'
格式化输出浮点数(float):
>>> import math >>> print("PI=%F"%math.pi) PI=3.141593 >>> print("PI=%10.2f"%math.pi) PI= 3.14 >>> print("PI=%-10.2f"%math.pi) PI=3.14
格式化输出字符串(string):
>>> print("%3s"%("lyshark")) lyshark >>> print("%3s"%("lyshark")) lyshark >>> print("%.*s"%(4,"lyshark")) lysh >>> print("%10.3s"%("lyshark")) lys
输出一个列表(list):
>>> list=[1,2,3,4,5,"lyshark"] >>> print(list) [1, 2, 3, 4, 5, 'lyshark'] >>> >>> dic={1:"A",2:"b",3:"c"} >>> print(dic) {1: 'A', 2: 'b', 3: 'c'}
自动换行: print会自动在行末加上回车,若是不需回车,只须要加上,便可.
>>> for i in range(0,5): ... print(i,)
万能的%参数:
>>> format="%r %r %r %r" >>> print(format%(1,2,3,4)) 1 2 3 4
格式化打印: 让多个print打印在一行内.
print('hello', end = " ") print('world', end = "*") print('!') """ 输出结果是: hello world*! """
字符串拼接:
>>> str1="hello" >>> str2="lyshark" >>> print(str1+str2) hellolyshark
拓展知识: 打印一个乘法口诀表.
for i in range(1,10): for m in range (1,i+1): sum = i * m if m < i: print(m, '*', i, '=', sum ,end= ' ') else: print(m, '*', i, '=', sum)
sys模块:
import sys print(sys.argv) root@localhost:~$ python test.py helo world ['test.py', 'helo', 'world'] #把执行脚本时传递的参数获取到了
os模块:
>>> import os >>> os.system("df -h") #调用系统命令
os.system()执行系统命令,若是有变量存储该执行的结果,该变量只会存储该命令执行成功或者失败返回值,不会存储命令执行的结果,os.system("df -h")会有返回值.
>>> result = os.system("df -h") df: ‘/mnt/hgfs’: Protocol error Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 797M 9.4M 788M 2% /run /dev/sda1 189G 10G 170G 6% /
若是须要保存命令执行的结果需哟使用os.popen("系统命令").read(),而后使用变量赋值输出.
>>> result = os.popen("df -h").read() >>> print(result) Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 797M 9.4M 788M 2% /run /dev/sda1 189G 10G 170G 6% /
本身写个补全模块tab.py:
#!/usr/bin/env python # python startup file import sys import readline import rlcompleter import atexit import os # tab completion readline.parse_and_bind('tab: complete') # history file histfile = os.path.join(os.environ['HOME'], '.pythonhistory') try: readline.read_history_file(histfile) except IOError: pass atexit.register(readline.write_history_file, histfile) del os, histfile, readline, rlcompleter
写完后保存,导入就可使用,按下tab看到补全效果了.
>>> import tab >>> import os >>> os. Display all 238 possibilities? (y or n) os.EX_CANTCREAT os.fchdir( os.EX_CONFIG os.fchmod( os.EX_DATAERR os.fchown(
Python 并不是彻底是解释性语言,它是有编译的,先把源码py文件编译成pyc或者pyo,而后由Python的虚拟机执行,相对于py文件来讲,编译成pyc和pyo本质上和py没有太大区别,只是对于这个模块的加载速度提升了,并无提升代码的执行速度,一般状况下不用主动去编译pyc文件,文档上说只要调用了import model
那么model.py就会先编译成pyc而后加载.
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中.
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,若是找到,先对.pyc文件和.py文件的最近一次的修改时间进行判断,若是.pyc文件的修改时间晚于.py文件,说明.py文件中的源代码未修改过,则直接载入,不然就重复上面的过程.
因此咱们应该这样来定位PyCodeObject和pyc文件,咱们说pyc文件实际上是PyCodeObject的一种持久化保存方式.
编译成pyc文件: 将咱们写好的一个.py文件编译成.pyc文件.
[root@localhost ~]# ls -lh total 4.0K -rw-r--r--. 1 root root 43 Jan 8 02:22 test.py [root@localhost ~]# python -m test.py [root@localhost ~]# ls -lh total 8.0K -rw-r--r--. 1 root root 43 Jan 8 02:22 test.py -rw-r--r--. 1 root root 163 Jan 8 02:25 test.pyo
编译成pyo文件: 将咱们写好的一个.py文件编译成.pyo文件.
[root@localhost ~]# ls -lh total 4.0K -rw-r--r--. 1 root root 43 Jan 8 02:22 test.py [root@localhost ~]# python -O -m test.py [root@localhost ~]# ls -lh total 8.0K -rw-r--r--. 1 root root 43 Jan 8 02:22 test.py -rw-r--r--. 1 root root 163 Jan 8 02:25 test.pyo
1.经过pip安装打包工具pyinstaller
.
[root@localhost ~]# yum install -y python-pip Package python2-pip-8.1.2-6.el7.noarch already installed and latest version Nothing to do [root@localhost ~]# pip install pyinstaller Collecting pyinstaller Downloading https://files.pythonhosted.org/pyinstall
2.准备测试文件,执行如下命令加密生成可执行文件.
[root@localhost ~]# ls -lh total 4.0K -rw-r--r--. 1 root root 43 Jan 8 02:22 test.py [root@localhost ~]# pyinstaller -F ./test.py 44 INFO: PyInstaller: 3.4 44 INFO: Python: 2.7.5 44 INFO: Platform: Linux-3.10.0-862.el7.x86_64-x86_64-with-centos-7.5.1804-Core 44 INFO: wrote /root/test.spec 152 INFO: UPX is not available. 155 INFO: Extending PYTHONPATH with paths ......
3.而后查看,在当前目录会看到生成个3个目录,其中dist
目录中的内容,就是生成的可执行文件.
[root@localhost ~]# ls -lh total 8.0K drwxr-xr-x. 3 root root 18 Jan 8 02:29 build drwxr-xr-x. 2 root root 18 Jan 8 02:29 dist -rw-r--r--. 1 root root 43 Jan 8 02:22 test.py -rw-r--r--. 1 root root 786 Jan 8 02:29 test.spec [root@localhost dist]# ls -lh total 4.7M -rwxr-xr-x. 1 root root 4.6M Jan 8 02:29 test [root@localhost dist]# ./test hello world