标签:
1、第一个Python代码
在Linux下/home/zx 目录下新建hello.py文件
1 #vim hello.py //添加如下内容 2 3 #!/usr/bin/env python 4 5 # -*- coding:utf-8 -*- 6 print "Hello,World" 7 8 #chmod +x hello.py //添加执行权限
执行代码:
./hello.py
结果:
python内部执行过程如下:
python首先把hello.py文件读到内存当中,然后经过语法分析和词法分析之后,假如文本没有问题会把文本的内容交给编译器,编译器会把文本的内容编译成字节码,然后执行字节码,把字节码转换成机器码,在进行CPU调度。
2、注释
当行注视:# 被注释内容
多行注释:""" 被注释内容 """ 或者 ‘‘‘被注释内容‘‘‘。
3、导入模块
import sys //导入sys模块
4、捕获参数
捕获参数,并存入到集合
import sys.argv
比如:test内容如下:
1 #vim test.py 2 3 #!/usr/bin/env python 4 # -*- coding:utf-8 -*- 5 import sys 6 print sys.argv
执行代码:
zx@ubuntu:~$ ./test.py localhost:8001
执行结果:
[‘./test.py‘, ‘localhost:8001‘]
5、python编译:
经过编译成字节码文件 .pyc文件,反编译成 .py;如果.pyc 和 .py 内容相同,
则.pyc 优先级高,否则,先查找.py,再重新编译生成 .pyc 文件。
6、变量
1)声明变量:
上述代码声明了一个变量,变量名为:name,变量name的值为:"tom"
变量的作用:昵称,其代指内存里某个地址中保存的内容。
变量命名规则:
1)变量名只能以 数字、字母、下划线组成
2)第一个字符只能为字母、下划线;不能为数字
3)不要使用内置变量名
4)以下关键字不能声明为变量名
[‘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)变量赋值
比如:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
name1 = "tom"
name2 = name1
name1 = "Jerry"
print "name1:",name1 //打印name1值
print "name2:",name2 //打印name2值
执行结果:
zx@ubuntu:~$ ./name1.py
name1: Jerry
name2: tom
为什么name2值不等于Jerry?
答:1)在执行name1 = "tom",解释器创建了字符串"tom"和变量name1,并把name1指向"tom"。
2)执行name2 = name1,解释器创建了变量name2,并把name2指向name1指向的字符串"tom"。
3)执行name1 = "Jerry",解释器创建了字符串"Jerry",并把name1的指向改为"Jerry",但name2并没有更改。
所以,最后打印变量name2的结果自然是"tom"了。
字符串特性:一旦修改,重新创建
以下是分配两块地址池的:
num1 = 7
num2 = 7
id(num1),id(num2) 指针地址一样,同一块内存指针池(看起来一样,是内部进行优化的,相当于在内部循环了一遍,当循环了一遍之后,发现有一个id1也是这个地址,于是也将id2指向这个地址,实际上是开辟两块指针空间的)
如果缓冲池过大,就会新开辟一块空间,缓冲池就会将多的扔掉
num1 = 700
num2 = 700
id(num1),id(num2) 指针地址不一样
7、输出和输入 -->以下代码在Windows上实现的。
输出:
用print加上字符串,就可以向屏幕上输出指定的文字。比如输出“Hello,world”,用代码实现如下:
>>> print "Hello,world"
Hello,world
>>>
print语句也可以跟上多个字符串,用逗号","会输出一个空格,因此,输出的字符串是这样的拼起来的:
>>> print ‘My favorite fruit is‘,‘apple‘,‘banana‘,‘pear‘
My favorite fruit is apple banana pear
>>>
输入:
如果要让用户从电脑输入一些字符,python提供了raw_input函数和getpass模块,可以让用户输入字符串,并存放到一个变量里。比如输入用户名和密码:
例如:
# -*- coding: utf-8 -*-
import getpass
name = raw_input("请输入用户名:".decode(‘utf-8‘).encode(‘gbk‘))
pwd = getpass.getpass()
print name
print pwd
8、流程控制-->以下代码都在Windows下实现的。
需求1:判断用户名是否等于“tom”,打印“登录成功”,否则,打印“登录失败”。
# -*- coding: utf-8 -*-
name = raw_input("请输入用户名:".decode(‘utf-8‘).encode(‘gbk‘)) //输入tom
if name == "tom": //值对比,内存地址对比,
print u"登录成功"
else:
print u"登录失败"
需求2:如果用户输入用户是"tom",就打印"普通用户";如果用户输入用户是"jerry",就打印"管理员";如果用户输入用户是"jack",就打印"超级管理员";否则,打印"输入有误"。
代码如下:
# -*- coding: utf-8 -*-
name == raw_input("请输入用户名:".decode(‘utf-8‘).encode(‘gbk‘)) //这里进行编码转换,否则不能正常显示中文。
if name == "tom":
print u"普通用户" //正常打印中文需要加上‘u‘
else if name == "jerry":
print u"管理员"
else if name == "jack":
print u"超级管理员"
else:
print u"输入有误"
需求3:做一个登录测试,如果输入用户名是"tom",并且密码等于"123",就打印"登录成功",否则,"登入失败"。
# -*- coding: utf-8 -*-
import getpass
name = raw_input("请输入用户名:".decode(‘utf-8‘).encode(‘gbk‘))
pwd = getpass.getpass()
if name == "tom" and pwd == "123":
print u"登入成功"
else:
print u"登录失败"
9、数据类型
数据类型总体分为两部分:
1)、单值
数字:整型、长整型、浮点型、复数
布尔值:真或假,1或0
字符串:"Hello,world"
2)、集合
列表、元组、字典、哈希表
1)、int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
2)、长整型
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意:自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
3)、浮点型
浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
4)、复数
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
注:Python中存在小数字池:-5 ~ 257
5)、布尔值
真或假
1 或 0
6)字符串
万恶的字符串拼接:
>>> ‘Hello,%s‘ %‘world‘
‘Hello,world‘
>>> ‘Hi,%s,you have $%d‘ %(‘Mechael‘,1000)
‘Hi,Mechael,you have $1000‘
>>>
常见的占位符有:
%d 整数
%f 浮点数
%s 字符串
b.打印字符串
>>> print ‘tom‘ #使用单引号
tom
>>> print "tom" #使用双引号
tom
>>> print ‘‘‘line1 #使用3个引号,可以是3个双引号或者单引号
... line2
... line3
... line4‘‘‘
line1
line2
line3
line4
>>>
c.字符串切片
>>> name = "jerry"
>>> name[0] #打印索引为0的值,输出值为:j
‘j‘
>>> name[0:2] #打印索引从0到2的值,不包括2(即<),输出值为:je
‘je‘
>>> name[-1] #打印最后一个,输出值为:y
‘y‘
>>> name[:-1] #打印索引从0开始至倒数第二字符,不包括自己,输出值为:jerr
‘jerr‘
d.统计长度
>>> len(name) #统计字符串长度
5
e.去除两边的字符
>>> name = " jerry "
>>> name.strip() #去除两边空格
‘jerry‘
>>> name.lstrip() #去除左边空格
‘jerry ‘
>>> name.rstrip() #去除右边空格
‘ jerry‘
>>>
f.分割
>>> name = "tom,25,man"
>>> name.split(‘,‘)
[‘tom‘, ‘25‘, ‘man‘]
10、列表(list)
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
1)创建列表:
name_list = [‘tom‘,‘jerry‘,‘jack‘]
2)获取list元素的个数
>>> len(name_list)
3
3)用索引来访问list中每一个位置的元素
>>> name_list[0]
‘tom‘
>>> name_list[1]
‘jerry‘
>>> name_list[2]
‘jack‘
>>> name_list[-1]
‘jack‘
>>>
4)往list追加元素到末尾
>>> name_list.append(‘Adam‘)
>>> name_list
[‘tom‘, ‘jerry‘, ‘jack‘, ‘Adam‘]
>>>
5)把元素插入到指定的位置,比如索引号为1的位置:
>>> name_list.insert(1,‘Bob‘)
>>> name_list
[‘tom‘, ‘Bob‘, ‘jerry‘, ‘jack‘, ‘Adam‘]
>>>
6)删除lsit末尾的元素,用pop()方法
>>> name_list.pop()
‘Adam‘
>>> name_list
[‘tom‘, ‘Bob‘, ‘jerry‘, ‘jack‘]
>>>
7)要删除指定位置的元素,用pop(i)方法,其中i是索引位置:
>>> name_list.pop(1)
‘Bob‘
>>> name_list
[‘tom‘, ‘jerry‘, ‘jack‘]
>>>
8)把某个元素替换成别的元素
>>> name_list[1] = ‘Tracy‘
>>> name_list
[‘tom‘, ‘Tracy‘, ‘jack‘]
>>>
9)join (列表变成字符串)
>>> ‘,‘.join(name_list)
‘tom,Tracy,jack‘
10)in(包含,判断元素是否在列表中)
>>> ‘tom‘ in name_list
True
>>>
11、元组(没有增删改),其他和列表一样
>>> name_list = (‘tom‘,‘Jerry‘,‘jack‘)
>>> name_list
(‘tom‘, ‘Jerry‘, ‘jack‘)
总结:
列表(list),字符串(str),元组(tuple)
共同点: 切片、索引、len() 、in
不同点:
str:重新开辟空间
list:修改后,不变
元组(tuple): 不允许修改
12、for循环
# -*- coding: utf-8 -*-
name_list = [‘tom‘,‘jerry‘,‘jack‘]
for item in name_list:
if item == ‘tom‘:
print "How are you"
continue #结束当前循环
if item == ‘jerry‘:
print "hello"
break #跳出循环
13、while循环
while 条件:
print "..."
while True: #死循环
print "True"
14、字典,键值对(字典无序,特殊的for循环)
字典:由key和value存储方式
# -*- coding: utf-8 -*-
person = {"name":"tom","age":25,"gender":"man"}
print person.keys()
print person.values()
print person[‘name‘]
for keys,values in person.items():
print keys,values
print "############"
执行结果:
F:\code>python person.py
[‘gender‘, ‘age‘, ‘name‘]
[‘man‘, 25, ‘tom‘]
tom
gender man
############
age 25
############
name tom
############
说明:
person.keys() #所有key,得到列表
person.values() #所有value,得到列表
person.items() #所有元素,仅for循环时使用。
15、运算符
1)算术运算符:
+:加
-:减
*:乘
/:除
%:取模,20%10输出结果0
**:幂
//:取整除-返回商的整数部分,9//2输出结果4、9.0//2.0输出结果4.0
2)比较运算符
==:等于-比较对象是否相等
!=:不等于-比较两个对象是否不相等
<>:不等于-比较两个对象是否不相等
>:大于-返回x是否大于y
<:小于
>=:大于等于
<=:小于等于
3)赋值运算符
=:简单的赋值运算符
+=:加法赋值运算符
-=:减法赋值运算符
*=:乘法赋值运算符
/=:除法赋值运算符
%=:取模赋值运算符,c%10等效于c=c%10
**=:幂赋值运算符
//=:取整数赋值运算符
4)位运算符
&:按位与运算符
|:按位或运算符
^:按位异或运算符
~:按位取反运算符
<<:左移动运算符
>>:有右移动运算符
5)逻辑运算符
and:布尔与
or:布尔或
not:布尔非
6)成员运算符
in:如果在指定的序列中找到值返回True,否则返回False。
not in:如果在指定的序列中没有找到值返回True,否则返回False。
7)身份运算符
is:is是判断两个标识符是不是引用自一个对象
is not:is not是判断两个标识符是不是引用自不同对象
16、文件操作
打开文件:
file_obj = file("文件路径","模式")
或者
file_list = open(‘文件路径‘,‘模式‘)
打开文件模式有:
r,以只读方式打开文件
r+,打开一个文件用于读写。文件指针将会放在文件的开头
w,打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a,打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
w+,打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
#找到文件
文件路径 E:/log.txt
#打开文件
file_obj = file(文件路径,‘r‘)
#文件操作,读写
file_obj.read() //将所有读入到内存
file_obj.readlines() //一行一行读入到内存
for line in file_obj.xreadlines()
print line
上面改成下面的:
for line in file_obj: //每次循环,只读一行,避免全部读入内存
file_obj.write() //写
file_obj.writeline() //一行一行写
#文件关闭
file_obj.close()
需求:将用户每登陆一次,记录一次登陆次数(通过操作文件实现)
log.txt文件内容格式如下:
tom;123;1
jack;456;2
代码如下:
# -*- coding: utf-8 -*-
file_obj = file(‘F:\code\day1\log.txt‘,‘r+‘)
line_list = file_obj.readlines()
#print line_list -->打印结果:[‘tom;123;1\n‘, ‘jack;456;2‘]
my_list = [] //定义一个空列表
for ele in line_list:
#print ele -->打印结果: tom;123;1
# jack;456;2
line = ele.strip() //把\n删掉
#print line -->打印结果:tom;123;1
# jack;456;2
value_list = line.split(‘;‘) //分割后,转换成列表。
#print value_list -->打印结果:[‘tom‘, ‘123‘, ‘1‘]
# [‘jack‘, ‘456‘, ‘2‘]
last_value = int(value_list[-1]) //把最后一个值转换成整数
#最后一个数,转换成整型
#print last_value -->打印结果:1 和 2
#print type(last_value) -->打印结果: <type ‘int‘>
last_value += 1 //将最后一个值加‘1’
#print last_value
value_list[-1] = str(last_value)
#更新后的列表
#print value_list -->打印结果: [‘tom‘, ‘123‘, ‘2‘]
# [‘jack‘, ‘456‘, ‘3‘]
value_str = ‘;‘.join(value_list)
#将列表转换成字符串
#print value_str -->打印结果:tom;123;1
# jack;456;2
my_list.append(value_str)
#print my_list -->打印结果:[‘tom;123;2‘, ‘jack;456;3‘]
file_obj.seek(0) //
my_str = ‘\n‘.join(my_list) //添加\n
#print my_str
file_obj.write(my_str)
file_obj.close()
执行结果:
tom;123;2
jack;456;3
提示:seek():移动文件指针到不同的位置,可以指定偏移量和起始位置。起始位置0表示从文件头开始,1表示从当前位置开始,2表示从文件尾开始,默认是0.
标签:
原文地址:http://www.cnblogs.com/zengxin101/p/5039399.html