Python介绍

Python概述

Python创始人是吉多.范罗苏姆。在1989年万圣节期间为打发时间而开发的。

目前Python在TIOBE排行榜第五位置

Python可以应用在众多的领域中:

数据分析、组建集成、网络服务、图像处理、数值计算和科学计算等领域。

Python应用的知名公司有:

Youtube、Dropbox、BT、知乎、豆瓣、谷歌、百度、腾讯、

汽车之家等。

Python可以做的工作有:

自动化运维、自动化测试、大数据分析、爬虫、Web等

Python与其他语言的异同:

  • python是由C语言来发而来的。
  • 代码的执行:

C语言:代码编译===》机器码===》执行

其他语言:代码编译===》字节码===》机器码===》执行

python也是这样,在字节码===》机器码的过程会生成一个.pyc的文件,这个文件就是机器码的文件。

注视:python在执行过程中会先找有没有.pyc文件,然后与原py文件进行对比,如果没有变化,则直接执行.pyc文件;如果.py文件较新,则重新生产.pyc文件。然后执行。

  • 代码执行速度 由上面代码的执行顺序,也可以看出,python的运行速度相比较C会慢。
  • 内置模版库 Python内部会自带很多的模版库,可以直接调用。可以满足大多数的基本的需求。
  • Python的种类
  1. Cpython 官方的版本。使用C语言实现,使用最为广泛。CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
  2. Jyhton Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。
  3. IronPython Python的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行。
  4. PyPy Python实现的Python,将Python的字节码字节码再编译成机器码。它在Python的基础上对Python的字节码进一步处理,提升了执行速度。

Python环境

推荐使用2.7版本的

Windows:

1:下载安装包

https://www.python.org/ftp/python/2.7.10/python-2.7.10.msi

或者直接去官网下载你想要的版:https://www.python.org/downloads/

2:直接安装

默认的安装路径是:C:\Python27

3:配置环境变量

【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】

例如:;C:\Python27 在最后面添加即可。

Linux:

1:linux都自带Python环境。推荐使用ubuntu。因为其自带比较新的版本。

Python入门

一:你好世界

创建hello.py

二:python程序的执行过程

三:编码格式

  • ASCII:美国标准信息交换代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
  • Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536, 注:此处说的的是最少2个字节,可能更多。
  • UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存。 所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)。但是3.0以后的版本默认是UTF-8。

四:注释的方式

  • 单行注释:#
  • 多行注释:"""注释的内容"""或者是三个单引号

五:传参

上面已经说了,Python有大量的模块,从而使得开发很简洁,类库主要包含三种:

1:Python内部提供的模块

2:业内开源的模块

3:程序员自己开发的模块

Python内部提供一个sys的模块,其中的sys.argv就是用来捕获执行python脚本时传入的参数。

六:变量

1:声明变量

变量的名:name 变量的值:"曹小贱"

变量的作用:昵称,代指内存里某个地址中保存的内容。

变量定义的规则:

1:变量名只能是字母、数字或下划线的任意组合。

2:变量名不能以数字开头。

3:不能使用关键字进行声明。

