Python

Python   入门到入狱

Python 安装
centos 6
Linux 系统自带 python 2.6
centos 7
Linux 系统自带 python 2.7

python -V #查看版本

windowns 需要手动安装,和一般软件安装没有区别,一直下一步下一步。
默认在C盘下的python2.X目录下。需要手动加入系统环境变量里

下载地址 : https://www.python.org/downloads/windows/

Python 有2.X 和3.X 的版本,版本不同,语法也有所变化,个人而言相对来讲,python3必定是未来的趋势也比Python2的语法简化了,但python2 使用的也有多,也是有Linux的自带的软件,所以两者都需要去学习

python 作为一种解析性语言,运行速度和编译性语言相比是非常慢的,但它简洁的语法使其广受欢迎

linux 上安装自定义版本python2
命令行内,直接Python 就可以进入命令行的交互模式

 
0ebbe35390d22c13a5b1c9d8a7d93538.png

为了更友好的显示和补全代码,我们可以使用 ipython 这个软件
python 会自带pip命令
使用pip 命令去下载 ipython

命令如下:
ipython pip install ipython

pip : 需要配置yum 的epel 源(centos )

yum install -y python-pip
默认会去安装最新的

pip是去这个网站找包下载的 : pypi.python.org/pypi/ipython

 
82392accfea4c2f8f7af97df169d95d1.png

因为默认回去下载最新版本的ipython
但它不适用于我们需要用到python2.6这个版本的软件
所以需要指定安装其适用版本

centos 6
命令: pip install ipython==1.2.1
适用于 python2.6

centos 7
命令: pip install ipython==1.2.2
适用于 python2.7

如果报错_scandir.c:14:20: 致命错误:Python.h:没有那个文件或目录,#include <Python.h>,安装python开发工具yum install python-devel

Python 自带一个虚拟环境,和真实环境一样,切互不干扰

ENV 虚拟环境打开与关闭 activate / deactivate

Python 后缀名的简介

简介Python 源代码以及字节代码,优化编译

这是1.py 文件的开头,即源代码
#!/usr/bin/python
print "hello world"'

执行 python 1.py 即可运行

 
python 入门

1.源代码
python源代码文件以"py"为扩展名,由python程序解析,不需要编译
直接运行 /usr/bin/python 1.py 即可

2.字节代码
python源码文件经编译后生成的扩展名为"pyc"文件
编译方法:
import py_compile
py_compile.compile("1.py")

可以写绝对路径,不写路径表示当前目录下

使其编译后生成pyc的后缀名文件,为二进制文件

优化编译

python -O -m py_compile 1.py
-O : 代表优化编译
-m : 指定模块mode
使其源码文件优化编译成"pyo"后缀名的二进制文件

 
python 入门

因为是二进制文件,所以查看出来的是都是乱码

总结:

Python解释器,字节码文件只能被Python识别

字节码文件
.pyc .pyo

转换成 .pyc
python -m py_compile hello.py
.pyc提高 加载速度 运行效率是一样

转换成 .pyo
python -O -m py_compile hello.py
.pyo优化 优化编译

 

python 变量,数组,字符串

变量
变量是计算机内存的一块区域,变量可以存储规定范围内的值,而且值可以改变

python下变量是对一个数据的引用

变量的命名
变量名由字母,数字,下划线组成
变量不能用数字开头
不可以使用关键字

变量的赋值
是变量的申明和定义的过程

a = 1      #整型
a = '1'    #字符型
id(a)

type(a) #可以查看变量的类型

赋值运算符

= : x = 3, y = 'abcd'
+=: x += 2
-=: x -= 2
*=: x *= 2
/=: x /= 2
%=: x %= 2

算术运算符

+      :     加 
-      :     减 
*      :     乘 
/      :     除 
//     :     整除,只取整数部分 
%      :    取余,取余数 
**     :    乘方 

字符串的+ 相当于连接两个字符串

关系运算符,返回结果为布尔值,即true和false (0和1)

