python 入门
第1章 Day1
1.1 第一个python脚本
#!/usr/bin/env python
#_*_coding:utf-8_*_
print ("hello,world")
1.2 变量:变化的量
1.2.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']
1.2.2
变量的赋值
>>> name = "lieying"
>>> name2 = name
>>> print(name, name2)
lieying lieying
>>> name = "Jack"
>>> print("What is the value of name2 now?")
What is the value of name2 now?
>>> print("What is the value of %s now?" %name2) #格式化输出 是为了方便在字符串中插入变量的值
What is the value of lieying now?
>>> print("What is the value of",name2,"now?") 否则只能这样写 把字符串打断
What is the value of lieying now?
>>> print("What is the value of"name2"now?") 打印输出时,字符串与变量之间必须用逗号分隔,逗号默认打印空格
SyntaxError: invalid syntax
1.3 字符编码
Python 2.7 默认编码为 ASSCII
Asscii码使用八位二进制来表示一个字节 可以表示最多2**8=256个字符 中文有2万多汉字 所以表示不过来
1980年
GB2312 一共收录了7445个字符,包括6763个汉字和682个其它符号。
1995年的汉字扩展规范GBK1.0收录了21886个符号
2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2
**16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
所以要表示中文在python文件中要声明
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print ("你好,世界")
1.4 注释
当行注视:# 被注释内容
多行注释:""" 被注释内容 """
1.5 用户输入
1.5.1 当我们需要交互的获取一些变量的值时要用input
>>> name = input("What is your name?") # 将用户输入的内容赋值给 name 变量
What is your name?lieying
>>> print("Hello " + name )
Hello lieying
1.5.2 输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import getpass
pwd = getpass.getpass("请输入密码:")
# 打印输入的内容
print(pwd)
1.6 模块初识
[root@linux-node1 scripts]# cat test.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys,os
print(sys.argv) #把执行脚本时传递的参数获取到了
os.system("df
-h") #调用系统命令
os.system(''.join(sys.argv[1:])) #把用户的输入的参数当作一条命令交给os.system来执行
[root@linux-node1 scripts]# python test.py pwd
['test.py', 'pwd']
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 28G 2.5G 26G 9% /
devtmpfs 983M 0 983M 0% /dev
tmpfs 993M 0 993M 0% /dev/shm
tmpfs 993M 8.7M 984M 1% /run
tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda1 1014M 137M 878M 14% /boot
tmpfs 199M 0 199M 0% /run/user/0
/server/scripts
用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。
其实Python和Java/C#一样,也是一门基于虚拟机的语言
1.7 简述Python的运行过程
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
第2章 python数据类型
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
2.1 字符串
"hello world"
万恶的字符串拼接:
python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
字符串格式化输出
name = lieying
print "i am %s" %name
输出: i am lieying
PS: 字符串是 %s;整数 %d;浮点数%f
字符串常用功能:
移除空白
>>> print('\n lieying\n'.strip())
lieying
分割
>>> print('lieying'.split('i'))
['l', 'ey', 'ng']
长度
>>> print(len('lieying'))
7
索引
>>> print('lieying'.index('i')) #默认从零开始到第一个i
1
>>> print('lieying'.index('i',2)) #指定到第二个i
4
切片
>>> print('lieying is a good boy'[1:15:2])
iyn sag
2.2 列表
list1=['lieying','jianhong','meiyue','liming',201,]
或者list1=(['lieying','jianhong','meiyue','liming',201,])
2.2.1 索引
>>> list1.index('jianhong')
1
>>> list1.index(201)
4
2.2.2 切片
>>> list1[0:4:2]
['lieying', 'meiyue']
>>> list1[0::2]
['lieying', 'meiyue', 201]
>>> list1[::2]
['lieying', 'meiyue', 201]
2.2.3 追加 var.append(‘xx’)
>>> list1.append('六中')
>>> print(list1)
['lieying', 'jianhong', 'meiyue', 'liming', 201, '六中']
2.2.4 删除
>>> list1.remove('六中')
>>> print(list1)
['lieying', 'jianhong', 'meiyue', 'liming', 201]
2.2.5 长度
>>> len(list1)
5
2.2.6 循环
>>> for n in list1:
print(n)
lieying
jianhong
meiyue
liming
201
2.2.7 包含
list1=['lieying', 'jianhong', 'meiyue', 'liming', 201]
>>> 'lieying' in list1
True
>>> 201 in list1
True
2.3 元组 不可变列表
ages = (11,22,33,44,55)
ages = tuple((11,22,33,44,55))
2.4 字典
person = {‘name’:’meiyue’,’age’:’26’,’phone’:’18310015326’}
person = dict({‘name’:’meiyue’,’age’:’26’,’phone’:’18310015326’})
字典是无序的 列表时有序的 所以字典的查询速度比列表快
2.4.1 索引 #只可以索引键 不能索引值 因为键是唯一的(不能为列表和字典,可以为字符串或者整数)
>>> person = {'name':'meiyue','age':'26','phone':'18310015326'}
>>> 'age' in person
True
>>> 'meiyue' in person
False
2.4.2 新增
>>> person['sex']='man'
>>> person
{'age': '26', 'sex': 'man', 'phone': '18310015326', 'name': 'meiyue'}
2.4.3 删除
>>> del person['age'] #指定键删除
>>> person
{'sex': 'man', 'phone': '18310015326', 'name': 'meiyue'}
>>> person.popitem() #随机删除
('sex', 'man')
>>> person
{'phone': '18310015326', 'name': 'meiyue'}
键值对
2.4.4 循环
>>> person['sex']='man'
>>> person['age']=26
>>> person
{'age': 26, 'sex': 'man', 'phone': '18310015326', 'name': 'meiyue'}
>>> for n in person:
print(n,person[n])
age 26
sex man
phone 18310015326
name meiyue
2.4.5 长度
>>> len(person)
4
2.4.6 查 键值对
>>> person['name']
'meiyue'
>>> person['age']
26
2.4.7 改
>>> person['age']=8
>>> person
{'age': 8, 'sex': 'man', 'phone': '18310015326', 'name': 'meiyue'}
2.5 数据运算
算数运算:
比较运算:
赋值运算:
逻辑运算:
成员运算:
身份运算:
位运算:
2.6 判断If..else
[root@linux-node1 scripts]# cat login.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import getpass
name = raw_input('请输入用户名:')
pwd = getpass.getpass('请输入密码:')
if name == "alex" and pwd == "cmd":
print("欢迎,alex!")
else:
print("用户名和密码错误")
2.7 loop循环for
>>> for i in range(5):
print("loop:", i )
loop: 0
loop: 1
loop: 2
loop: 3
loop: 4
>>> for i in range(10):
if i<5:
continue #不往下走了,直接进入下一次loop
print("loop:", i )
loop: 5
loop: 6
loop: 7
loop: 8
loop: 9
>>> for i in range(10):
if i>5:
break #不往下走了,跳出本层循环
print("loop:", i )
loop: 0
loop: 1
loop: 2
loop: 3
loop: 4
loop: 5
>>>
2.8 While loop
死循环
count = 0
while True:
print("你是我的玫瑰,你是我的爱...",count)
count +=1
循环一百次退出
count = 0
while True:
print("你是我的玫瑰,你是我的爱",count)
count +=1
if count == 100:
print("你太累了,也该歇歇了")
break
count = 0
while count<100:
print("你是我的玫瑰,你是我的爱",count)
count +=1
2.9 三元运算
result = 值1 if 条件 else 值2
如果条件为真:result = 值1
如果条件为假:result = 值2