['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

2:变量的赋值

七:输入

八:流程控制和缩进

需求一:用户登录验证

需求二:根据用户输入内容输出其权限

注释:外层变量可以被内存变量调用,反之不行。

九:Python的基本类型

1:数字

int(整型)

  在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647

  在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

long(长整型)

  跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。

  注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。

float(浮点型)

  浮点数用来处理实数,即带有小数的数字。

complex(复数)

  复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。

注:Python中存在小数字池:-5 ~ 257

2:布尔值(bool)

True False

真或假

1 或0

3:字符串

"Hello World"

万恶的字符串拼接:

python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。

字符串格式化

>>> name = "曹小贱"

>>> print "i am %s " % name

i am 曹小贱

注释:字符串是%s;整数%d;浮点数%f

字符串的常用功能:

移除空白

strip

lstrip

rstrip

>>> name = " alex "

>>> import tab

>>> print name.strip()

alex

>>> print name.lstrip()

alex

>>> print name.rstrip()

alex

分割

>>> name = "a;b;c;d"

>>> name1 = name.split(';')

>>> name1

['a', 'b', 'c', 'd']

长度

>>> name

'a;b;c;d'

>>> len(name)

7

>>> name[len(name)-1]

'd'

索引

>>> name

'a;b;c;d'

>>> name[1]

';'

>>> name[2]

'b'

切片

>>> name = "alexd"

>>> name[0]

'a'

>>> name[0]

'a'

>>> name[1:2]

'l'

>>> name[1:4]

'lex'

>>> name[3:4]

'x'

>>> name[-3:]

'exd'

>>> name[0:]

'alexd'

4:列表

创建(第一种方式最终要调用第二种方式)

>>> name = ['ccc','ggg','ttt']

>>> name

['ccc', 'ggg', 'ttt']

>>> name = list(['ccc','ggg','ttt'])

>>> name

['ccc', 'ggg', 'ttt']

索引

>>> name[1]

'ggg'

切片

>>> name[1:3]

['ggg', 'ttt']

追加

>>> name.append('sss')

>>> name

['ccc', 'ggg', 'ttt', 'sss']

删除

>>> name

['ccc', 'ggg', 'ttt', 'sss']

>>> del name[2]

>>> name

['ccc', 'ggg', 'sss']

长度

>>> name

['ccc', 'ggg', 'sss']

>>> len(name)

3

循环

#!/usr/bin/env python

#coding:utf-8

name = ['ccc','ggg','ttt']

for i in name:

if i == "ccc":

print "找到了"

break

包含

>>> name

['ccc', 'ggg', 'sss']

>>> 'ccc' in name

True

>>> 'cgt' in name

False

5:元组(tuple)

创建元组

>>> name = ('ccc','ggg','ttt')

>>> name

('ccc', 'ggg', 'ttt')

>>> name1 = tuple(('aaa','bbb','ccc'))

>>> name1

('aaa', 'bbb', 'ccc')

上面的name的方式最终还是要调用下面的方式。

索引

>>> name1

('aaa', 'bbb', 'ccc')

>>> name1[2]

'ccc'

切片

>>> name1

('aaa', 'bbb', 'ccc')

>>> name[1:2]

('ggg',)

解释:顾头不顾尾

循环

#!/usr/bin/env python

#coding:utf-8

name = ('aaa', 'bbb', 'ccc')

for i in name:

if i == "ccc":

print "找到了"

break

包含

>>> name1

('aaa', 'bbb', 'ccc')

>>> 'bbb' in name1

True

>>> 'abc' in name1

False

6:字典(无序)

创建字典

>>> menu = {'name':'cgt','age':24,'job':'IT'}

>>> menu

{'job': 'IT', 'age': 24, 'name': 'cgt'}

>>> menu1 = {'name':'cgt1','age':2424,'job':'IT'}

>>> menu1

{'job': 'IT', 'age': 2424, 'name': 'cgt1'}

索引

>>> menu

{'job': 'IT', 'age': 24, 'name': 'cgt'}

>>> menu[1] #字典是一种键值对的方式,不能使用下标来获取,通过键值。原因是它是无序的

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

KeyError: 1

>>> menu['name']

'cgt'

新增

>>> menu['salary']=400000

>>> menu

{'job': 'IT', 'salary': 400000, 'age': 24, 'name': 'cgt'} #从这里也可以体现出他的无序

修改

>>> menu['salary']=400000

>>> menu

{'job': 'IT', 'salary': 400000, 'age': 24, 'name': 'cgt'}

>>> menu['salary']=1 #可以直接重新定义变量的值,进行修改

>>> menu

{'job': 'IT', 'salary': 1, 'age': 24, 'name': 'cgt'}

删除

>>> menu

{'job': 'IT', 'salary': 1, 'age': 24, 'name': 'cgt'}

>>> del menu['salary']

>>> menu

{'job': 'IT', 'age': 24, 'name': 'cgt'}

#通过pop来删除键,它的不同之处是再删除的同时,显示出值

>>> menu

{'job': 'IT', 'age': 24, 'name': 'cgt'}

>>> menu.pop('name')

'cgt'

>>> menu

{'job': 'IT', 'age': 24}

#清除所有的键

>>> menu1

{'job': 'IT', 'age': 2424, 'name': 'cgt1'}

>>> menu1.clear()

>>> menu1

{}

循环

#!/usr/bin/env python

#coding:utf-8

menu = {

'name':'曹小贱',

'age':24,

'job':'IT'

}

#开始遍历循环

for key in menu:

print key,'对应的值',menu[key]

结果: #这里呈现的结果打印出来也是无序的

job 对应的值 IT

age 对应的值 24

name 对应的值 曹小贱

#####################################################

#!/usr/bin/env python

#coding:utf-8

menu = {

'name':'曹小贱',

'age':24,

'job':'IT'

}

#开始遍历循环

for key,value in menu.items():

print key,'对应的值',value

结果:

job 对应的值 IT

age 对应的值 24

name 对应的值 曹小贱

PS:循环,range,continue 和 break

range在什么范围内

continue跳出本次循环,继续执行下次循环

break终止循环

长度

len(menu)

十:运算

运算符优先级

运算符

描述

**

指数(最高优先级)

~+-

按位翻转,一元加号和减号(最后两个方法名为:+@和-@)

*/%//

乘除取模取整除

+ -

加法减法

左移右移

&

位 'AND'

^ |

位运算

<= <> >=s

比较运算符

<> == !=

等于运算符

= %= /= //= -= += *= **=

赋值运算符

is is not

身份运算符

in not in

成员运算符

not or and

逻辑运算符

十一:对文件的基本操作

file = file("文件路径名称","模式")

f = file('文件名','模式') 打开一个文件, f = open('文件名','模式') 打开一个文件, f.read():是以字符串的形式读取出来 f.readline():是以列表的形式 f.name获取文件的名字 f.realines():全部一次性读取到内存中出来 f.xrealines():全部读取到内存中出来,但是一行一行的读取 f.flush():将内存中的内容刷到硬盘文件中 f.close():关闭文件. f.write():写入 f.seek(0): 回到文件开头 f.mode:文件打开的模式,读写等 f.truncate():加数字 截取多少字节

文件打开的模式

w 以写方式打开,

a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)

