python介绍:
python由Guido van Rossum(英文不知道叫什么,大陆名字叫“龟叔”)于1989年发明,第一个公开发行版发行于1991年。
python能做什么:
Python是一门综合性的语言,你几乎能在计算机上通过Python做任何事情,以下是Python应该最广泛的几个方面:
- 网络应用:包括web网站 、服务器后台服务等
- 科学运算:随着NumPy、SciPy、matplotlib、ETS等众多程序库的开发,Python越来越适合于做科学计算。与科学计算领域最流行的商业软件MATLAB相比,Python是一门真正的通用程序设计语言,比MATLAB所采用的脚本语言的应用范围更广泛,有更多程序库的支持,适用于Windows和Linux等多种平台,完全免费并且开放源码。虽然MATLAB中的某些高级功能目前还无法替代,但是对于基础性、前瞻性的科研工作和应用系统的开发,完全可以用Python来完成。
- GUI程序:python提供了多个图形开发界面的库,包括PyQt,WxPython,自带的有Tkinter,这些库允许Python程序员很方便的创建完整的、功能健全的GUI用户界面。
- 系统管理工具:Python可以是做运维人员最喜欢用的语言了,可以用它来轻松的开发自动化管理工具、监控程序等,事实上现在很多开源软件也都是用Python开发的,如用于IT配置管理的SaltStackAnsible, 做虚拟化的OpenStack,
- 其它程序:你知道吗?Python 用来写爬虫也是很拿手的,
python特点:
1,Python“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,而且相比较其他语言较容易入门。
2,免费开源,开发效率非常高,可移植性,开发高效有丰富的库,可嵌入性,高级语言你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
3,python具有丰富和强大的库。他常常被称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松的联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有的时候甚至是程序的最终页面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,然后封装为python可以调用的扩展类库。
python 安装
Linux:
Linux的yum依赖自带Python,为防止错误,此处更新其实就是再安装一个Python
查看默认Python版本 python -V 1、安装gcc,用于编译Python源码 yum install gcc 2、下载源码包,https://www.python.org/downloads/python/ 3、解压并进入源码文件 4、编译安装 ./configure make all make install 5、查看版本 /usr/local/bin/python2.7 -V 6、修改默认Python版本 mv /usr/bin/python /usr/bin/python2.6 ln -s /usr/local/bin/python2.7 /usr/bin/python 7、防止yum执行异常,修改yum使用的Python版本 vi /usr/bin/yum 将头部 #!/usr/bin/python 修改为 #!/usr/bin/python2.6
Windows版:
- 下载安装包:http://www.python.org/download/
- 双击安装包按提示“下一步”就OK了
- 然后设置环境变量:安装python3.5时把下面的勾 勾上就可以了
- 推荐使用Pycharm,可以从官方站点下载对应的版本安装即可,Pycharm有社区版(免费)和专业版,官方站点:https://www.jetbrains.com/pycharm/
python运行:
Linux中
新建一个hello.py文件,内容如下:
1 print("Hello,world")
执行python hello.py即可,这是明确指定用python解释器执行的;
如果想要与shell一样 ./hello.py 来执行,就需要在hello.py文件头部来指定解释器,如下:
#!/usr/bin/env python print "hello,world"
注:需给文件加上执行权限; chmod +x hello.py ,如此就可以用./hello.py来执行
Python解释器/种类:
CPython,原始、标准官方的实现方式,用C语言开发,
Jython,用于和Java语言集成的实现,把Python代码直接编译成java字节码执行;
IPython,基于CPython之上的一个交互解释器,交互上非常直观,但是执行代码功能和CPython完全一样;
IronPython,用于和.NET框架集成的实现,可以直接把python代码编译成.Net的字节码
PyPy,使用python语言实现的Python解释器,是动态编译器,是Psyco的后继项目;可运行在Linux的32、64位、MacOSX和Windows的32位平台上
变量:
先声明变量:
>>> name = "tianjie" >>> print(name) tianjie
变量的作用:昵称(name),其代指内存里某个地址中保存的内容(tianjie)
变量定义的规则:
# 将用户输入的内容赋值给 name 变量(python3写法) name = input("pless your name:") #python2写法 name= raw_input("please your name:") #然后打印这个输入的内容 print(name)
输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即:
1 import getpass 2 3 # 将用户输入的内容赋值给 pwds 变量 4 pwds = getpass.getpass("请输入密码:") 5 6 # 打印输入的内容 7 print pwds 8 9 注意:此方法在pycharm中不能使用
流程控制:
一、if...else:
1 输入一个数字作比较,如果相等输出“相等” 2 大了,提示小一点 3 小了提示大一点 4 5 6 number = 6 7 cai = int(input("My Lucky Number:")) 8 if cai > number: 9 print("please print smaller") 10 elif cai < number: 11 print("please print bigger") 12 else: 13 print("Congratulations, you got it")
2、判断用户输入的用户名和密码是否正确,如正确就打印欢迎登陆,错误提示用户名或密码错误,结合getpass模块:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import getpass 5 6 7 user = 'tianjie' 8 password = 'buzhidao' 9 10 input_user = input('Username?') 11 input_pass = getpass.getpass('Password?') 12 13 if input_user == user and input_pass == password: 14 print('欢迎登陆,%s' %(input_user)) 15 else: 16 print('用户名或者密码错误,请稍后再试')
二、while:
1、猜一个幸运数字直到猜对为止:
1 number = 6 2 cai = -1 3 while number != cai: 4 cai = int(input("My Lucky Number:")) 5 if cai > number: 6 print("please print smaller") 7 elif cai < number: 8 print("please print bigger") 9 #else: 10 # print("Congratulations, you got it") 11 #break 12 print("Congratulations, you got it")
2、循环,满足条件进入循环:
还是上面的需求,允许用户输入尝试三次,如果连续三次失败的话,退出程序,使用while循环来处理:
1 #!/usr/bin/env python 2 # -*- coding :utf-8 -*- 3 4 user="tianjie" 5 password="qweasd" 6 7 count=0 8 9 10 while True: 11 if count<3: 12 name=input("input your user:") 13 pasw=input("password:") 14 if name==user and password == pasw: 15 print("%s欢迎登陆"%(name)) 16 break 17 else: 18 print("用户或密码错误") 19 count+=1 20 else: 21 flag=input("输入次数过多是否继续,y/n:") 22 if flag == "y": 23 count=0 24 elif flag == "n": 25 break
3,for.... in....
还是上面的需求,只允许用户输错10次,如果连续三次失败的话,提示是否继续,,使用for循环来处理:
1 #!/usr/bin/env python 2 # -*- coding :utf-8 -*- 3 4 user="tianjie" 5 password="qweasd" 6 7 count=0 8 for i in range(10): 9 if count<3: 10 name=input("input your user:") 11 pasw=input("password:") 12 if name==user and password == pasw: 13 print("%s欢迎登陆"%(name)) 14 break 15 else: 16 print("用户或密码错误") 17 18 else: 19 flag=input("输入次数过多是否继续,y/n:") 20 if flag == "y": 21 count=0 22 continue 23 elif flag == "n": 24 break 25 26 count += 1
python模块:
os模块:是Python标准库中用于访问操作系统功能的模块,非常NB 可以调用操作系统的命令着实没有想到!
1 >>> import os #先导入模块 2 >>> help(os) #获取os帮助信息
列出可以用的模块
1 1 >>> dir(os) 2 2 ['EX_CANTCREAT', 'EX_CONFIG', 'EX_DATAERR', 'EX_IOERR', 'EX_NOHOST', 'EX_NOINPUT', 'EX_NOPERM', 'EX_NOUSER', 'EX_OK', 'EX_OSERR', 'EX_OSFILE', 'EX_PROTOCOL', 'EX_SOFTWARE', 'EX_TEMPFAIL', 'EX_UNAVAILABLE', 'EX_USAGE', 'F_OK', 'NGROUPS_MAX', 'O_APPEND', 'O_ASYNC', 'O_CREAT', 'O_DIRECT', 'O_DIRECTORY', 'O_DSYNC', 'O_EXCL', 'O_LARGEFILE', 'O_NDELAY', 'O_NOATIME', 'O_NOCTTY', 'O_NOFOLLOW', 'O_NONBLOCK', 'O_RDONLY', 'O_RDWR', 'O_RSYNC', 'O_SYNC', 'O_TRUNC', 'O_WRONLY', 'P_NOWAIT', 'P_NOWAITO', 'P_WAIT', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'ST_APPEND', 'ST_MANDLOCK', 'ST_NOATIME', 'ST_NODEV', 'ST_NODIRATIME', 'ST_NOEXEC', 'ST_NOSUID', 'ST_RDONLY', 'ST_RELATIME', 'ST_SYNCHRONOUS', 'ST_WRITE', 'TMP_MAX', 'UserDict', 'WCONTINUED', 'WCOREDUMP', 'WEXITSTATUS', 'WIFCONTINUED', 'WIFEXITED', 'WIFSIGNALED', 'WIFSTOPPED', 'WNOHANG', 'WSTOPSIG', 'WTERMSIG', 'WUNTRACED', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_copy_reg', '_execvpe', '_exists', '_exit', '_get_exports_list', '_make_stat_result', '_make_statvfs_result', '_pickle_stat_result', '_pickle_statvfs_result', '_spawnvef', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'chown', 'chroot', 'close', 'closerange', 'confstr', 'confstr_names', 'ctermid', 'curdir', 'defpath', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fchdir', 'fchmod', 'fchown', 'fdatasync', 'fdopen', 'fork', 'forkpty', 'fpathconf', 'fstat', 'fstatvfs', 'fsync', 'ftruncate', 'getcwd', 'getcwdu', 'getegid', 'getenv', 'geteuid', 'getgid', 'getgroups', 'getloadavg', 'getlogin', 'getpgid', 'getpgrp', 'getpid', 'getppid', 'getsid', 'getuid', 'isatty', 'kill', 'killpg', 'lchown', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'major', 'makedev', 'makedirs', 'minor', 'mkdir', 'mkfifo', 'mknod', 'name', 'nice', 'open', 'openpty', 'pardir', 'path', 'pathconf', 'pathconf_names', 'pathsep', 'pipe', 'popen', 'popen2', 'popen3', 'popen4', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'rmdir', 'sep', 'setegid', 'seteuid', 'setgid', 'setgroups', 'setpgid', 'setpgrp', 'setregid', 'setreuid', 'setsid', 'setuid', 'spawnl', 'spawnle', 'spawnlp', 'spawnlpe', 'spawnv', 'spawnve', 'spawnvp', 'spawnvpe', 'stat', 'stat_float_times', 'stat_result', 'statvfs', 'statvfs_result', 'strerror', 'symlink', 'sys', 'sysconf', 'sysconf_names', 'system', 'tcgetpgrp', 'tcsetpgrp', 'tempnam', 'times', 'tmpfile', 'tmpnam', 'ttyname', 'umask', 'uname', 'unlink', 'unsetenv', 'urandom', 'utime', 'wait', 'wait3', 'wait4', 'waitpid', 'walk', 'write']
os.system():调用本地命令:
1 如查看系统分区使用: 2 >>> os.system("fdisk -l") 3 4 Disk /dev/sda: 500.1 GB, 500107862016 bytes 5 255 heads, 63 sectors/track, 60801 cylinders 6 Units = cylinders of 16065 * 512 = 8225280 bytes 7 Sector size (logical/physical): 512 bytes / 4096 bytes 8 I/O size (minimum/optimal): 4096 bytes / 4096 bytes 9 Disk identifier: 0x148bf7a4 10 11 Device Boot Start End Blocks Id System 12 /dev/sda1 * 1 77 614400 83 Linux 13 Partition 1 does not end on cylinder boundary. 14 /dev/sda2 77 6451 51200000 83 Linux 15 /dev/sda3 6451 7471 8192000 82 Linux swap / Solaris 16 /dev/sda4 7471 60802 428379160 5 Extended 17 /dev/sda5 7471 60802 428378112 83 Linux 18 0 19 >>>
#如果赋予变量的话 ,只是把执行命令的状态返回值赋予了变量,并没有把执行结果打印出来 >>> a=os.system("fdisk -l") Device Boot Start End Blocks Id System /dev/sda1 * 1 77 614400 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 77 6451 51200000 83 Linux /dev/sda3 6451 7471 8192000 82 Linux swap / Solaris /dev/sda4 7471 60802 428379160 5 Extended /dev/sda5 7471 60802 428378112 83 Linux >>> print(a) 0
popen 是把执行结果给保存,然后用read()打开 :
1 >>> a=os.popen 2 >>> a=os.popen("df -lh") 3 >>> print(a) 4 <open file 'df -lh', mode 'r' at 0x1f93270> 5 >>> print(a.read()) 6 Filesystem Size Used Avail Use% Mounted on 7 /dev/sda2 48G 11G 36G 23% / 8 tmpfs 934M 300K 934M 1% /dev/shm 9 /dev/sda1 575M 31M 514M 6% /boot 10 /dev/sda5 402G 6.1G 376G 2% /home 11 12 >>>