开启python之路

1.python简介


Python是著名的Guido van Rossum(吉多·范罗苏姆)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言,之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。


2.python实现的分类


  • Cpython

Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(.pyc文件),然后运行在Python虚拟机上,运行完毕之后释放内存,退出程序。

  • jython

Jython是个Python的一种实现方式,Jython编译Python代码为Java字节码,然后由JVM(Java虚拟机)执行,说白了此Python程序与Java程序没有区别,只是源代码不一样。

  • IronPython

IronPython是Python的C#实现,并且它将Python代码编译成C#中间代码(与Jython类似),然后运行,它与.NET语言的互操作性也非常好。

2.python代码运行过程

wKiom1gwiyHS9uq2AACjB5LoRL8483.png3.注释

当行注视:# 被注释内容

多行注释:""" 被注释内容 """

4.hello world


学编程语言开始都是从hello world开始,我们来看看pyton如何实现。

在python3中:
print ("hello world")
而python2中:
print 'hello world'

5.字符编码

python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascii)ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。

显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode。

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,注:此处说的的是最少2个字节,可能更多。

UTF-8,是对Unicode编码的压缩和优化,它不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存···

关于中文编码表示


spacer.gif# -*- coding: utf-8 -*-

6.变量的定义

例:

name="W-D"

1.变量定义的规则:

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

  • 变量名的第一个字符不能是数字

  • 以下关键字不能声明为变量名
    ['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.变量的赋值

变量的赋值切记,当有一个变量对另一个变量赋值的时候,改变前一个变量并不会影响前一个变量。

name1="W-D"
name2=name1
name1="json"
print(name1,name2)
结果:
json W-D
下图可以解释其原因

wKiom1gxRIejSs-WAAAo5IDauIo000.png

7.输入与输出

1.输入(pyton2与python3略微不同)

在python2中用户输入的方式有两种

  1.raw_input

  在python2中raw_input默认会将你输入的内容作为字符串处理,例如:

#!/usr/bin/env python
#_*_coding:utf-8_*_
name = raw_input("input your name:")
print type(name)
print("Hello " + name )


执行结果
input your name:1111
<type 'str'>
Hello 1111

2.input
而pyton2中的input默认会识别输入内容是数字还是字符串,并且当用户输入的内容为字符串的时候会把字符串当
作变量处理。例如:

#!/usr/bin/env python
#_*_coding:utf-8_*_
msg='WD'
name = input("input your name:")
print type(name)
print("Hello " + name )
执行结果:
input your name:msg

 <type 'str'>

 Hello WD


而在pyton3中input会直接将输入内容当作字符串处理


3.格式划字符串

所用格式:

%s:代表字符串

%d:代表整数

%f:代表浮点数

下面来格式化输出一个字符串:


#!/usr/bin/env python
# _*_coding:utf-8_*_

name = input("input your name:")
age= input("input your age:")
job = input("input your job:")
msg='''
name:%s
age:%s
job:%s
'''
print(msg %(name,age,job)

结果:
input your name:wd
input your age:124
input your job:it

name:wd
age:124
job:it

8.常用模块初识

Python的强大之处在于他有非常丰富和强大的标准库和第三方库,先让我们来介绍几个常用模块。

tips:当你对一个模块完全不了解的时候可以使用帮助来查看它的使用方法

在linux中可以使用先dir(模块名),查看模块中含有的函数,在使用help(模块名.函数)查看具体使用方法

例如:


>>> import os

>>> dir(os)

>>> help(os.system)

在windos(pycharm中),使用shift+鼠标左键


1.sys

sys作为常用模块之一,其中有非常多的函数,如argv,该模块是用了获取脚本参数。例如:


#!/usr/bin/env python

# -*- coding: utf-8 -*-

import sys

print(sys.argv)

执行:

python test.py helo world

结果:

['test.py', 'hello', 'world']  #把执行脚本时传递的参数获取到了

2.os

os也是基本模块之一,我们可以使用os中的system方法调用系统命令


#!/usr/bin/env python
# _*_coding:utf-8_*_
import os
print(os.system('ipconfig'))

这样就可以将IP打印出来


9.数据类型



1、数字

2 是一个整数的例子。
长整数 不过是大一些的整数。
3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是复数的例子,其中-5,4为实数,j为虚数,数学中表示复数是什么?。

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(浮点型)

      先扫盲 http://www.cnblogs.com/alex3714/articles/5895848.html 
  浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex(复数)
  复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。

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

2、布尔值

  真或假

  1 或 0

3、字符串


10.字符串操作


  • 移除空白或者特殊字符

strip() 方法用于移除字符串头尾指定的字符(默认为空格)

语法:

str.strip(参数),参数为需要移除的对象

例如:

#!/usr/bin/env python
# _*_coding:utf-8_*_

name='123ba'
name1=name.strip('ba')
print (name,name1)

执行结果:

123ba 123

  • 分割
    分割主要指将字符串分割成list,用的到函数为split
    语法:
    str.split("分隔符")
    例如:

#!/usr/bin/env python
# _*_coding:utf-8_*_

name='1:2:3ba'
name1=name.split(':')
print (name,name1)

执行结果:
1:2:3ba ['1', '2', '3ba']

索引
索引代表某个字符在该字符串中的位置,默认从0开始。
1.查看字符串中的索引,例如查看字符2在该字符串的索引:
name='1234qwer'
print(name.index("2"))

结果:
1

Process finished with exit code

2.使用索引取值
取单个字符:str[索引位置]
取多个字符:str[start:end](也可以叫做字符串的切片)

3.长度
求字符串长度需要用到len函数
例如:
name='1234qwer'
print(len(name))

结果:

8

更多字符串函数请在pycharm中输入str使用shift+左键点解查看


11.列表(list)


其实列表的操作与字符串大同小异

创建列表

msg=['name','age','job']

或者

msg=list(['name','age','job'])


基本操作:

  • 索引(index)

  • 切片

  • 追加(append:在末尾追加)

  • 插入(insert:一次只能插一个元素)

  • 删除(del,remove)

  • 长度(len)

  • 切片

  • 循环(for)

  • 包含(extend)


tips:

1.在列表倒着取值的时候,一定是从小到大,并且开始位置和结束位置都必须是负数,例如:

#!/usr/bin/env python
# _*_coding:utf-8_*_
name=['age','job','num',1,2,3,4]
print(name[-5:-1])
执行结果:
['num', 1, 2, 3]

2.不断取值

#!/usr/bin/env python
# _*_coding:utf-8_*_
name=['age','job','num',1,2,3,4]
print(name[-5:-1][0][0])
结果:
n

3.判断元素是否在列表中

#!/usr/bin/env python
# _*_coding:utf-8_*_
name=['age','job','num',1,2,3,4]
print(1 in name)

结果:

true

 4.列表统计元素(count)

  count,若元素存在则返回元素存在的个数,若不存在会报错


name=['age','job','num',1,2,3,4,1]

print(name.count(1))

结果:

2

  5.列表的拷贝

列表的拷贝分为一般拷贝(赋值)和深度拷贝,区别在于,当一般拷贝的时候,并且原列表中含有列表或者字典或者元祖的时,修改原列表里面嵌套的列表中的元素会影响拷贝后的列表,但如果只针对整个嵌套的列表做更改,将不会影响拷贝后的列表,深度拷贝则不存在此种情况。例如:

#!/usr/bin/env python
# _*_coding:utf-8_*_
name1=['age','job','num',1,2,3,4,1]
name2=name1.copy()
name1[0]=1
print(name1)
print(name2)

结果:


[1, 'job', 'num', 1, 2, 3, 4, 1]

['age', 'job', 'num', 1, 2, 3, 4, 1]

结果表明修改name1并不影响name2


如果列表中嵌套列表并对嵌套列表修改:


#!/usr/bin/env python
# _*_coding:utf-8_*_
name1=['age','job','num',[1,2,3,4,1]]
name2=name1.copy()
name1[-1]='WD'
print(name1)
print(name2)

结果:

['age', 'job', 'num', 'WD']

['age', 'job', 'num', [1, 2, 3, 4, 1]]

结果表明:修改了第一个列表中的嵌套的列表并不影响拷贝后的列表。

如果修改列表中嵌套列表的元素,就会影响到拷贝后的列表:


#!/usr/bin/env python
# _*_coding:utf-8_*_
name1=['age','job','num',[1,2,3,4,1]]
name2=name1.copy()
name1[-1][0]='WD'
print(name1)
print(name2)

结果:

['age', 'job', 'num', ['WD', 2, 3, 4, 1]]

['age', 'job', 'num', ['WD', 2, 3, 4, 1]]


结果表明:修改了name1也将name2修改了。

原因分析:一般拷贝(或者说赋值)在拷贝嵌套的列表时,只拷贝了内存地址,也就是说拷贝前和拷贝后的嵌套列表内存地址指向了同一内容,若对整个嵌套的列表做修改(相当于对内存地址做修改,你该你的,我的还是没变),则互不影响,若对嵌套列表指向的内容做修改,则会修改拷贝后的列表。


12.字典(以hash的方式存储,也就是说无顺序)


1.创建字典

people={"name":"WD","age":24}

或者

people=dict({"name":"WD","age":24})


常用操作:

  • 索引

  • 新增

  • 删除

  • 键、值、键值对

  • 循环

  • 长度


1.查看或者获取字典某个元素

查看字典中的元素,使用key值查看,获取使用get,如:

#!/usr/bin/env python
# _*_coding:utf-8_*_
person={"name":"WD","age":24,"job":"IT"}
print(person["name"])

结果:

WD

2.修改或设置字典中的值

若设置的key在字典中没有,则增加

#!/usr/bin/env python
# _*_coding:utf-8_*_
person={"name":"WD","age":24,"job":"IT"}
person["name"]='jack'
print(person)

结果:

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

3.删除元素(pop,del)

  del删除在很多地方都能使用,pop默认删除并且会打印删除的元素

#!/usr/bin/env python
# _*_coding:utf-8_*_
person={"name":"WD","age":24,"job":"IT"}

print(person)
print(person.pop('name'))
del(person['job'])
print(person)

结果:

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

WD

{'age': 24}

4.使用字典更新字典

使用字典更新字典,函数是update,当存在相同的key时会覆盖


5.将字典转化为元祖(items)

当字典中的数据量非常大的时候请慎重使用


#!/usr/bin/env python
# _*_coding:utf-8_*_
person={"name":"WD","age":24,"job":"IT"}

print(person.items())

结果:

dict_items([('name', 'WD'), ('job', 'IT'), ('age', 24)])


6.键、值、键值对

字典中的键(key)、值(values)能单独查看


#!/usr/bin/env python
# _*_coding:utf-8_*_
person={"name":"WD","age":24,"job":"IT"}

print(person.keys())
print(person.values())

结果:

dict_keys(['name', 'age', 'job'])

dict_values(['WD', 24, 'IT'])

7.设置默认key


#!/usr/bin/env python
# _*_coding:utf-8_*_
person={"name":"WD","age":24,"job":"IT"}
person.setdefault('num','aaaaaa')
print(person)

结果:

{'age': 24, 'num': 'aaaaaa', 'name': 'WD', 'job': 'IT'}


8.高效率循环模式

#!/usr/bin/env python
# _*_coding:utf-8_*_
person={"name":"WD","age":24,"job":"IT"}
for key in person:
   print(key,person[key])

结果:

age 24

name WD

job IT



13.if语句


if语句是用来检查一个条件:如果条件为真(true),我们运行一个语句块(你为if块),否则(else),我们执行另一个语句块(称为else块),else子语句是可选的。

语法:

if (条件):

(else:)

或者

if (条件):

elif (条件):

elif (条件):

...

(else)

如:


#!/usr/bin/env python
# _*_coding:utf-8_*_
num=4
if num>5:
   print("more than 5")
else:
   print("less than 5")
结果:
less than 5


14.while循环

while语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。
语法:

while (条件):
   .....
   
 在while循环中通常会用到两个关键的函数:
 1.break
 break代表,跳出当前循环体,下面代码不再执行,继续执行循环后面的代码。
 例子:
 
#!/usr/bin/env python
# _*_coding:utf-8_*_
num=5
while num<10:
   num+=1
   print(num)
   break

  结果:

 6

  2.continue

跳出本次循环,继续下一次循环



15.for语句


for语句是我们经常用到的循环,下面来看一个简单的列子

#!/usr/bin/env python
# _*_coding:utf-8_*_
for i in range(5):
   print ("this is %d time "%i )

结果:


this is 0 time 

this is 1 time 

this is 2 time 

this is 3 time 

this is 4 time 




16.数据运算


算数运算:


wKioL1gxr9GCDKfpAAGtFWGcw3Q209.png


比较运算:


wKiom1gxsGzAlRC3AAH0HFH1p_Q863.png


赋值运算:


wKioL1gxsLKhsCv-AAGkJ9bDq8w820.png


逻辑运算:


wKiom1gxscaD7HM1AADtOkRrCnQ587.png



成员运算:




wKioL1gxsfqj3g1yAADUxML_754240.png




17.set集合(元素唯一无序)

1.创建集合:

a1={'123','qwe'}

或者

a1=['123,'qwe']

a1=set(a1)

2.集合的操作

  • 添加(add,update)

  • 清除(clear)

  • 拷贝(copy浅的)

  • 比较(difference)

  • 移除(discard,remove)

  • 集合运算(交、并)