r+ 以读写模式打开(一般使用r+)

w+ 以读写模式打开 (参见 w )

a+ 以读写模式打开 (参见 a )

rb 以二进制读模式打开

wb 以二进制写模式打开 (参见 w )

ab 以二进制追加模式打开 (参见 a )

rb+ 以二进制读写模式打开 (参见 r+ )

wb+ 以二进制读写模式打开 (参见 w+ )

ab+ 以二进制读写模式打开 (参见 a+ )

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏流浪猫的golang

go panic与recover分析及错误处理

error 是一种类型,表示错误状态的类型,如果没有错误则是nil。直白点将:error 类型就是描述错误的一种类型。

1143
来自专栏自动化测试实战

RF自定义系统关键字

3847
来自专栏日常学python

再有人问什么是元类,就把这篇文章扔给他!

我之前在深入理解python中的类和对象中说过,python中的类也是一个对象,可以说是类对象,可以由 type() 来创建类对象的。有了这个知识我们先看看下面...

1152
来自专栏微信公众号:Java团长

Java面试题整理及参考答案

允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点:

1122
来自专栏LinXunFeng的专栏

iOS - 揭露Block的内部实现原理

1765
来自专栏linux驱动个人学习

Linux 内存池【转】

1545
来自专栏架构师小秘圈

shell脚本极简教程

一,shell题记 不懂shell的程序员不是好程序员,学习shell是为了自动化,使用自动化可以非常有效的提高工作效率。没有一个大公司不要求linux的基本技...

4146
来自专栏JAVA高级架构

Java内存区域与虚拟机类加载机制

一、Java运行时数据区域 ? 1、程序计数器   “线程私有”的内存,是一个较小的内存空间,它可以看做当前线程所执行的字节码的行号指示器。Java虚拟机规范...

3528
来自专栏测试开发架构之路

堆和栈的区别

一、预备知识—程序的内存分配          一个由C/C++编译的程序占用的内存分为以下几个部分     1、栈区(stack)— 由编译器自动分配释放,存...

2868
来自专栏chenssy

一题带你彻底理解 sleep() 和 wait()

这段话令人感到迷惑,一个对象不是只有一个锁吗?只有获得这个对象的锁才能对它进行操作,若这个对象的锁被一个线程先获得,那就其他线程就需要等待。那多次加锁什么意思,...

1581

扫码关注云+社区

领取腾讯云代金券