python入门

5 篇文章 0 订阅
2 篇文章 0 订阅

本博客在持续更新

为什么是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 -V
Python 3.4.5

编辑器

1.pyCharm

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

pyCharm破解方法

2.vi

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

hello world脚本

hello.py :

#!/usr/bin/env python

print ("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-8

print "你好世界"

#!/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

'''
1111111111111111
222222222222
33333333333333
'''

4.神奇的代码块缩进

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

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

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

5.续行符 \

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

total = 100+ \
        200+ \
        300

6.空行

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

#!/usr/bin/env python3

dict={
    '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   #定义一个变量,值为整型数1

a,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特有的,其他的方式在各种语言上大都支持。

#方式1
a,b=1,2

#方式2
a=1
b=2

#方式3
a=b=1;

#方式4
a=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 python3

list = [ 'abcd', 786 , 2.23, 'runoob', [1,2,3]]
print (list);

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

列表的四大金刚

 #!/usr/bin/env python3

list1 = [ '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 python3

list = [1,2,3]
list[0] = 4

print (list)   #[4,2,3]

元组

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

#!/usr/bin/env python3

list = (1,1,2)

print (list)
print (list[0])
#!/usr/bin/env python3

tuple = (1,2,3);
tuple[0]= 2;        #报错!!!!!!!!!!

print (tuple);

但是我们可以这样:

#!/usr/bin/env python3

tuple = (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 python3
print('hello''world');  #helloworld
print('hello'+'world'); #helloworld
print('hello',' world'); #hello world,产生空格

r 原样字符

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

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

字典

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

#!/usr/bin/env python3

dict={
    'title':'国务院开会',
    'desc':'今天下午国务院召开...'
}


print(dict) # {'title': '国务院开会', 'desc': '今天下午国务院召开...'}

print(dict['title'])  #国务院开会

del dict['title'] #注销字典某个项

print (dict) #{'desc': '今天下午国务院召开...'}

del dict #直销字典

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

集合

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

#!/usr/bin/env python3

dict={
    '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 python3

import sys
print('================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.py
sudo python get-pip.py
pip -V
更新
pip install -U pip
pip -V

面向对象

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

这部分采用2.7版本的代码

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

例子

#!/usr/bin/env python
#coding=utf-8

class 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-8

class Student:
    tag='好学生'

    def __init__(self, name, score):
        self.name = name
        self.score = score


xiaoming = Student('小明',55)
xiaowang = Student('小王',59)

print xiaoming.name  #小明

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

#!/usr/bin/env python
#coding=utf-8

class Student:
    tag='好学生'

    def __init__(self, name, score):
        self.__name = name
        self.score = score


xiaoming = Student('小明',55)
xiaowang = Student('小王',59)

print xiaoming.__name  #小明

在类外面访问私有变量:

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

#!/usr/bin/env python
#coding=utf-8

class 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-8

class 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 = name



xiaoming = Student('小明',55)
xiaowang = Student('小王',59)

print xiaoming.getName()
xiaoming.setName('大明')
print xiaoming.getName()

继承

多态

类型检查和转换

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值