>     :     大于 
<     :     小于
>=    :     大于等于 
<=    :     小于等于 
==    :     等于 
!=    :    不等于 

逻辑运算符 优先级最高

and     逻辑  与 
or      逻辑  或
not     逻辑  非

读取键盘输入函数
input()
会区别数字和字符串,如果是不加引号字符串即为变量,如果加,即为输出

raw_input()
无论是什么都当成字符串输出

#!/usr/bin/python
a = 8
b = 4
num1 = input("first number: ")
num2 = input("last number: ")
print "%s + %s = %s" % (num1,num2,num1+num2)
print "%s - %s = %s" % (num1,num2,num1-num2)
print "%s *%s = %s" % (num1,num2,num1*num2)
print "%s / %s = %s" % (num1,num2,num1/num2)

"%s" % (sum1,sum2,sum1+sum2)
格式化字符串,也可当占位符,后面括号内的变量一一对应

 
python 变量,数组,字符串

数值和字符串
python 数据类型
数值,字符串,列表,元组,字典

Python 数值类型
整型,长整型,浮点型(float),复数型,

用 type(a) 来查看数值类型

2的32次方 一共有这么多值 4294967296
In [1]: 2 ** 32
Out[1]: 4294967296

范围在 -2147483648 ~ 2147483647 (中间包涵0)

除数与被除数 只要有浮点数,结果就有浮点型

字符串类型

在shell 里,单引号全部引用,双引号部分引用

三种方法定义字符串 类型

str = 'this is a string'
str = "this is a string"
str = '''this is a string''' 或者 “““ this is a string ”””

自动带入换行符,更友好的显示

 
python 变量,数组,字符串

三重引号: 除了能定义字符串还可以用作注释

字符串它也是个序列
我们可以对它进行 索引 和 切片 操作
索引用 a[1]

 
python 变量,数组,字符串

切片是 步进值。相隔多少取多少

 
python 变量,数组,字符串

a = 'ABCDEFG'

a[0:5:2]

0:0和空都是从头开始,即从A开始。比如1,即从‘B’开始。比如2,即从C开始。

5:5看成个数,5个数,即为‘ABCDE’,3个数,即为‘ABC’。

2:步进值,即切片。即相隔1个数,为‘ACE’。比如3,即相隔3个数,中间相隔2位数'AD',相隔BC两位数。以此类推。

总结:
Python中数据类型
计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可

以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类

型有以下几种:

一、整数

Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080

,0,等等。

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2

,等等。

二、浮点数

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x10^9和

12.3x10^8是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示

,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四

舍五入的误差。

三、字符串

字符串是以''或""括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字

符串'abc'只有a,b,c这3个字符。

四、布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、

False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。

布尔值可以用and、or和not运算。

and运算是与运算,只有所有都为 True,and运算结果才是 True。

or运算是或运算,只要其中有一个为 True,or 运算结果就是 True。

not运算是非运算,它是一个单目运算符,把 True 变成 False,False 变成 True。

五、空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

 

 

Python 元组

python 元组
序列

  1. 字符串,列表和元组都是序列
  2. 序列的两个主要特点是索引操作符和切片操作符
    索引操作符: 从序列中抓取一个特定项目
    切片操作符: 能够获取序列的一个切片,即一部分序列
1. len()    :  求序列的长度
2. +        :  连接2个序列
3. *        :  重复序列元素
4. in       :  判断元素是否在序列中
5. man()    :  返回最大值,可以判断字符
6. min()    :  返回最小值
7. cmp(x,y) :  比较两个序列是否相等
   x > y  返回   1
   x = y  返回   0
   x < y  返回  -1

元组(tuple) 和列表相似
1.元组合字符串一样是 不可变 的
2.通常用于接收函数的返回值
3.元组可以存储一系列的值
4.元组通常用在用户定义的函数能够安全地采用一组值的时候,即被使用的元组的值不会被改变

元组 里面要有逗号,元组内还可存多个元组
t = ( a, 1, (1, c ) )

