Python初识
Python第一天
一.为什么学Python
作为一名linux运维工程师现在越来越感觉不好干了。没有地位,还待背黑锅,并且运维自动化发展的这么快,普通运维岗位的路也越来越窄(因为我很菜),和几个同事商量学习python,当然自己也很感兴趣。不废话了,估计你也和我差不多的想法。
二.Python介绍
据说Python的诞生是由一个荷兰人在圣诞节(1989年)期间,为了打发时间,开发了一个新的脚本解释程序,即Python。(创始人都是这么牛逼吗?打发时间都能搞一个语言出来,膜拜),最近几年python发展的太快了,在TIOBE排行榜超越了PHP占据第五,他的代码清晰,简洁,应用于各个领域。各大型互联网企业都在使用,如:GooGle,Yahoo,Youtube,知乎,豆瓣等等。
最新的TIOBE排行榜,Python赶超PHP占据第五!!!
由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!!
Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。互联网公司广泛使用Python来做的事一般有:自动化运维、自动化测试、大数据分析、爬虫、Web 等。
注视:上述重点字体表示该公司主要使用Python语言开发
Python种类:
- Cpython
a) 使用C语言实现,使用较广泛,官方采用。
b) 原理:cpython将源文件(.py文件)转换成字节码文件(pcy文件),然后运行于Python虚拟机上。
2. Jpython
a) 使用java实现。
b) 原理:Jpython将Python代码动态编译成Java代码,然后由JVM运行
3. IronPython
a) 使用C#实现。
b) ronPython将代码编译成C#字节码,然后由CLR运行
4. PyPy
a) 由Python实现Python
b) 将Python字节码再次编译成机器码。
以上除PyPy之外,其他的Python的对应关系和执行流程如下:
PyPy,在Python的基础上对Python的字节码进一步处理,从而提升执行速度!
。。。。。。。。。。。。。。等等。。。。。。。。。。。。。。。。。
下图为Python具体实现的过程:
四. 使用2.0还是3.0?
对于这个问题网上讨论的很是热烈啊,用2.0的鄙视3.0的。用3.0的鄙视2.0 的,你属于哪一个?(我看着2.0的书,用着3.0敲代码,呵呵,只是菜鸟起步,不要想太多)。
四(补充) Python的安装?
1. windows安装:
1 1、下载安装包 2 https://www.python.org/downloads/ 3 2、安装 4 默认安装路径:C:\python35 5 3、配置环境变量 6 【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】 7 如:原来的值;C:\python35,切记前面有分号
2. linux安装:
centos6.6默认已经安装Python2.7版本,直接可以使用。
centos6.6在Python2.7版本的基础上编译安装Python3.5版本:
1 安装编译环境: 2 #yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make 3 4 下载python3.5安装包: 5 #wget --no-check-certificate https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz 6 7 解压到当前目录: 8 #tar -zxvf Python-3.5.0.tgz 9 #cd Python-3.5.0 10 编译并指定安装目录: 11 #./configure --prefix=/usr/local/python3.5 --enable-shared 12 #make & make install 13 为了区别2.X和3.X启动程序指定软连接 14 #ln -s /usr/local/python3.5/bin/python3 /usr/bin/python3 15 16 此时运行python3命令的话会报错,缺少.so文件,我们需要进行如下操作: 17 18 #cp -R /usr/local/python3.5/lib/* /usr/lib64/ 19 20 ok!此时python3的基础环境已经安装完成! 21 22 23 启动python3,输入时如果上下左右,退格键都出现乱码时: 24 25 说明readline-devel 没有安装,默认只有readline: 26 27 查看: 28 #rpm -qa | grep readline* 29 30 安装: 31 #yum -y install readline-devel 32 33 重新编译安装即可 34 #./confgure ...... 35 #make && make install 36 37 至此centos3.5编译安装结束。
五. 程序员的第一个程序:Hello,World
a) 使用交互式解释器直接启动python,显示程序版本及操作系统等。
2.0版本:
3.0版本:
b) Linux系统自带python,创建文件:
python内部执行过程如下:
人生中的第一个python程序。
注: windows下可以使用PyCharm软件编写程序
五-1语句和语法:
Python语句中的一些基本规则和特殊字符。
-
- 井号(#):Python注释
- 三引号('''): Python多行注释
- 换行(\n): 标准行分隔符
- 反斜线(\): 连接上一行
- 分号(;): 将两个语句连接在一行中
- 冒号(:): 将代码块的头和体分开
- 不能的缩进分隔不同的代码块(四个空格宽度)
- Python文件通过模块的形式组织 ,可以通过import导入使用。
六. 字符编码与变量
Python解释器在加载.py文件中的代码时,会对内容进行编码,默认为ASCII
2.0版本需要在脚本中制定编码,如下:
3.0版本可以忽略这个问题,解析器自动会进行编码
a) 变量命名规则:
1. 只能包含字母,数字和下划线。
2. 区分字母大小写
3. 禁止使用保留字
注意: Python2与Python3的保留字有所不同
b) 命令惯例:
- 以单一下划线开头变量名(_X)不会被form module import *语句导入
- 前后有下划线的变量名(_X_)为系统定义的变量名,对python解释器有特殊意义
- 以两个下划线开头,但结尾没有下划线的变量名(__X)是类的本地变量
- 交互模式下,变量名“_”用于保存最后表达式的结果
注意:变量名没有类型,对象才有
- 以下关键字不能声明为变量名
['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']
c) 变量赋值:
1. 赋值操作符(=):
>>> a = 1 >>> b = 2 >>> a 1 >>> b 2 >>> c = "this is a string" >>> c 'this is a string'
name = "zhao" name2 = name print(name,name2) name = "hong" print(name,name2) zhao zhao hong zhao
2. 增量赋值:
1 x = x + 1 2 可以写为: 3 x += 1 4 5 #操作符: 6 += -= *= /= %= **= <<= >>= &= ^= \=
3. 多重赋值:
>>> x = y = z = 1 >>> x 1 >>> y 1 >>> z 1
4. 多元赋值:
>>> x, y, z = 1, 2, 'astring' >>> x 1 >>> y 2 >>> z 'astring' #等号两边都为元组() ,如下 >>> (x, y, z) = (1, 2, 'astring')
七. 用户输入:
user = input("请输入你的用户名:") print("你的用户名为:" , user) passwd =input("请输入你的密码") print("你的密码为:",passwd) #显示输入的密码,如果想隐藏密码如下: import getpass password = getpass.getpass("请输入密码") print(password)
案例:
用户输入一个符号,并用所给的符号输出如下图形:
1 **** 2 * 3 **** 4 * * 5 ****
1 最娄代码: 2 3 s = input("请输入一个符号:") 4 print( '',s+s+s+s,'\n',s,'\n',s+s+s+s,'\n',s+' '+' '+s,'\n',s+s+s+s,'\n')
八. 模块
python是由一系列的模块组成的,每个模块就是一个py为后缀的文件,同时模块也是一个命名空间,从而避免了变量名称冲突的问题。模块我们就可以理解为lib库,如果需要使用某个模块中的函数或对象,则要导入这个模块才可以使用,除了系统默认的模块不需要导入外。导入直接使用如下语法:
import 模块名称(不需要加.py后缀)
》》》基本的模块结构布局:
1. 起始行(Unix) 2. 编码 3. 模块文档 4. 导入模块 5. 变量定义 6. 类定义 7. 函数定义 8.主程序
1 #!/usr/bin/env python #1.起始行,必须定义 2 # -*- coding: utf-8 -*- #2.编码,3.X版本可以省略 3 # __Author__: Zhaohongfei #自定义,可有可无 4 5 "This is a test module" #3.模块文档 6 7 import sys,os #4.导入模块,多个模块可用逗号分隔 8 9 debug = True #5.变量定义(全局) 10 11 class Fooclass(object): #6.类定义(若有) 12 "Foo class" 13 pass 14 15 def test(): #7.函数定义 16 "test function" 17 foo = Fooclass() 18 19 if debug: 20 print(test()) 21 22 if __name__ == '__main__': #8.主程序 23 test()
获取参数:
import sys print(sys.argv) #输出 # python module.py hello world [“module.py”, “hello”, “world”] #获取执行脚本获取的参数 Import os os.system(“df -h”) #调用系统的命令
九. 执行脚本传入参数
Python有大量的模块,从而使得开发python程序非常简洁。类库有包括三种:
1. Python内部提供模块
2. 业内开源模块
3. 程序员自己开发的模块
Python内部提供一个sys模块,其中的sys.argv用来捕获执行Python脚本时传入的参数
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys print sys.argv
十. 流程控制
需求一. 用户登录验证
1 # !/usr/bin/env python 2 # -*- coding: encoding -*- 3 4 # 提示输入用户名和密码 5 6 # 验证用户名和密码 7 # 如果错误,则输出用户名或密码错误 8 # 如果成功,则输出 欢迎,XXX! 9 10 11 import getpass 12 13 name = input('请输入用户名:') 14 pwd = getpass.getpass('请输入密码:') 15 16 if name == "hong" and pwd == "abc": 17 print("欢迎登陆!") 18 else: 19 print("用户名和密码错误")
需求二. 根据用户输入内容输出其权限
1 # 根据用户输入内容打印其权限 2 3 # wpq --> 超级管理员 4 # hong --> 普通管理员 5 # zs,ls --> 业务主管 6 # 其他 --> 普通用户 7 8 name = input('请输入用户名:') 9 10 if name == "wpq": 11 print("超级管理员") 12 elif name == "hong": 13 print("普通管理员") 14 elif name == "zs" or name == "ls": 15 print("业务主管") 16 else: 17 print("普通用户")
练习:
写一个能用tab自动补全的模块:
Linux上tab 补齐代码:
#!/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
保存退出即可使用。
注意: 现在模块的存放于当前目录,如果想在系统其他地方使用,那我们需要加入环境变量,一般存放路径为:Python/2.7/site-packages
以上即为Python第一天所学的东西,看似简单实则还需要多练。
课后习题:
1 编写一个用户登录接口,用户密码错误输入三次后锁定账户
2. 三级菜单(地理位置,省市县)