2017/8/22 周二 晴
Linux在搭建好Python环境后的第一个hello world!
命令窗口
1.python
>>>2.print("hello world!")
2017/8/23 周三 台风
python命令的种类(按需安装):
python,ipython,python3,ipython3,功能一致,但有各自的特性,例如python(默认为python2)命令不能自动补全代码,而ipython可以自动补全代码
执行Python的3种方式
1.命令窗口输入python,在出现>>>后开始写代码,多用于测试
2.建一个XXX.py文件,写上代码,然后命令行python XXX.py,实际开发中最常使用
3.建一个XXX.py文件,写上代码,在文件开头加上#!/usr/bin/python(python命令的所在位置的绝对路径),在命令行./XXX.python
Python注释:
单行注释:#开头
多行注释:'''三个单引号'''
解决代码中出现中文问题
文件开头加上#coding=utf-8,等号两边没有空格,这中文问题出现于python2,而python3能够很好的识别中文,不加也可以
变量
#名字 = 值
age = 18 #数值
print(age)
name="hello" #字符串
name='world' #字符串
确定变量的类型
print(type(name))
str #字符串类型
注意点
print “heiil” #python可以正常运行,Python3不可以正常执行
print (“hhh”) #python2,3都可以正常执行
标识符和关键字
关键字不可做变量名
查看关键字列表
ipython3
import keyword #获取keyword工具箱
keyword.kwlist #使用keyword工具箱的kwlist功能
2017/8/24 周四 台风
输出
print("dd")
\t #tab
\n #换行
name="Hello"
name2="World"
age=18
print(name+name2) #HelloWorld
print(name+age) #运行出错,类型不匹配
格式化输出,与C类似
print("%d岁"%age) #18岁 没有逗号分隔,但使用了%来分隔
heigh=173
print("%d岁%d厘米"%(age,height)) #18岁170厘米
查看方法文档
help(方法名)
dir(方法名)
输入
在python3:
name=input("请输入:")
print("%s"%name)
在python2:
#原样输入
name = raw_input("请输入:")
print("%s"%name)
#会自动计算表达式,如输入:3+4,最终会打印出:7
name = raw_input("请输入:")
print("%s"%name)
特别的运算符
// #相除取整数:5//2=2.0
** #取幂次方: 5**2=25
= 的特殊使用,交换两个变量的值
A=10
B=5
A,B=B,A
此时:
A=5
B=10
字符串转int
a=int("10")
num = int(input("请输入一个数字:"))
if判断语句
if 条件:
事情
a=10
if a>5:
print("a>5")
else:
print("a<=5")
2017/8/25 周五 晴
逻辑运算符
and:相当于Java的&&
or:相当于Java的||
not :相当于Java的!
elif
相当于else if
if 嵌套
if
if
if
else
产生随机数
import random
random.randint(int begin,int end) #产生begin-end的随机数包含begin和end在内
while循环
while 条件:
语句体
字符串
"双引号里的内容"
'单引号里的内容'
for循环
for 临时变量 in 集合:
循环体
切片
name = "abcdefg"
# name[0]=a
# name[0,4] = abcd 取出来的是下标0~3,不包括4的元素
#可以这样理解,从0下标开始取,取4个元素
获取全部元素
name[0:]
name[:]
name[::]
#name[起始位置:结束位置:步长]
#name[::-1] 逆序
name="abcdef"
#name[-1]=f
#name[0:-1]=abcde
获取字符串的长度
len(name)
字符串常见操作
find
a = "hello world"
#a.+tab 提示可操作函数
a.find("hello")
>>0 #返回找到的下标
a.find("python")
>>-1 #找不到返回-1
rfind
从右边开始找,其余与find用法一致
index
与find类似,区别是找不到的不会返回-1,而是抛出异常
count
str.count("py")
str.count("py",begin,len)
replace
str2 = str.replace("py","aa") #替换所有
str2 = str.replace("py","aa",1) #替换一次
split
str.split(",") #根据逗号来切割为一个数组
startswith
str.startswith("a") #以"a"开头?是:返回True,否则返回False
endswith
str.endswith("a")
知识扩展
True-->非0: -100,1,123
False-->0
lower
str2= str.lower() #转小写
upper
str2= str.upper() #转大写
ljust
str.ljust(50)向左对齐
rjust
str.ljust(50)向右对齐
center
str.center(50) #居中显示
lstrip
str.lstrip(" ") #去除左边的空格
rstrip
str.rstrip("a") #去除右边的字符a
strip
str.strip(" ")#去除两边的空格
parttition
str.parttition(str2) #分隔成3个部分
rpartition
从右边开始找
splitlines
安照行分隔,根据换行符进行分隔
isalpha
是否都是字母
isdigit
是否都是数字
isalnum
是否字母或数字
join
str3 = str.join(str2) #字符串拼接
列表
list = ["ad",12,0.16]
列表的操作
append #添加一个元素,若添加一个列表,或直接将列表作为一个整体插进去
extend #添加一个元素,若元素为一个列表,会将该列表的每一个元素插进去
insert(1,a) #在下标1处插入
修改数据
list[0] = "ss"
是否在里面
"aa" in list 返回True或False
"aa" not in list
count
list.count("aa") #第几个,从1开始
index
下标
del
根据下标删
del list[1]
pop
删最后一个
remove
根据值删
排序
list.sort()#从小到大排序
list.reverse()#逆排序
list.sort(reverse=True) #逆排序
列表的嵌套
list2 = ["aa","55"]
list.append(list2)
aa=[["aa","nn"],[11,22]]
元组
元组的元素不能修改
aa=("aa","bb",123)
若元组只有一个值时
aa=(3.14,)#加个","来定义
字典
{key:value,key:value} #看上去真TMD像json
info = {"a":123,"b":"lll"}
#info["a"] = 123
不允许有两个相同的key,若在定义时有两个相同的可以则后面一个会覆盖前一个
info["aa"] #若aa不存在会报错
info.get("aa")#不报错
info.get("aa",123)#指定默认值123
字典的操作
改:
info["aa"]=456
增:
info["bb"]=456
删:
del info["aa"]
del info #删除整个变量(字典)
info.clear() #删除字典的所有的数据
查:
info.len()#长度
info.keys()#所有的key
info.values()#所有的value
info.items()#所有的key-value
字典的遍历
for a in info.keys()
#键
for a in info.values()
#值
for a in info.items()
#(key,value)
for key,val in info.items()
#key,val命名随意
2017/8/26 周六 昨晚打了两次plane
函数
定义
def 函数名():
代码
调用
函数名()
函数的文档说明
def 函数名()
"说明"
代码
'''
说明
'''
函数的参数
def 函数名(参数1,参数2...参数n)
代码
函数的返回值
def 函数名()
代码
return 100
return 200
只会返回第一个return
函数的嵌套
函数调用函数
def b()
print("in b")
def a()
b()
print("in a")
局部变量
在函数里定义的变量,形式参数
全局变量
在函数外定义的变量
在函数里不可以直接修改全局变量的值,
可以在函数里进行声明后再去修改,否则抛异常
函数里声明: global 变量名:不可变变量需要添加,可变的可以不加
通过列表,字典,元组(若return a,b等用逗号隔开默认是元组)把多个数据返回
对于元组:a,b=(1,2) #分别将1,2赋值给a,b
函数的默认参数:
def 函数名(参数a,c=30)
代码
默认值只能从右至左设置
def aa(a,b,c=5,e=6)
#...
aa(1,2,e=7) #给e传,不给c传
若指定参数名,则顺讯名可以随意
aa(b=5,a=100)
不定长参数
def aa(a,b,*args,**kwargs)
#...
args为元组,kwargs为字典,默认传递args,指定名字时传递个kwargs,名字为key
aa(1,2,3,4,mn=1,mm=2)
#a=1,b=2,args=(3,4),kwargs={"mn":1,"mm":2}
参数传递:解包
list = [1,2,3] #解包后:1,2,3
info={"a":1,"b":2} #解包后:a=1,b=2
aa(1,2,*list,**info)
引用
A=4
B=A
id(A)
id(B)
函数传递引用
1.类型
1.1操作
不可变类型:地址没有改变
操作使其地址发生改变
可变类型
a=a+a #地址改变
a+=a #地址没有改变
函数递归
函数自身调用自身
def a():
...
a()
...
匿名函数
aaa = lambda a,b:a+b #a,b为传递的参数,相当于把a+b返回,函数里面不可以有print等
可以当做参数传递
排序字典
info.sort(key=lambda x:x["age"],reverse=True) #根据字典的key字段来进行降序排序
文件
打开
f = open("1.txt",r) #r, w, a
关闭
f.close
读取文件
f.read()
f.read(5) #读五个字节
f.readlines()#按行读取
写文件
f.write("kkkk") #返回成功写进的字节数
文件定位
f.tell() #返回当前位置
f.seek(offset,a) #a=0:文件头,1:当前位置,2:文件末尾,python3对offset为负数不支持了
os
import os
os.rename(“aa”,”bb”) #将”aa”改名为”bb”
os.remove(“aa”) #删除文件
os.getcwd() #获取当前路径
os.chdir(“../”) #修改当前默认路径
os.listdir() #把当前路径的文件名打印出来
os.rmdir(“a/”) #删除文件夹
2017/8/27 周日 又来了一个台风
面向对象
定义
class Cat:
#属性
#方法
def eat(self):
#...
使用
cat01 = Cat()
cat01.eat()
添加属性
对象名.新的属性名 = 值
获取属性
1.对象.属性
2.对象的方法里的第一个形参self.属性
初始化方法
__init__(self) #左边两个下划线,右边两个下划线,
相当于构造方法,可接受参数
__init__(self,a,b)
str(self) #相当于Java的tostring方法
for里使用else
for a in list:
#...
else:
#如果list里没有任何都系则执行这里
2017/8/28 周一 阴
私有属性: __name #前面两个下划线,不能直接访问,同意通过方法来设置以及返回
私有方法: __method
析构函数:del
销毁对象时调用
继承
单继承
class Father(object): #等价于 class Father:o是小写
#...
class Son(Father):
#...
重写方法
与C,Cpp,Java一样,在子类定义一个从父类继承的方法
调用父类被重写的方法
super().method()
2017/8/29 周二 晴
多继承
class A(B,C):
查看调用的先后顺序
print(A.__mro__)
多态
def aa(A a):
类属性
在类里定义num:
class A:
num=0
访问:
使用对象访问:若其与实列对象属性的名字相同则会回去实列属性
cat.num
使用类名来访问:Cat.num
实例属性
def __init__(self):
self.age=0
实例方法
def aa(self):
#....
类方法
@classmethod
def aa(cls,name):
调用:对象.方法名() 类名.方法名()
静态方法
@staticmethod
def AA():
调用:对象.方法名() 类名.方法名()
注意
实例方法与实例属性不能通过类名来调用
单例模式
通过重写方法:def __new__(cls)
2017/8/30 周三 晴
异常
try:
#...
except: #捕获所有异常
#...
try:
#...
except 异常类: #捕获指定的异常
#...
捕获多个异常
except a1:
except a2:
或者
except a1,a2: #python2
except (a1,a2): #python
打印异常信息
except a1 as result:
except (a1,a2) as result:
else
try:
except:
else:#没有捕获任何异常时执行
finally
try:
except:
else:
finally: #最后一定会执行
异常的传递
抛给调用者
抛出自定义异常
继承Exception类
raise 异常类 #相当于Java 的throw
except 里 raise
把捕获的异常原封不动的抛出
模块
使用import来导入
自定义模块
建立py文件
name
直接运行py:值为:__main__
通过导入模块运行:值为:模块名
from 模块 import 内容
把模块的指定内容导入进来
from random import 函数1,函数2
把模块的所有内容导入 from random import *
定位模块
import sys
sys.path.insert(0,"文件夹")
all
是一个列表,代表了 from 模块 import * 所导入的内容
包
在文件夹里建:__init__.py文件
传参数
import sys
sys.argv #接收参数,列表来存储
列表推导式
a = [x for x in range(1,101)] #生成了有1~10数字的一个列表
a = [x for in range(1,100) id x%2==0] #生成偶数
a = [(x,y) for x in range(1,4) for y in range(1,3)] #[(1,1),(1,2),(2,1),(2,2),(3,1),(3,2)]
set
不可以有相同的元素
a = [11,22,33,44,33,22,11]
b = set(a) #b=(11,22,33,44)