元组操作
元组和字符串一样属于序列类型,可以通过索引和切片操作
元组值不可变
元组拆分

   t = (1,2,3) 
   a, b, b = t  
b = (a, 'b', 'c')
输出     b
得      ('abcde', 'b', 'c')

python 面向对象, 里面一切都是对象(变量,元组,字符串,数值)
t = ('a',a,'c')
t. 这样看他可用的方法
t.count t.index 两种方法

通过help(t.count) 查看用法

count(...)
   T.count(value) -> integer -- return number of occurrences of value

这个value 在当前的元组里,则返回一个整数,
即判断这个值是不是在元组里,如果是在返回 1 ,不在返回 0

通过help(t.index) 查看用法

index(...)
    T.index(value, [start, [stop]]) -> integer -- return first index of value.
    Raises ValueError if the value is not present.

这个值返回的索引
[start, [stop]] 是它的可选选项

 

Python 列表

列表用 [ ] 元组用 ( )
列表 可变类型的数据结构
列表(list) 是处理一组有序项目的数据结构,即可以在列表中存储一个序列的项目
列表是可变类型的数据
创建列表

list = []
list1 = list()
list2 = ['a',1,2]

列表操作
取值
切片和索引
添加
list.append( )
删除
del list[ ]
list.remove(list[ ])

  remove(...)
    L.remove(value) -- remove first occurrence of value.
    Raises ValueError if the value is not present.

修改
list[ ] = x
查找
var in list || var not in list

方法
list.append : 在最后加入

list.count : 统计指定元素个数

list.extend : 可迭代,列表追加,字符串,元组,列表,都是可迭代的,这样都是可以for循环

list.index : 索引

list.insert : 指定索引,插入

list.pop : 删除并返回删除的值,不指定索引位置,即为从最后一个剪切

In : list
Out: ['1', '2', '3']
In : list.pop()
Out: '3'
In : list.pop()
Out: '2'
In : list
Out: ['1']

list.remove : 删除一个元素

删除list中的某个元素,一般有三种方法:remove、pop、del
1.remove: 删除单个元素,删除首个符合条件的元素,按值删除
举例说明:

 str=[1,2,3,4,5,2,6]
 str.remove(2)
 str
[1, 3, 4, 5, 2, 6]

2.pop: 删除单个或多个元素,按位删除(根据索引删除)

str=[0,1,2,3,4,5,6]
str.pop(1)   #pop删除时会返回被删除的元素
1
str
[0, 2, 3, 4, 5, 6]
str2=['abc','bcd','dce']
str2.pop(2)
'dce'
str2
['abc', 'bcd']

3.del:它是根据索引(元素所在位置)来删除
举例说明:

str=[1,2,3,4,5,2,6]
del str[1]
str
[1, 3, 4, 5, 2, 6]
str2=['abc','bcd','dce']
del str2[1]
 str2
['abc', 'dce']

除此之外,del还可以删除指定范围内的值。

str=[0,1,2,3,4,5,6]
del str[2:4]  #删除从第2个元素开始,到第4个为止的元素(但是不包括尾部元素)
str
[0, 1, 4, 5, 6]

del 也可以删除整个数据对象(列表、集合等)

str=[0,1,2,3,4,5,6]
del str
str         #删除后,找不到对象

Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    str
NameError: name 'str' is not defined

注意:del是删除引用(变量)而不是删除对象(数据),对象由自动垃圾回收机制(GC)删除。

补充: 删除元素的变相方法

s1=(1,2,3,4,5,6)
s2=(2,3,5)
s3=[]
for i in s1:
if i not in s2:
    s3.append(i)
print 's1-1:',s1
s1=s3
print 's2:',s2
print 's3:',s3
print 's1-2:',s1  

list.reverse : 将列表内的元素,反转

In : list
Out: ['g', 'f', 'e', 'd', 'c', 'b', 'a']
In : list.reverse()
In : list
Out: ['a', 'b', 'c', 'd', 'e', 'f', 'g']

list.sort : 排序 ,升序

In : list.reverse()
In : list
Out: ['6', '5', '4', '3', '2', '1']
In : list.sort()
In : list
Out: ['1', '2', '3', '4', '5', '6']



Python 字典

字典(dict) { }

  1. 字典是Python 中的唯一的映射类型(哈希表)k-v:键-值
  2. 字典对象是可变的,但是字典的键必须使用不可变对象,一个字典中可以使用不同类型的键值
  3. 无序排序
  4. key 是唯一的

字典方法
keys( ) : 返回所有的keys ,列表显示

values( ) : 返回所有的values, 列表显示

items( ) : 返回一个列表

In : dic
Out: {'a': '1', 'b': 'abcsss', 'c': '123aaa'}

In : dic.items()
Out: [('a', '1'), ('c', '123aaa'), ('b', 'abcsss')]

dic.get(k) 返回K对应的values值,如果key不存在,则返回空

 D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.

dic.has_key('k') : 查看有没有这个Key

dic.copy : 复制字典

dic.clear : 清除

dic.pop(k) : 弹出k,并返回弹出的values

pop(...)
    D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
    If key is not found, d is returned if given, otherwise KeyError is raised

dic.update() : 更新字典
字典(Dictionary) update() 函数把字典dict2的键/值对更新到dict里。
update()方法语法:
dict.update(dict2)
dict2 -- 添加到指定字典dict里的字典。

help(dic.update()) #查看方法

update(...) 
    D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
    If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
    If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
    In either case, this is followed by: for k in F: D[k] = F[k]

实例

以下实例展示了 update()函数的使用方法:
#!/usr/bin/python
dict = {'Name': 'Zara', 'Age': 7}
dict2 = {'Sex': 'female' }

dict.update(dict2)
print "Value : %s" %  dict

以上实例输出结果为:
Value : {'Age': 7, 'Name': 'Zara', 'Sex': 'female'}

创建字典

dic = {}
dic = dict()
  dict((['a',1],['b',2]))

In : dict(x=1,y=2)
Out: {'x': 1, 'y': 2}

fromkeys() 字典元素有相同的值,默认为None.
ddict = {}.fromkeys(('x','y'),100)

fromkeys(...)
    dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.
    v defaults to None.

S 是序列,这序列有key

In : dic.fromkeys('abc')
Out: {'a': None, 'b': None, 'c': None}

In : dic.fromkeys('abc',10)
Out: {'a': 10, 'b': 10, 'c': 10}

In : dic.fromkeys(range(5),10)
Out: {0: 10, 1: 10, 2: 10, 3: 10, 4: 10}

dic.items : 显示为,列表+元组 [()] 这样的组合

In : dit = {'a':a,'b':'b'}

In : dit.items()
Out: [('a', 'abcsss'), ('b', 'b')]

range() 函数 : 是从0开始 指定到的数。
range(5) 即为 0到4 5个数

In : range(5)
Out: [0, 1, 2, 3, 4]

字典练习
raw_input 读取的为字符串
info = {}
name = raw_input("input name: ")
age = raw_input("input age:")

存入字典
info[ 'name'] = name
info ['age'] = age

print info.items() 变成列表+元组

for k, v in info.items() :
    print k + ":" +, v
    print "%s : %s" % (k,  v) 
print "END"

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
语法
zip 语法:
zip([iterable, ...])
参数说明:
iterabl -- 一个或多个迭代器;

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)     # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c)              # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped)          # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]

合并字典
【方法一】借助dict(d1.items() + d2.items())的方法

 
 

备注:

  1. d1.items()获取字典的键值对的列表

  2. d1.items() + d2.items()拼成一个新的列表

  3. dict(d1.items()+d2.items())将合并成的列表转变成新的字典

 

【方法二】借助字典的update()方法

 

【方法三】借助字典的dict(d1, **d2)方法

 
 

【方法四】借助字典的常规处理方法

 

posted @ 2019-04-23 18:20  H·c  阅读(579)  评论(0编辑  收藏  举报