python之路第一篇
python入门
1.第一个python代码:
在Linux /home/py 目录下新建hello.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
print "Hello,World"
执行代码:
python hello.py
2.捕获参数:
捕获参数,并存入到 集合
print sys.argv
3.模块导入:
import hello
4.python编译:
经过编译 成字节码文件 .pyc文件,反编译成 .py
如果.pyc 和 .py 内容相同,则.pyc 优先级高,否则,先查找.py,再重新编译生成 .pyc 文件
5.变量:
声明变量:
name = "Hello,World"
变量命名规则:
1)变量名只能以 数字、字母、下划线组成
2)第一个字符只能为字母、下划线;不能为数字
3)不要使用内置变量名
name1 = "test1"
name1 = name2
修改 name1 = "123"
name2 的值会跟着变吗?
答案是:不变
原因很简单:变量赋值时,会在内存中申请一块内存指针空间,将test1 赋值给 name1,相当于开辟了一块内存指针空间来存放 字符串test1,同时将 name2 = name1,相当于将 name2也同样指向这块内存指针空间,如果这个时候将字符串 “123”赋值给 name1,就相当于重新在内存中开辟一块内存指针来存储字符串 “123”,而name2 指针还是第原来的内存指针空间,所以name2的值并不会随着name1的改变而变化。
字符串特性:一旦修改,重新创建
以下是分配两块地址池的:
id1 = 7
id2 = 7
id(id1),id(id2) 指针地址一样,同一块内存指针池(看起来一样,是内部进行优化的,相当于在内部循环了一遍,当循环了一遍之后,发现有一个id1也是这个地址,于是也将id2指向这个地址,实际上是开辟两块指针空间的)
如果缓冲池过大,就会新开辟一块空间,缓冲池就会将多的扔掉
id1 = 700
id2 = 700
id(id1),id(id2) 指针地址不一样
6.流程控制:
user_name = raw_input("please enter Your name:")
if user_name == "Allen":
print "one!"
elif user_name == "yyh":
print "Two!"
elif user_name == "ali":
print "Three!"
else:
print "Invalid User!"
7.数据类型,分为两部分:
1)、单值
a.数字 :
整型、长整型、浮点、复数
-
b.布尔值:
真或假 、1 或 0
-
c.字符串:
“hello wolrd”
2)、集合:
列表、元组、字典、哈希表
3)、字符串:
万恶的字符串拼接:
python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的
空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
a).字符串传值:
字符串格式化:
name = "I'm %s" % 'allen'
name = "I'm %s, age: %d" % ('allen',25)
其中%s,%d 是占位符,%s代表字符串,%d 代表数字 ,% 后面的值是实际传入的参数,用来替换%s,和%d的值
name = "I'm {0},age:{1}"
new_name = name.format('allen',25)
print new_name
b) 打印字符串:
print 'name' #使用单引号
print "name" #使用双引号
print """ #使用三引号,打印多行
I'm is allen,
age is 25
"""
c) 字符串切片:
name = "allen"
name[0] #打印索引为0的值,输出值:a
name[0:2] #打印索引从0 到 2 的值,不包括2(即<),输出值为:al
name[-1] #打印最后一个,输出值:n
name[:-1] #打印索引从0开始至倒数第二个字符,不包括自己,输出值:alle
d) 统计长度
len(name) #统计字符串长度
e) 去除两边的字符
name.strip() #去除两边的空格
name.lstrip() #去除左边的空格
name.rstrip() #去除右边的空格
f) 分割
name = "allen,25,wonderful"
name.split(',')
8.列表:
a) 创建列表:
name_list = ['allen','yyh','ali','25']
name_list = list(['allen','yyh','ali',25])
b) 追加
name_list.append('hello')
c) 删除
del name_list[0]
d) john (列表变成字符串)
"".join(name_list)
e) in (包含,判断元素是否在列表中)
"allen" in name_list
9.元组 (没有增删改),其他和列表一样
("allen","ali","yyh")
总结:
列表(list),字符串(str),元组(tuple)
共同点:
切片、索引、len() 、in
不同点:
str:重新开辟空间
list:修改后,不变
元组(tuple):
不允许修改
10.for 循环:
name_list = ['allen','yyh','ali','25']
for item in name_list:
if item == "yyh":
print "diu diu ..."
continue
if item == "ali":
print "welcome to here!"
break # 跳出循环
11.while 循环:
while 条件:
print "ok ok ok"
while True: # 死循环
print 'true'
flag = True #标记位
while flag:
print "ok ok ok"
flag = False
12.字典,键值对 (字典无序,特殊的for循环)
person = {
"name":"allen",
"age":"25",
"gender":"man",
}
#person['name']
for k,v in person.items(): #字典无序
print k,v
person.keys() #所有key
person.values() #所有value
person.items() #所有元素
13.运算符
a) 算数运算:+ - * / % ** //
b) 比较运算:== != < > >= <=
c) 赋值运算:= += -= *= /= %= **/ //=
d) 逻辑运算:and or not
e) 成员运算:in not in
f) 身份运算:is is not
g) 位运算:& | ^ ~ >> <<
14.文件操作:
file_list = open('filename.txt','r')
or
file_list = file('filename.txt','r')
for line in file_list.read():
print line # 全量读
for line in file_list.readlines():
print line # 读取所有行,(列表)
for line in file_list.xreadlines():
print line # 一行一行读(每次只读一行)
需求:将用户每登陆一次,记录一次登陆次数(通过操作文件实现)
log.txt文件内容格式如下:
allen;123;1\n
yyh;456;2
file_obj = file('log.txt','r+')
line_list = file_obj.readlines
my_list = []
#my_list = ['allen;123;1','yyh';123;2]
for ele in line_list:
#"allen;123;1\n"
line = line.strip()
#"allen;123;1"
value_list = lines.split(';')
#["allen","123","1"]
last_value = int(values_list[-1])
#最后一个数,转换成整型
last_value += 1
#1 += 1 --> last_value +1
value_list[-1] = str(last_value)
#更新后的列表
#["allen","123","2"]
value_str = ';'.join(value_list)
#"allen;123;2
#"yyh;123;3"
my_list.append(value_str)
#my_list = ["allen;123;2","yyh;123;3"]
file_obj.seek(0)
my_str = '\n'.join(my_list)
file_obj.write(my_str)
file_dbj.close()