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.23、3E-2复数 如 1 + 2j、 1.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()
- 需要使用关键字
class
定义类 __init__
是类的构造函数,在new对象的时候自动执行 每个方法都必须有- 一个参数self,表示当前对象。这个和php、JS的this一样的道理 Python
- 造对象不需要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内置类没有任何区别,很多情况下,我们都需要检查数据的类型,比如是不是字符串、整数,或者某个类的对象等,然后,我们还可能需要进行转换
- Python入门
- python入门
- Python入门
- Python入门
- Python入门
- Python入门
- python入门
- Python入门
- Python 入门
- Python入门
- python入门
- Python入门
- python入门
- python入门
- Python入门
- python 入门
- python入门
- python入门
- WPF实现拖拽功能
- 第1章 初识C语言
- 【HDU 1258】Sum It Up(DFS,去重技巧)
- DNS全解析
- Redis集群搭建与简单使用
- python入门
- Codeforces Round #426 (Div. 2) A. The Useless Toy
- maven根据不同的生产环境打包
- 线程互斥
- [PAT乙级]1057. 数零壹(20)
- 代理模式 Prototype
- Codeforces Round #426 (Div. 2) B. The Festive Evening
- bzoj P4870 [Shoi2017]组合数问题
- 从Aop代理的对象中获取源对象