2014年9月,新疆乌鲁木齐,在51CTO学院看着alex老师的python教学视频,不得不说这是我第一次接触python这门高级语言,从最开始的一无所知到现在能够用python写脚本,再到未来10个月内能够用python开发项目,这一步一步成长,充满着坎坷,汗水。在2014年9月--2015年12月,用python写的脚本帮助我做了很多事情,其中自己感觉最有用的就是自己写的一个批量管理服务器的脚本,我在公司管理着100多台服务器,没有一个运维平台的,都是手动挨个挨个管理,实在费劲,而且那时候对puppet,saltstack这些管理工具也不熟悉,所以只能自己写批量管理工具了,这是第一个我觉得在工作上能够解放双手,能够大幅提高工作效率的脚本,这个脚本在改良以后能够适用于一些采集信息的需求......总之,be prond of python!!
言归正传,学习python就要知道什么是python,python能干嘛,python的哪个版本是主流,python的知识点有哪些and so on!
Python(英语发音:/?pa?θ?n/), 是一种面向对象、解释型计算机程序设计语言,由龟叔(Guido van Rossum)于1989年发明,第一个公开发行版发行于1991年。
那么说的深点,我们从编程语言的角度去看python:
程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。
如C、C++、 Delphi等.
编写的程序不进行预先编译,以文本方式存储程序代码。在发布程序时,看起来省了道编译工序。但是,在运行程序的时候,解释性语言必须先解释再运行。
如 shell,BASIC
意思就是数据类型的检查是在程序运行时做的,如ruby、python........。
数据类型的判断是在程序运行前判断,在写程序之前就要申明所有的数据类型,比如C#、java。
强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。java、.NET、C++、python等都是强制类型定义的。
也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。
与强类型定义语言相反,数据类型可以被忽略的语言。
从以上三点可得,python是一门动态解释性的强类型定义语言。
我们搞明白了python语言的特性(或者说什么是python),那么我们就要知道python能够干嘛了。
1、图形界面:比如PyQt,WxPython,Tkinter等等都能够编写GUI用户界面
2、网络编程,包括web网站,服务器后台衔接等,优秀web框架Django、flask等
3、系统管理工具: 比如saltstack,Ansible等
4、科学计算:Numpy、SciPy等
5、人工智能、游戏、机器人等
从python的基因来看,我们就能看出python的优缺点了,
1 语言简洁,直观。
2 开发效率高,第三方的库非常多
3 可移植性,跨平台能力强,经过修改后就可以从linux迁移到windows。
4 可嵌入型,你可以把 Python 嵌入你的 C/C++程序,从而向你的程序用户提供脚本功能。
1 运行速度慢,这个速度慢不是人类能够通过肉眼或者感觉感知的,这个是相对的慢,python相对于C,JAVA来说是慢一拍,毕竟是解释型语言.
2 代码不能够完全加密,源码以明文形式存放,如果考虑到代码不泄密的话,那么请使用其他语言.
3 多线程不能够充分利用多CPU的问题,这个受制于GIL(Global Interpreter Lock)。
目前主流的是python2.7 和 python 3.x,对于我们来说该如何选择?我们先浏览下官网的说法吧:https://docs.python.org/3/whatsnew/2.7.html
从官网来看,官方建议我们尽快升级到3.X版本,Python 2.7目前会保持支持的核心开发团队(接收安全更新和其他bug修复)至少在2020年之前。
那么python3.X和python2.X有什么区别呢,我个人觉得python3相对于python2来说是做了化繁从简的工作。好吧,简单罗列下面几点:
python 2.x | python 3.x |
print "xxxx" | print("xxxxxxx") |
1/2 = 0 | 1/2=0.5 |
Unicode字符串和非Unicode字符串 | Unicode编码,支持中文 |
字典有has_key | 字典没有has_key |
有input/raw_input | 只有input |
任意大小的整数。
也就是小数,如1.2 ,3.4等,但是对于很大或很小的浮点数,就必须用科学计数法表示,把 10用 e 替代,1.23x109就是 1.23e9 ,或者 12.3e8 ,
0.000012 可以写成 1.2e-5。并且浮点数计算的话会存在精度差。
任意的单引号或者双引号括起来的内容。
True or False。
空值是 Python 里一个特殊的值,用 None 表示。 None 不能理解为 0 ,因为 0 是有意义的,而 None 是一个特殊的空值。
一种由{}引用起来的键值对,形式如这样{key:value},如{‘name‘:‘温柔易淡‘},value可更改,可迭代。
一种由()引用起来的元素,里面的元素不可更改,可迭代。
一种由[]引用起来的元素,里面的元素可更改,可迭代。
一个无序不重复元素集,我在之前学过的其他的语言好像没有见过这个类型,基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算,和我们初中数学学的集合的非常的相似
1 加减乘除(+-*/)
2 = 赋值号,把右边的对象和左边的变量进行关联引用。
3 += 比如a+=1 就等于a+1=a ,还有-=、*=之类的。
4 & 与运算,这个二进制位必须在 2 组数中都为真,结果才返回真。
5 | 或运算,这个二进制位只需在其中一组数据中为真即返回真。
6 ^ 异或运算,只要这个二进制位在两组数据中不相同就返回真。
7 <<左移运算,在二进制位下把数值整体往左移动若干位。
8 >>右移运算,在二进制位下把数值整体往右移动若干位。
9 逻辑运算符, and 、or、not
10 关系运算 in 、not in
11 验证引用关系运算 is 、not is
1 Python 是强制缩进的语言,它通过缩进来确定一个新的逻辑层次的开始和结束,这也是python 语言的最重要的特色之一
2 同一逻辑层次级别的代码缩进必须保持一致
3 顶层逻辑级别的代码必须不能有缩进(新行的开始不能有空格)
4 整个程序的缩进风格应保持一致, 一般为 4 个空格或 2 个空格, 官方的推荐是用 4 个空格,当然用 tab 键也可以,但是在 Windows 上的 tab 键和 Linux 上的不一致,会导致你在
Windows 上开发的程序 copy 到 Linux 上后运行出错,所以还是建议用 4 个空格。
5 有关注释:
当你写的代码逻辑变的复杂的时候,一定不要忘记给你的代码加上注释,否则过不了几天,你再返回头来看自己的代码的时候,很有可能你都不知道自己写了些什么,更别提
别人能看懂你的代码了, 保证你的代码简洁、 易读是一个专业程序员最基本的道德品质,那给你的代码加多少的注释算是合适呢?一般情况下,源程序有效注释量应该在 20%以
上,注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。
说了那么多,我们应该对python有个认识了吧。那么就该动手操作他了,好了,那些怎么安装python解释器 的步骤我就不赘述了,还有解释器的,我们就用默认的就可以了。
官方版本的解释器:CPython。这个解释器是用 C 语言开发的,所以叫 CPython。
>>> print("hello world") #print() 是打印输出的一个函数
hello world
简单的来说就是变化的量(数据在程序运行中可能变化或被赋值,这称为变量),说白了变量就是数据在内存空间存储的表示。
>>> name=‘温柔易淡‘
变量被赋值的过程:
1 创建一个对象,数值为‘温柔易淡‘
2 创建一个变量name
3 把变量和对象进行一个关联。
注意:
1 变量到对象连接的关系叫做引用,在内存中以指针形式实现。
2 对象的复用,对相同对象值的赋值将被复用,除非拷贝与深拷贝。
3 对象两个标准头信息:
类型标志:标志此变量值的类型
引用计数器: 计数器对变量引用来计数, 如果都没有被引用则为 0,并在一段时间没有引用后启用回收机制。
4 查看引用次数
Import sys
Sys.getrefcount(1)
>>> name=input("input your name ==>")
input your name ==>温柔易淡
>>> print(name) #这里是print的内容是引用这个name的变量,应用变量直接写变量名就行了,不像shell一样需要在变量名之前添加$号
温柔易淡
说说每一步执行的过程吧
1 input这个函数把()里面的内容打印出来后等待用户输入,把输入的数据以源数据类型赋值给变量name
2 打印信息,等待用户输入
3 print函数把name这个变量的值给打印出来
什么是字符串刚才我也已经介绍了,那么下面我们动手来操作字符串。
>>> a=‘hellow world,i come from jiangxi province and work in Beijing‘ #将一句话赋值为一个变量a >>> a ‘hellow world,i come from jiangxi province and work in Beijing‘ >>> a[1:10] ‘ellow wor‘
#切片处理,把变量a的下标为1到10的这段字符串打印出来,整数表示是从头开始,第一个数字1表示从下标1的字符开始,第二个10表示到下标为10的结束,这里下标你可以理解为索引。
>>> a[1:30:2]
‘elwwrdicm rmjag‘
#也是切片处理,注意看[]里面这里多个2,这个2的意思是步进为2,意思是说把变量a的下标从1到10,每隔2个取出来。
>>> a.count(‘h‘) #统计变量a里面有多少个h这个字符 。 1 >>> a.count(‘o‘) #同上,统计多少个o。 6 >>> ‘?‘.join(a) # 把变量a里面的内容都用?来衔接起来。 ‘h?e?l?l?o?w? ?w?o?r?l?d?,?i? ?c?o?m?e? ?f?r?o?m? ?j?i?a?n?g?x?i? ?p?r?o?v?i?n?c ?e? ?a?n?d? ?w?o?r?k? ?i?n? ?B?e?i?j?i?n?g‘ >>> a.swapcase() #把变量a里面的字符串做大小写转换。 ‘HELLOW WORLD,I COME FROM JIANGXI PROVINCE AND WORK IN bEIJING‘ >>> a[-30:-4] # 把变量a里面下标为-30到-4的内容打印出来,这里负数的话表示从结尾开始。 ‘i province and work in Bei‘ >>> a[-30:-4:3] ‘irienwkne‘
也是切片处理,注意看[]里面这里多个3,这个3的意思是步进为3,意思是说把变量a的下标从-30到-4,每隔3个取出来。
>>> a="hellow"
>>> b="world"
>>> a+b
‘hellowworld‘
>>> a+" "+b #拼接字符串,可以直接用+来拼接
‘hellow world‘
>>> a="hellow world" #变量a赋值
>>> dir(a) #dir是显示这个a有什么方法注意,看这里,我们是使用不以两个下划线开头的方法,其中的原因我们会在后面讲到,比如upper,replace等方法. [‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘_ _eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getnewargs __‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘ , ‘__mod__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__r epr__‘, ‘__rmod__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subcl asshook__‘, ‘capitalize‘, ‘casefold‘, ‘center‘, ‘count‘, ‘encode‘, ‘endswith‘, ‘ expandtabs‘, ‘find‘, ‘format‘, ‘format_map‘, ‘index‘, ‘isalnum‘, ‘isalpha‘, ‘isd ecimal‘, ‘isdigit‘, ‘isidentifier‘, ‘islower‘, ‘isnumeric‘, ‘isprintable‘, ‘issp ace‘, ‘istitle‘, ‘isupper‘, ‘join‘, ‘ljust‘, ‘lower‘, ‘lstrip‘, ‘maketrans‘, ‘pa rtition‘, ‘replace‘, ‘rfind‘, ‘rindex‘, ‘rjust‘, ‘rpartition‘, ‘rsplit‘, ‘rstrip ‘, ‘split‘, ‘splitlines‘, ‘startswith‘, ‘strip‘, ‘swapcase‘, ‘title‘, ‘translate ‘, ‘upper‘, ‘zfill‘]
>>> help(a.upper) #这个help一般是查看怎么用,一般用于查询方法如何使用。
Help on built-in function upper:
upper(...) method of builtins.str instance
S.upper() -> str
Return a copy of S converted to uppercase.
>>> input("input your name ==>") input your name ==>温柔易淡 ‘温柔易淡‘
if condition==True: #如果条件判断为真,那么执行下面的代码块
code block
elif condition=True: #同上
code block
else: #前面的条件都不匹配,那么执行下面的代码块
code block
while condition: #当条件为真的时候循环往下走,执行代码块 code block if codition==True: #if做条件判断,这个条件判断不是必须的,我这里用if做条件判断是为了抛出break和continue的用法 break # break是跳出当前这层循环的意思,不再执行下面的语句,,结合if的话,条件判断为真那么跳出这个while循环 else: #如果添加为假 continue #continue继续循环,不再执行下面的语句。
for x in list: #for循环,对列表进行迭代,循环停止条件就是把list迭代完
print(x)
第一种方法:
>>> name=‘ljf‘ >>> age=23 >>> print("your name: %s,your age: %d" %(name,age)) your name: ljf,your age: 23
看到这里我想你们大概知道这个% 是啥意思了吧,这里 % 的是格式化字符串,%s表示用字符串来替换显示的,%d表示用数字类型替换显示,相对应的还有%f 表示浮点类型,%x 16进制整数。
第二种方法:
>>> print("your name {0}, your age: {1}".format(name,age))
your name ljf, your age: 23
这个使用format方法来格式化后输出的,这个方法我一般用的少,原理和%一样,通过一个{0}来占位,在用传给format第一个参数来替换{0}输出,第一个占位符就要以0开始。
>>> list=list(range(10)) #使用list方法生成一个列表 >>> list [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> for i in list: # for循环遍历一个列表 ... print(i) ... 0 1 2 3 4 5 6 7 8 9 >>> dir(list) #查看一个list有什么方法 [‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__dir__‘ , ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘ , ‘__gt__‘, ‘__hash__‘, ‘__iadd__‘, ‘__imul__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘ , ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_e x__‘, ‘__repr__‘, ‘__reversed__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__s izeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘append‘, ‘clear‘, ‘copy‘, ‘count‘, ‘ex tend‘, ‘index‘, ‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘] >>> list.append(‘ljf‘) #list的追加的方法,一般在尾部插入 >>> list [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ‘ljf‘] >>> list.insert(3,‘test‘) #list 插入方法,指定一个索引号插入 >>> list [0, 1, 2, ‘test‘, 3, 4, 5, 6, 7, 8, 9, ‘ljf‘] >>> help(list.remove) #查看list.remove的方法如何使用 Help on built-in function remove: remove(...) method of builtins.list instance L.remove(value) -> None -- remove first occurrence of value. Raises ValueError if the value is not present. >>> list.remove(‘test‘) # list中移除这个test值 >>> list [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ‘ljf‘] >>> list.pop() # list中删除最后一个值 ‘ljf‘ >>> list [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
更多方法,请自己看dir(list)
目前就写到这里吧,本人菜鸟一枚,如果写的地方有错,还得指出来更正,谢谢咯!
原文:http://www.cnblogs.com/liaojiafa/p/5096858.html