Python介绍
Python是由创始人吉多·范罗苏姆(Guido van Rossum)在1989年圣诞节假期期间,为了打发时间,构思出来的一个新的脚本解释器。由于Guido在开发Python语言过程中,借鉴了很多ABC语言特性,所有后来包括Guido自己也那么认为,Python语言的前身就是ABC语言。
Python是一门面向对象的、动态解释型强定义语言;Python崇尚简洁、优美、清晰,是一门优秀的被广泛使用的语言。
在2015年以前,最流行的Python版本还是2.4,但是由于Python官方在2008年发布了3.0,一是款完全不同的Python版本,不兼容包括2.4在内以前的的任何版本,这就影响了3.0的推行,才出了一个既可以兼容2.4又支持很多3.0新特性的2.6版本。官方还开发了专门的帮助将2.x转为3.0版本的转换工具,因此,python3.0的使用才开始逐渐多了起来。
Python应用领域
云计算:Openstack
自动化:Saltstack、Ansible
系统运维:运维人员必会的语言
图形:PyQT, WxPython,TkInte
Web开发:众多大型网站都是基于Python开发,如Youtube 典型的Web框架有Django
科学运算:人工智能如AlphaGo、典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
金融行业:在金融工程领域,作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测
Python特点
优点
1)Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。
2)开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。
3)高级语言:当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
4)可移植性:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行
5)可扩展性:如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
6)可嵌入性:你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
缺点
1)速度慢:由于天生就是一门解释型语言,Python和C、JAVA对比的话,运行速度是会慢很多,适合对一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序;不适合对速度要求极高的搜索引擎等程序。
2)代码不能加密:如果你的项目源代码要求加密,那么不适合用Python开发
3)线程不能利用多CPU:这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行
Python的安装
1)windows
官方网站提供了默认的下载渠道:https://www.python.org
截止到现在,最多的还是3.5版本,不过要注意区分平台:Windows、Mac、Linux
建议同时下载安装两个版本,分别放在C:\Python2.7和C:\Python3.5, 方便对一些程序特性做测试
注意修改环境变量:
右键计算机-->属性-->高级系统设置-->环境变量-->找到变量名为Path的一行双击-->Python安装目录追加到变量值中,用分号;分割。
2)Linux
Linux Centos 7 中是将Python作为默认软件安装的,只不过具体OS版本不同
[[email protected] ~]# python python python2 python2.7 #centos7中默认为2.7版本
我们只需要下载并安装3.5版本就可以了,下载地址:https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz
tar xf Python-3.5.2.tar.xz cd Python-3.5.2/ ./configure make && make install
修改系统默认的Python版本
[[email protected] Python-3.5.2]# mv /usr/bin/python /usr/bin/python2.ori [[email protected] Python-3.5.2]# ln -s /usr/local/bin/python3.5 /usr/bin/python
为了防止修改完Python版本后yum出问题,需修改yum
vim /usr/bin/yum #!/usr/bin/python #修改为/usr/bin/python2.ori
3)Mac
直接下载运行即可
Max Os X 10.5:https://www.python.org/ftp/python/3.5.2/python-3.5.2-macosx10.5.pkg
Max Os X 10.6:https://www.python.org/ftp/python/3.5.2/python-3.5.2-macosx10.6.pkg
lichengbing:~ lichengbing.cn$ python3 Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>>
Python开发环境【Pycharm】
For Windows下载地址:http://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows&code=PCC
Python快速入门
1)我的第一个Python程序“Hello World!”
[[email protected] ~]# vim hello.py #!/usr/bin/env python print("Hello World!") [[email protected] ~]# ./hello.py # .执行文件需要给文件添加x权限 Hello World
2)变量和字符编码
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascillASCII(American Standard Code for InformationInterchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode Unicode(万国码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536.
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
#!/usr/bin/env python #设置脚本系统环境变量 # -*- coding:utf-8 -*- #Python3.0版以上默认字符集为UTF-8,可以支持中文显示 name = "lichengbing" age = 21 print(name,age)
3)注释
‘‘‘ name = "lichengbing" # This is a variable age = 21 print(name,age) ‘‘‘ #注释最好不超过80个字符
4)用户输入
C:\Users\lilongzi>python2 Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> user_name = raw_input("you name:") you name:lichengbing >>> print(user_name) lichengbing
格式化用户输入
name = input("input you name:") age = int(input("input you age:")) job = input("input you job:") msg = ‘‘‘ Infomation of user name:%s: -------------- Name: %s Age: %d Job: %s ------END----- ‘‘‘ % (name,name,age,job) print(msg)
执行结果
input you name:lichengbing input you age:25 input you job:ENGINEER Infomation of user name:lichengbing: -------------- Name: lichengbing Age: 25 Job: ENGINEER ------END-----
用户输入密码隐藏
import getpass username = input("uesrname:") password = getpass.getpass("password:") print(username,password) #只支持在Linux环境下用Python3执行
5)初识模块
调用系统命令
[[email protected] ~]# python Python 2.7.5 (default, Nov 20 2015, 02:00:19) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> os.system("df -h") Filesystem Size Used Avail Use% Mounted on /dev/sda3 9.0G 5.1G 4.0G 56% / devtmpfs 480M 0 480M 0% /dev tmpfs 489M 0 489M 0% /dev/shm tmpfs 489M 19M 470M 4% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda1 253M 111M 143M 44% /boot tmpfs 98M 0 98M 0% /run/user/0 0
保存调用的命令并定义为变量
>>> cmd_res = os.popen("df -h").read() >>> print(cmd_res) Filesystem Size Used Avail Use% Mounted on /dev/sda3 9.0G 5.1G 4.0G 56% / devtmpfs 480M 0 480M 0% /dev tmpfs 489M 0 489M 0% /dev/shm tmpfs 489M 20M 470M 4% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda1 253M 111M 143M 44% /boot tmpfs 98M 0 98M 0% /run/user/0
Python全局环境变量
>>> import sys >>> print(sys.path) [‘‘, ‘/usr/lib64/python27.zip‘, ‘/usr/lib64/python2.7‘, ‘/usr/lib64/python2.7/plat-linux2‘, ‘/usr/lib64/python2.7/lib-tk‘, ‘/usr/lib64/python2.7/lib-old‘, ‘/usr/lib64/python2.7/lib-dynload‘, ‘/usr/lib64/python2.7/site-packages‘, ‘/usr/lib64/python2.7/site-packages/gtk-2.0‘, ‘/usr/lib/python2.7/site-packages‘]
将tab.py放入环境变量中,Python在导入os等模块后能自动补全命令
[[email protected] site-packages]# pwd /usr/lib64/python2.7/site-packages #!/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
查看自动补全
>>> import tab >>> import os >>> os. Display all 249 possibilities? (y or n) os.EX_CANTCREAT os.__package__ os.listdir( os.EX_CONFIG os.__reduce__( os.lseek(
6)if条件判断
if判断
age = 22 guess_number = int(input("input you guess number:")) if guess_number == age : print("Congratulations!") elif guess_number < age : print("Think smaller...") else : print("Think larger...")
跳出循环
age = 22 for i in range(10): guess_number = int(input("input you guess number:")) if guess_number == age : print("Congratulations!") break elif guess_number < age : print("Think smaller...") else : print("Think larger...")
简单的猜数字游戏
age = 22 counter = 0 for i in range(10): if counter <3: guess_number = int(input("input you guess number:")) if guess_number == age : print("Congratulations!") break elif guess_number < age : print("Think smaller...") else : print("Think larger...") else: #print("Too namy attempts...bye!") #break continue_confirm = input("Do you want to continue guess? Y or N: ") if continue_confirm == ‘Y‘: counter = 0 continue else: print("bye...") break counter += 1
input you guess number:21 Think smaller... input you guess number:25 Think larger... input you guess number:1 Think smaller... Do you want to continue guess? Y or N: Y input you guess number: