Python之路---day1

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

 1 root@python:/python/day1# cat hello.py
 2 
 3 #!/usr/bin/env python #告诉系统使用python解释器
 4 
 5 #-*- coding:utf-8 -*- #设置字符集,使用UTF-8
 6 
 7 print "你好,世界"
 8 
 9 root@python:/python/day1# python hello.py #py文件的执行
10 
11 你好,世界
View Code

 

二: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 root@python:/python/day1# cat hello.py
 2 
 3 #!/usr/bin/env python
 4 
 5 #-*- coding:utf-8 -*-
 6 
 7 import sys                                          #导入sys模块
 8 
 9 print sys.argv                                          #使用argv
10 
11 root@python:/python/day1# python hello.py user_argv             #文件名后面是参数
12 
13 ['hello.py', 'user_argv']
View Code

 

六:变量

1:声明变量

1 #!/usr/bin/env python
2 
3 #-*- coding:utf-8 -*-
4 
5 name = "曹小贱"
View Code

 

变量的名: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:变量的赋值

七:输入

 1 root@python:/python/day1# cat hello.py
 2 
 3 #!/usr/bin/env python
 4 
 5 #-*- coding:utf-8 -*-
 6 
 7 #将用户输入的内容赋值给name变量
 8 
 9 name = raw_input("请输入用户名:")
10 
11 #打印输入的内容
12 
13 print name
14 
15 root@python:/python/day1# python hello.py
16 
17 请输入用户名:曹高田
18 
19 曹高田
20 
21 输入密码时,如果想要不可见,需要利用getpass方法即可:
22 
23 #!/usr/bin/env python
24 
25 #-*- coding:utf-8 -*-
26 
27 #首先导入getpass模块
28 
29 import getpass
30 
31 #设置隐藏密码
32 
33 pwd = getpass.getpass("请输入密码:")
34 
35 print pwd
36 
37 root@python:/python/day1# python hello.py
38 
39 请输入密码:
40 
41 can not look
View Code

 

八:流程控制和缩进

需求一:用户登录验证

 1 #!/usr/bin/env python
 2 
 3 #coding:utf-8
 4 
 5 import getpass
 6 
 7 name = raw_input("请输入用户名:")
 8 
 9 pwd = getpass.getpass("请输入密码:")
10 
11 if name == "曹小贱" and pwd == "123456":
12 
13 print "欢迎,曹小贱"
14 
15 else:
16 
17 print "大哥,你走错门了吧"
18 
19 执行:
20 
21 root@python:/python/day1# python 1.py
22 
23 请输入用户名:cao
24 
25 请输入密码:
26 
27 大哥,你走错门了吧
28 
29 root@python:/python/day1# python 1.py
30 
31 请输入用户名:曹小贱
32 
33 请输入密码:
34 
35 欢迎,曹小贱
View Code

 

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

 1 #!/usr/bin/env python
 2 
 3 #coding:utf-8
 4 
 5 import getpass
 6 
 7 name = raw_input('请输入用户名:')
 8 
 9 pwd = getpass.getpass('这是隐藏的密码:')
10 
11 if name == 'eric' and pwd == '123':
12 
13 print '普通'
14 
15 elif name == 'tony' and pwd == '123':
16 
17 print '超级'
18 
19 elif name == 'alex' and pwd == '123':
20 
21 print '超神'
22 
23 else:
24 
25 print '登录失败'
View Code

 

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

九: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)

十:运算

运算符

描述

实例

算术运算

两个对象相加

10+19输出结果29

_

得到负数;两个对象相减

10-19输出结果-9

*

两个数相乘,

10*19输出结果190

/

两个数相除

10/2输出结果5

%

取模-返回除法的余数

10%3输出结果1

**

2**2输出结果4

//

取整除返回商的整数部分

9//2输出结果4

比较运算

==

等于

(a==b)返回false

!=

不等于

(a != b)返回true

<>

不等于

(a <> b)返回false

>

大于

(a > b)返回false

<

小于

(a < b)返回true

>= 

大于等于

(a >= b)返回false

<= 

小于等于

(a <= b)返回true

赋值运算

=

简单的赋值运算符

c = a + b将a+b的运算结果赋值给c

+=

加法赋值运算

c+=a等效于c=c+a

-=

减法赋值运算

c-=a等效于c=c-a

/=

除法赋值运算

c/=a等效于c=c/a

%=

取模赋值运算

c%=a等效于c=c%a

*=

乘法赋值运算

c*=a等效于c=c*a

**=

幂赋值运算

c**=a等效于c=c**a

//=

取整赋值运算

c//a等效于c=c//a

逻辑运算

and

布尔"与"如果x为False,x and y 返回false,否则返回y的值

(a and b)返回true

or

布尔"或"如果x为True,,则返回True。否则返回y大的值

(a or b)返回true

not

布尔"非",x为true,返回false

not (a and b)返回false

成员运算

in

如果在指定的序列内找到值,则返回True.

x在y的序列中,返回True

not in

如果在指定的序列内没找到值,则返回True.

x不在y的序列中,返回True

身份运算

is

is 是判断两个标识符是不是引用自一个对象

x is y,如果id(x)=id(y) is返回结果1

is not

is not 是判断两个标识符是不是引用来自不同的对象

x is not y 如果id(x)!=id(y)返回结果1

位运算

&

按位与运算

(a&b)输出结果12.二进制解释:0000 1100

|

按位或运算

(a|b)输出结果61二进制解释:0011 1101

^

按位异或运算

(a^b)输出结果49 二进制解释:0011 0001

-

按位取反

(-a)输出结果-61 二进制解释:1100 0011

<<

左移动运算

a<<2输出结果240二进制解释:1111 0000

>>

右移动运算

a>>2输出结果15二进制解释:0000 1111

 1 #!/usr/bin/env python
 2 
 3 #coding:utf-8
 4 
 5 import getpass
 6 
 7 name = raw_input('请输入用户名:')
 8 
 9 pwd = getpass.getpass('这是隐藏的密码:')
10 
11 if name == 'eric' and pwd == '123':
12 
13 print '普通'
14 
15 elif name == 'tony' and pwd == '123':
16 
17 print '超级'
18 
19 elif name == 'alex' and pwd == '123':
20 
21 print '超神'
22 
23 else:
24 
25 print '登录失败'
View Code

 

运算符优先级

运算符

描述

**

指数(最高优先级)

~+-

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

*/%//

乘除取模取整除

+ -

加法减法

 

左移右移

&

位 '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+ )

 

 

 

 

 

 

 

 

posted @ 2015-10-28 15:26  曹小贱  阅读(349)  评论(0编辑  收藏  举报