python入门

来源:互联网 发布:宁波淘宝网店培训 编辑:程序博客网 时间:2024/06/16 11:47

本博客在持续更新

为什么是Pyhton

一门计算机语言,不可能无缘无故去学习,学习,当然是因为有用。

一般来说,做网站用PHP,因为PHP开发速度快
做服务使用C/C++,因为运行速度快,稳定
写病毒、写脚本、服务?那就用Python了,因为开发速度快,而且在各个*Unix平台上都可以运行。

当然咯,如果你准求更快的性能,写服务可以使用C/C++,但更多的时候是用不到,C的学习更多是为了学习Linux本身。

所以说,如果你想学习运维,请选择python;如果你想当黑客,选择python;如果你想学习AI,选择python!

Python 中文学习大本营
python入门指南

Python的版本

Python目前有两个重要的版本:2.7 和 3.X。目前大多数的linux系统默认都是安装2.X,但推荐学习3.X

这3.X并不兼容2.7.X,但也差不了太多。pytho2和python3有少量区别,请看这里

安装

$ sudo yum install python34$ python3 -VPython 3.4.5

编辑器

1.pyCharm

pyCharm是jetbrains公司的python编辑器,该公司的编辑器有php、python、java等多个类型,而且有其他很多的牛逼软件。

pyCharm破解方法

2.vi

vi用来临时编写少量的python脚本还是很有用的,但是作为工程性项目就不行了,还是pycharm方便。

hello world脚本

hello.py :

#!/usr/bin/env pythonprint ("Hello World")

添加执行权限,执行:

$ chmod +x hello.py$ ./hello.py$ Hello World

#!/usr/bin/env python 会调用python解析器,#!/usr/bin/env python#!/usr/bin/python兼容性更好 ,不管python在哪里安装,只要在PATH目录里面就可以调用.

python2中文乱码

如果脚本中有非ASCII字符,需要声明uft-8编码:

#!/usr/bin/env python#coding=utf-8print "你好世界"

#!/usr/bin/env python# -*- coding: UTF-8 -*-print "你好世界"

我喜欢#coding=utf-8,懒 ):

在Python 3中,非-ASCII 标识符也是允许的了,包括中文

语法

1.标识符

区分大小写、由数字、字母、下划线组成,字母开头。下划线也是字母,C创始者说的

2.关键字

python内置keyword模块,可以查看当前版本的关键词有哪些:

$ python3>>> import keyword>>> keyword.kwlist['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

3.注释

单行注释#

#!/usr/bin/python3# 第一个注释# 第二个注释print ("Hello, Python!") 

多行注释:

#!/usr/bin/env python3'''111111111111111122222222222233333333333333'''

4.神奇的代码块缩进

和中国特色相媲美的是,python的强制缩进!

同一代码块内部,每一行代码都必须缩进一样的格式:可以都是tab,可以都是4个空格或其他

if True:    print ("True")else:    print ("False")

5.续行符 \

如果代码太长,可以使用续行符 \

total = 100+ \        200+ \        300

6.空行

python中,建议同一层级的代码块之间有空行

#!/usr/bin/env python3dict={    'title':'国务院开会',    'desc':'今天下午国务院召开...'}for key in dict:    print (key);    print (dict[key])print (dict)

7.数字类型

python不愧是数学家发明的,数字类型完全和数学一样啊:整数、长整数、浮点数和复数。

整数, 如 1长整数 是比较大的整数浮点数 如 1.233E-2复数 如 1 + 2j1.1 + 2.2j

数字类型和数据类型不一样哦,数据类型除了数字,还包括字符串等其他数据类型

变量

python是弱类型语言,定义方式极为简单,变量只有赋值了才算定义,和php是一样的

1.赋值的三种方式

a=1   #定义一个变量,值为整型数1a,b=1,'2'  # 相当于 a=1;b=2;a=b=1   #  b=1;a=b;

2.注销变量

a,b=1,2;del a;

3.命令结束符

和其他语言一样,Python默认以换行符作为命令结束符,使用分号;也可以表示一个命令的结束。

a=1;b=2

4.几种变量赋值的方式

下面是Python几种变量赋值的方式,其中方式1是Python特有的,其他的方式在各种语言上大都支持。

#方式1a,b=1,2#方式2a=1b=2#方式3a=b=1;#方式4a=1;b=2

数据类型

六大数据类型

数字、列表、元组、字符串、字典、集合

其中:

列表、元组、字符串是有序的
字典和集合是无序的

注意:在 Python2 中是没有布尔型的,它用数字 0 表示
False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加

type() 和isinstance

>>> type(1)<class 'int'>>>> isinstance(1,int)True

type() 不承认继承,不会认为子类是一种父类类型。

isinstance()承认继承,会认为子类是一种父类类型。

isinstance()承认继承返回布尔值,type()返回字符串

列表

#!/usr/bin/env python3list = [ 'abcd', 786 , 2.23, 'runoob', [1,2,3]]print (list);

顾名思义,列表就是1个或者多个数据的有序结合,内容可以是任何数据类型。

列表的四大金刚

 #!/usr/bin/env python3list1 = [ 'abcd', 786 , 2.23, [1,2,3]]list2 = [[1],786]print ("输出完整列表: ",list1);  #输出完整列表print ("输出列表第一个元素: ",list1[0]);  #输出列表第一个元素print ("输出列表第一个元素到倒数第2个: ",list1[0:-2]); #输出列表第一个元素到倒数第2个print (list1+list2);  #拼接

因为列表是有序的,所以可以允许有多个相同的值!

[1,1,1]

修改元组内容:

#!/usr/bin/env python3list = [1,2,3]list[0] = 4print (list)   #[4,2,3]

元组

元组就是只读的列表,不可以修改

#!/usr/bin/env python3list = (1,1,2)print (list)print (list[0])
#!/usr/bin/env python3tuple = (1,2,3);tuple[0]= 2;        #报错!!!!!!!!!!print (tuple);

但是我们可以这样:

#!/usr/bin/env python3tuple = (1,2,[3])tuple[2][0] = 'a'  #可以改里面的列表、字典、集合、数字等print (tuple)

字符串

1.字符串定义

String(字符串)
Python中的字符串用单引号(‘)或双引号(“)括起来,同时使用反斜杠()转义特殊字符。

python中单引号和双引号使用完全相同
python允许处理unicode字符串,加前缀u或U, 如 u”this is an unicode string”。

'你好'"你好"  '''你好'''

2.字符串截取

print (str[0:-1])    # 输出第一个到倒数第二个的所有字符print (str[0])       # 输出字符串第一个字符print (str[2:5])     # 输出从第三个开始到第五个的字符

3.字符串连接

逗号,的连接方式会产生空格

#!/usr/bin/env python3print('hello''world');  #helloworldprint('hello'+'world'); #helloworldprint('hello',' world'); #hello world,产生空格

r 原样字符

python的这个功能太赞了,妈妈再也不用担心我的字符会被转义了:

r"a\tb"  #就是原样返回,\t不会被转义print(r'hello wo\nrld'); # \n不会被转义

字典

字段就是一些列键值对数据的无序集合

#!/usr/bin/env python3dict={    'title':'国务院开会',    'desc':'今天下午国务院召开...'}print(dict) # {'title': '国务院开会', 'desc': '今天下午国务院召开...'}print(dict['title'])  #国务院开会del dict['title'] #注销字典某个项print (dict) #{'desc': '今天下午国务院召开...'}del dict #直销字典

序列是以连续的整数为索引,与此不同的是,字典以 关键字 为索引,关键字可以是任意不可变类型,通常用字符串或数值。如果元组中只包含字符串和数字,它可以做为关键字。而集合、字典、列表则不可以作为key,因为他们的数据量是可变的

集合

集合可以当成是字典的特例,只是key是从0开始,一次加1的
当然,两者并不相等

#!/usr/bin/env python3dict={    'title':'国务院开会',    'desc':'今天下午国务院召开...'}print(dict) # {'title': '国务院开会', 'desc': '今天下午国务院召开...'}print(dict['title'])  #国务院开会del dict['title'] #注销字典某个项print (dict) #{'desc': '今天下午国务院召开...'}del dict#直销字典

这里写图片描述

要创建空集合,你必须使用 set() 而不是 {}。后者用于创建空字典

数据类型转换

这里写图片描述

print()函数

print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=”“:

模块引用

引用模块:
import 模块名

引用模块中某个函数:
from 模块名 import 函数

引用模块中多个函数:
from 块 import firstfunc, 函数1,函数2,。。。

引入模块

#!/usr/bin/env python3import sysprint('================Python import mode==========================');print ('命令行参数为:')for i in sys.argv:    print(i,end="");print("");

引入模块函数,属性

from sys import argv,path  #  导入特定的成员print('==== ===python from import====== ===')print('path:',path) # 因为已经导入path成员,所以此处引用时不需要加sys.path

pip

python默认的包管理器

安装

https://pip.pypa.io/en/stable/installing/

wget https://bootstrap.pypa.io/get-pip.pysudo python get-pip.pypip -V

更新

pip install -U pippip -V

面向对象

在看其他人写的UDP扫面工具的时候,很多面向对象的写法都不太理解,特意过一遍

这部分采用2.7版本的代码

参考资料:
廖雪峰Python2.7教程
Python菜鸟

例子

#!/usr/bin/env python#coding=utf-8class Student:    tag='好学生'    def __init__(self, name, score):        self.name = name        self.score = score    def print_score(self):        print '%s: %s' % (self.name,self.score)    def setTag(self,msg)   :        Student.tag = msg    def print_tag(self):        print '%s' % (Student.tag)xiaoming = Student('xiaoming',55)xiaowang = Student('xiaowang',59)xiaoming.print_score()xiaoming.print_tag()xiaoming.setTag('坏学生')xiaowang.print_score()xiaowang.print_tag()
  1. 需要使用关键字class定义类
  2. __init__是类的构造函数,在new对象的时候自动执行 每个方法都必须有
  3. 一个参数self,表示当前对象。这个和php、JS的this一样的道理 Python
  4. 造对象不需要new关键字

变量tag是类的静态变量,所有对象共享,因此当xiaoming修改之后,xiaowang也就变成了坏学生

提示:
关键在于对面向对象编程的理解,而其中的面向对象语法,做几个项目自然就熟练了

封装

#!/usr/bin/env python#coding=utf-8class Student:    tag='好学生'    def __init__(self, name, score):        self.name = name        self.score = scorexiaoming = Student('小明',55)xiaowang = Student('小王',59)print xiaoming.name  #小明

默认情况下,Python的属性和方法都是公开的,在任何地方都可以调用,我们可以通过给属性添加下划线,将其声明为私有

#!/usr/bin/env python#coding=utf-8class Student:    tag='好学生'    def __init__(self, name, score):        self.__name = name        self.score = scorexiaoming = Student('小明',55)xiaowang = Student('小王',59)print xiaoming.__name  #小明

在类外面访问私有变量:

在Python里面,任何属性、方法都可以访问,包括私有的。只不过命名为私有变量的时候,实际的变量名变了而已,我们可以使用dir()函数打印当前对象有哪些属性和方法

#!/usr/bin/env python#coding=utf-8class Student:    tag='好学生'    def __init__(self, name, score):        self.__name = name        self.score = score    def __run__(self):         print '跑跑跑'xiaoming = Student('小明',55)xiaowang = Student('小王',59)print dir(xiaoming)   

打印属性和方法列表:

['_Student__name', '__doc__', '__init__', '__module__', '__run__', 'score', 'tag']

我们可以使用 xiaoming._Student__name在外面访问__name属性,当然了,这不总是有效,不同的Python编译器采用不用的变化规则。

访问私有变量的建议:

一般来说,如果需要访问或者设置私有变量,我们建议定义get或者set方法,这样,我们可以在方法中对传入的值进行检查、处理

#!/usr/bin/env python#coding=utf-8class Student:    tag='好学生'    def __init__(self, name, score):        self.__name = name        self.score = score    def getName(self):         return self.__name    def setName(self,name):        self.__name = namexiaoming = Student('小明',55)xiaowang = Student('小王',59)print xiaoming.getName()xiaoming.setName('大明')print xiaoming.getName()

继承

多态

类型检查和转换

我们定义的类和Python内置类没有任何区别,很多情况下,我们都需要检查数据的类型,比如是不是字符串、整数,或者某个类的对象等,然后,我们还可能需要进行转换

原创粉丝点击