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种类:

  1. 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多行注释
    • 换行( ): 标准行分隔符
    • 反斜线(): 连接上一行
    • 分号(;): 将两个语句连接在一行中
    • 冒号(:): 将代码块的头和体分开
    • 不能的缩进分隔不同的代码块(四个空格宽度)
    • Python文件通过模块的形式组织 ,可以通过import导入使用。          

六. 字符编码与变量

        

          Python解释器在加载.py文件中的代码时,会对内容进行编码,默认为ASCII

                   2.0版本需要在脚本中制定编码,如下:

                  

                   3.0版本可以忽略这个问题,解析器自动会进行编码

a) 变量命名规则:

  1. 只能包含字母,数字和下划线。

  2. 区分字母大小写

  3. 禁止使用保留字

注意: Python2与Python3的保留字有所不同

b) 命令惯例:

  1. 以单一下划线开头变量名(_X)不会被form module import *语句导入
  2. 前后有下划线的变量名(_X_)为系统定义的变量名,对python解释器有特殊意义
  3. 以两个下划线开头,但结尾没有下划线的变量名(__X)是类的本地变量
  4. 交互模式下,变量名“_”用于保存最后表达式的结果

注意:变量名没有类型,对象才有    

  • 以下关键字不能声明为变量名
    ['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,'
',s,'
',s+s+s+s,'
',s+' '+' '+s,'
',s+s+s+s,'
')

八. 模块 

         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. 三级菜单(地理位置,省市县)

原文地址:https://www.cnblogs.com/python-nameless/p/nameless.html