一、为什么要学python
已经从事运维工作五年半的时间了,如今的收入也自我感觉良好。可是,本来以为学习网络技术以及服务器技术,只做运维,不懂开发也行,然而,就在准备重新寻找工作,渴望能够找到待遇更好的工作机会时。很遗憾,缺少代码能力的我确实没办法找到更好的工作机会,即使我已经工作了五年多,即使我也有相关的证书。
但是,在这个时代的浪潮下,想拥有质的飞越,不会代码真的不可能。所以,我选择的python语言,作为我的入门语言。初衷只有一个,就是要寻找更好的工作机会!!!接触不一样的世界,让自己提升一个层次!!!
说实话,我并不知道python的擅长领域;作为我的入门语言,相对而言,我也只是知道python相对其他计算机语言而言更加容易入门。
根据我所了解的前途,python可以用于web开发、自动化运维开发、网络编程、科学计算、GUI图形开发;
而我目前想从事的方向就是python的自动化运维方向。这样既不会将我之前学习的知识丢弃掉,也能够和之后学习的python知识结合起来,至于未来会如何发展,就随缘了;
【运维会了开发后可以干什么?可以转开发,一个理由:开发赚钱!】
1、帮助公司开发各种各样的自动化工具,定制开发各种开源软件
2、帮助评估和优化各种技术架构
3、开发公司的内部办公系统、CRM、网站等
4、做个python全栈工程师(全栈就是指什么都能做)
数据类型
流程控制
常用模块
函数、迭代器、装饰器
递归、迭代、反射
面向对象的编程
购物车程序
ATM信用卡程序开发
模拟人生游戏开发
socket c/s编程;Twisted异步网络架构;网络爬虫开发;
多线程、多进程、协程gevent、select\poll\epoll
生产者消费者模型
审计堡垒机系统开发
FTP服务器开发
批量命令,文件分布工具
rabbitMQ消息队列、SqlAlchemy ORM
类SaltStack配置管理工具开发
Reids\Memcache\MongoDB缓存数据库
html/css基础
Dom编程
原生JS学习
Jquery/EasyUi/AngulaJS
Ajax异步加载
Highchart画图
BootStrap
冒泡、二叉树、哈希、拆半等常见的算法学习
工厂模式、单例模式、享元模式、代理模式等常见设计模式学习
MVC架构讲解
自行开发一个WEB框架
Django、Tornado、Flask、Bottle、WebPY框架学习
Session/中间件/ORM/Cookie/CSRF/FORM...
Restful API框架
权限管理后台开发
开发BBS论坛
开发WEB聊天室
购物商城开发
主机管理+任务编排+运维审计堡垒机开发
分布式类Nagios/Zabbix监控产品开发
CMDB资产管理开发
基于用户视角的网站访问质量检测分析平台开发
Docker自动化管理平台开发
OpenStack二次开发
====================分割线==========================
说白了编译型语言就是先将代码全都翻译成计算所能识别的字符,然后再来运行;
解释型语言则是计算机读一句,就翻译依据,相对而已,编译型语言会比解释型语言快上很对;python就是一种解释型语言;
不用指定变量类型的语言,就是一种动态语言;
python能够自动的识别数据类型,当数据类型与所输入的数据不符合的时候,就会报错;而C语言则必须指定数据类型后才能为变量输入对应的数据;
强类型语言指定了数据类型后,如果不做转换,则一直为原本数据类型,不会变更;
而弱类型语言则对数据的数据类型定义比较模糊,一个数据可以属于多个数据类型,这样会造成很多不必要的错误;
【python是一种解释型的动态强类型语言】
优点:简单、高效、高级语言、可移植性强、可扩展性强、可嵌入型强
缺点:相对于C语言来说比较慢、代码不是加密的(如果你对代码要求是保密,就不要使用python来做开发)、线程不能利用CPU(Global Interpreterlock)(也就是说你开发的程序,不管系统是几核CPU的,程序都只能使用一个【这个说的好像有点问题,不知道我理解的对不对;】)
python语言需要通过解释器来运行;
Cpython:C语言编写的python解释器,建议使用;
Ipython:交互解释器
PyPy:解释速度最快的解释器
Jpython:Java环境下的解释器
IronPython:.net语言环境下的解释器
【如果是需要各种语言互相调用,是不需要使用解释器的。我们一般通过网络调用来实现不同平台上的python代码之间的互通】
1991年、python诞生,创始人Gui叔;
这里就应用一个连接吧:https://www.cnblogs.com/vamei/archive/2013/02/06/2892628.html
下载地址:https://www.python.org/downloads/
我们这里选择3.x版本,因为python平台在2020年截止,不再维护2.x的平台;其中2.6和2.7的版本就是用来过度到3.x的两个过度版本;
windows平台下的安装:
双击安装,选中“添加到环境变量”;这样的话python在您的windows平台上的任何一个目录下都能运行;
print("Hello World!")
Hello World!
【各种语言的“hello world”】
C++语言
#include <iostream>
int main(void)
{
std::count << "Hello World!";
}
C语言
#include <stdio.h>
int main(void)
{
print("\nHello World!");
return 0;
}
Java语言
public class HelloWorld {
public static void main (String args[]) {
System.out.println("Hello World!") ;
}
}
php语言
<?php
echo "Hello World!";
?>
Ruby语言
put "Hello World!"
GO语言
package main
import "fmt"
func mian(){
fmt printf("Hello World!\n God Bless You!")
}
通过pyCharm方便代码的调试;
首先创建自己存放代码的目录-->再去创建项目object-->view下的toolbal勾上-->工具栏有一个“齿轮”进行设置
从右到左依次为:运行程序(运行后,会在下方提示对话框下进行显示结果),代码调试(通过设置断点,一条代码一条代码的运行),“齿轮”对pyCharm进行设置
设置新创建的python程序的起始代码;
设置python程序的字符集,建议使用utf-8
【所有的开发代码都写在一个object下面】
用来存放一些值的容器,就叫做变量;
name = "Burnov"
name2 = name
print(name,name2)
name2 = "Burnov's firend"
print(name2)
以上代码name被赋值了Burnov,name的变量值被赋予了name2变量,所以第一个print打印为Burnov,Burnov;
而第二个name2被重新赋值后,第二个pirnt则打印为Burnov's firend;
【变量是直接指向内存,而不是指向其他变量的,这有点类似于Linux下的硬连接原理】
用来将二进制字符装换为我们人类能看懂的字符集合;
ASCII 标准字符码。有256位的空间,ASCII自己只使用了128位的空间,还剩下128位留给了第三世界的国家填充其字符结构;
CB2312 中国的第一个字符集,收录了7000多个汉字;
GBK1.0 CB2312的升级版本,收录了20000+的汉字以及相关的图标字符等;
GB18030 CBK1.0的升级版本,收录了27000+的汉字,其中包括藏文,蒙文,维吾尔文等少数名族的字符;但是手机等嵌入式产品可能不支持这个字符集;
Unicode 世界公有组织提供的一种字符集,避免了各个国家的标准无法统一的问题;但是影响了ASCII码所占空间的大小;
utf-8 活动的unicod字符集,避免了英文字符集占有空间过大;规定了ASCII字符空间大小为1个字节,而汉字所占空间为3个字节大小;目前比较通用这种字符编码结构;
#-*- coding:utf-8 -*- #手动指定字符编码机构,可以写在默认代码里面;
【注释的使用方法】
# 用来注释单行
'''xxx'''或"""xxx""" 用来注释多行内容;同时'''也可以用来赋值,如:info = '''xxx'''这样xxx所表示的多行内容都可以给info这个变量进行赋值;
在python代码中单引号与双引号没有具体的区别,一般在套用的时候注意下就可以了;
和Linux下的shell一样,在运行代码之前需要之间解释环境,最好使用下面的第一种方式,因为我们并不清楚python安装的默认路径(/usr/local/sbin/python)与/usr/bin解释器指定的路径不太一致;
#!/usr/bin/env python
#!/usr/bin/python
【注意:在输入数据的时候默认数据为字符类型,但是有时候python需要我们制定数据的具体数据类型,所以需要通过参数具体指定;例如:int(input("Age:"))】
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#输入用户功能
#定义变量
Name = input("Name:")
Age = input("Age:")
#打印输出内容
print(Name,Age)
a、%s字符类型调用
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#输入用户功能,并格式化输出
#定义变量
Name = input("Name:")
Age = int(input("Age:")) #指定Age变量为整型
Job = input("Job:")
Salary = input("Salary:")
#指定格式化内容
info = '''
--------------info of %s---------------
Name:%s
Age:%d
Job:%s
Salary:%s
'''%(Name,Name,Age,Job,Salary)
#其中%d表示整形变量 %s表示字符变量
#最后输出info即可
print(info)
b、format()函数调用【默认建议使用format来做格式化调用】
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#用户输入并格式化输出
#定义变量
Name = input("Name:")
Age = int(input("Age:")) #指定Age变量为整型
Job = input("Job:")
Salary = input("Salary:")
#指定格式化内容
info = '''
--------------info of {_name}---------------
Name:{_name}
Age:{_age}
Job:{_job}
Salary:{_salary}
'''format(_name=Name
_age=Age
_job=Job
_salary=Salary)
#最后输出info
print(info)
在这种写法中format()函数是指定了新的变量,同时,也可以使用“{数字}”的方式来替换其中的数据,这里就不在详细描述了;
这里需要注意一点,就是默认情况下,pyCharm无法运行getpass()函数,需要去python的默认解释器下面运行该代码,才不会报错;
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#使用getpass()函数,使输出的密码输入无法被看见
#定义变量
Name = input("Name:")
Password = getpass.getpass("Password:") #通过getpass()函数使输入密码无法被看见
#打印输入内容
print(Name,Password)
这时候,我们来实现一个功能:猜测用户Burnov的真实年龄大小
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#猜测Burnov的年纪
#定义默认变量正确的年纪
Burnov_age = 28
#开始循环,指定猜测的次数
Guess_age = int(input("Guess_age:"))
count = 0 #count参数为循环计算器值,默认没循环一次需要加1
while count < 3; #while语句开始循环,并进行判断;
if Guess_age == Burnov_age :
print("yes,you get it")
break #猜中则break退出;
elif Guess_age > Burnov_age :
print("you think big")
else :
print("you think smaller")
conut +=1 #count值加1后再比较,是否小于3,小于再继续进行循环,否则执行下面的代码
else:
print("you have tried too many times")
以上就是一个while循环语句,需要注意的的是默认的while循环如下:
#!/usr/bin/python
#-*- coding:utf-8 -*-
#基本的while循环
count = 0
while True :
print("count=",count)
count +=1
if count = 1000 : #定义退出循环的条件,否则会一直循环
break
所以在我们些while代码的时候,第一就要指定循环体,那些代码是需要循环执行的,第二个指定循环条件,第三指定循环值count,什么时候就不要再循环了通过count值来做判断,退出循环使用break
基本的for循环语句
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#基本的for循环语句
for i in range(10) :
print("loop",i)
指定步长
for i in range(0,10,2) : #range中表示0到10,中以2位步长来打印数值;
print("loop",i)
使用端点来做代码命令错误排查,这样可以一行一行的运行代码,来查找代码中的错误;
*循环嵌套,对i进行循环i=0的时候内部代码运行一次,知道j到6后比较j>5则退出当前j的循环,在执行i的循环,直到i等于10则该段代码执行结束;
for i in range(10) :
print("----------",i)
for j in range(10) :
print(j)
if j>5 :
break