##-*- coding: utf-8 -*- #如果不加上这一行,文件中就不能包含中文
#---------------------------------------------------------------------#
##python编写规范
#不要混合使用制表符和空格,尽量都用制表符,但是要设置编辑器将制表符当做四个空格
#行长不要超过80个字符,注释的行长不超过72个字符
#给形参指定默认值时,以及使用关键字实参时,等号两边不要有空格
#定义函数时若形参太多需要换行,需要缩进两个制表位以跟函数体的缩进区分
#类的命名不使用下划线,而是首字母大写;实例名和模块名全部小写,并在单词之间用下划线
#每个模块、类都应该包含文档字符串
#---------------------------------------------------------------------#
print("hello,world")
#可以使用字母、数字或下划线作为变量名或函数名,但不能以数字为首
#----------------------------------------#
#---------------string-------------------#
#----------------------------------------#
#字符串可以用单引号或者双引号括起,这种灵活性允许了在字符串中包含单引号或者双引号
string1="you're late"
string2='He said:"Don\'t go out."'
print(string1)
print(string2)
#更改大小写
name="cyan zheng"
print(name.title())
print(name.upper())
print(name.lower())
#合并字符串
print(name.title()+", "+string1+"|")
string1+='add something'
#按空格分割单词
string1.split() #split会将结果储存在一个列表中
#添加空白(包括空格、制表符和换行符)
print("\ttab")
print("a row\nanother row")
#删除字符串的空白
string_with_space=" string with space "
print(string_with_space.rstrip()) #删掉末尾的空白
print(string_with_space.lstrip()) #删掉开头的空白
print(string_with_space.strip()) #删掉两端的空白
#----------------------------------------#
#---------------number-------------------#
#----------------------------------------#
3**3 #3的三次方
0.2+0.2 #小数通常称为浮点数,由于计算机的处理方式,对小数的运算常常会出现不同的小数位数
age=23
#message="happy "+age+"rd birthday" 这个语句会报错,因为age的类型是数字,需要将其转换为字符串才能放在字符串中
message="happy "+str(age)+"rd birthday"
age='23'
age=int(age) #将以字符串存储的数字转换为数字格式
if age%2==0: #判断一个数字是否偶数
print("Age is even")
#----------------------------------------#
#---------------list---------------------#
#----------------------------------------#
#定义列表
alist=['this',' is',' a',' list',23]
emptylist=[]
#访问列表
print(alist) #这会输出包括方括号在内的内容
print(alist[0]) #这会输出alist的第一个元素this
print(alist[3].upper()) #对列表中类型为字符串的元素,可以使用字符串自带的方法
print(alist[-1]) #索引从0开始;-1表示最后一个元素,-2表示倒数第二个,以此类推
len(alist) #返回列表的长度
#增删改列表
alist[0]='change' #修改列表元素
alist.append('append') #在列表末尾添加元素 #str添加元素的话用+=就行
alist.insert(0,'insert') #在第0个位置插入元素,其后的元素都会后移一个位置
del alist[0] #删除alist的第0个元素
popped_alist=alist.pop() #方法pop会删除alist的最后一个元素,然后返回这个元素值;注意上面的append和insert都是没有返回值的
popped_alist2=alist.pop(1) #pop也可以输出参数,删除和返回特定索引的值,不输入时,就默认是最后一个元素
alist.remove('append') #如果只知道要删除的元素值而不知道索引时,可使用remove方法;remove只能删除第一个满足条件的值,如果要删除多个需要使用循环
#修改列表排序
alist.sort() #将列表中的元素按照字母顺序排序,不允许列表中有数字
alist.sort(reverse=True) #将列表元素按字母倒序排序
sorted_alist=sorted(alist) #sorted函数返回排序后的列表,但不会改变原列表的排序
rsorted_alist=sorted(alist,reverse=True)
alist.reverse() #直接按照相反的顺序排列
##列表for循环
for element in alist: #每次循环都将alist中的一个元素赋值给element然后执行循环体,记得有冒号
print(element) #python通过缩进识别代码行之间的关系,因此一定要注意缩进 #记得在终端写for循环时,是需要自己打缩进的
##数值列表
#创建数字列表
numlist=list(range(1,5)) #生成的列表是1234,range函数不会包含第二个参数
numlist2=list(range(1,10,2)) #range的第三个参数是公差
#示例:创建一个数字列表,包含1:10的平方
squares=[]
for value in range(1,11):
square=value**2
squares.append(square)
#同一个例子的列表解析写法
squares=[value**2 for value in range(1,11)]
#描述性统计
min(numlist)
max(numlist)
sum(numlist)
#切片(访问列表的部分元素)
numlist[0:3] #将返回numlist的第0、1、2个元素,第二个索引一般不会被返回
numlist[:3] #省略起始索引,默认从第0个开始
numlist[1:] #省略终止索引,默认到最后一个
numlist[-3:] #返回最后三个元素
#复制列表
copylist=numlist[:] #这会复制numlist的当前值到copylist
copylist2=numlist #不使用方括号的话,copylist和numlist会联动,实际指向同一个列表
##元组dimension,即不可变的列表
dimensions=(2,3) #元组使用圆括号
#dimensions[0]=30 #给元组中的元素赋值会报错
dimensions=(2,30) #但是可以给元组重新赋值
##----------------------------------------#
##---------------if-----------------------#
##----------------------------------------#
#示例
for num in numlist:
if num==1: #一个等号是赋值,两个等号是判断
num=num+1
else:
num=num+2
if num!=1: #!=不等于
num=num-1
#条件判断中可以包含:< > <= >= 等数学符号
if num[1]==1 and num[2]==2:
And=num[1]+num[2]
if num[1]==1 or num[2]==2: #用括号增强可读性if (num[1]==1) or (num[2]==2)
Or=num[1]-num[2]
'hello' in numlist #in用来判断一个元素是否在列表中
'hello' not in numlist #not in是否不再列表中
if num[1]==1:
a=1
elif num[1]==2:
a=2
else: #可以只有if和elif,不一定要有else
a=3
#检查列表是不是空的
emptylist=[]
if emptylist: #当列表不是空的时返回True
a=emptylist[0]
##----------------------------------------#
##---------------dictionary---------------#
##----------------------------------------#
dic={'color':'green','size':5} #dictionary通过花括号定义,由key-value对组成
dic['color'] #通过key访问value
#字典的值可以是任意对象
dic['x']=1 #增加key-value对
#键值对的排列顺序没有意义
del dic['color']
#遍历键值对
for key,value in dic.items(): #方法items返回的是一个键值对列表
print(key)
print(value)
for key in dic.keys(): #等同于for key in dic:
print(key)
for value in dic.values(): #去重:for value in set(dic.values())#set类似于string,但是其中的元素是去重的
print(value)
#嵌套:把字典存储在列表中,或把列表存储在字典中
dic_1={'color':'green','size':5}
dic_2={'color':'green','size':5}
dic_3={'color':'green','size':5}
dics=[dic_1,dic_2,dic_3]
diclist={'color':'green','size':[2,3,4]}
##获取用户输入
message=input("Please input somthing: ")
print(message)
##----------------------------------------#
##---------------while--------------------#
##----------------------------------------#
a=1
while a<=5:
print(str(a))
a+=1
#可以用break退出循环
#可以用continue跳过某些情况的循环,在循环中的if...continue语句会检查是否满足if的条件,若满足则会跳过continue后面的所有语句开始下一个循环
#for循环不太适合修改列表或字典,如果需要修改,请使用while循环
alist=['a','b','c']
while alist: #循环直到alist变成空列表
a=alist.pop()
##----------------------------------------#
##---------------function-----------------#
##----------------------------------------#
#定义函数
a='var'
def func1(b):
# """这是函数的文档字符串docstring"""
print("this is what a function do with "+b)
#调用函数
func1(a) #b是形参,a是实参
#位置实参:提供实参时,按照定义函数时的形参顺序
#关键字实参:不需要按照顺序,但是需要指定实参对应的形参,如exmfunc(vara='haha',varb='dddd')
#给形参提供默认值,在定义函数时输入:exmfunc(vara,varb='dog'),则后面调用时可以不用输入varb。有默认值的形参需要放在形参的末尾
#返回值
def exmfunc(vara,varb='dog'):
output=vara+varb
return ouput
#return None #返回空值
a=exmfunc('hello, ')
#通过类似func(alist[:])的形式向函数传递列表的副本,避免函数运行过程中更改原列表
#允许传递任意数量的实参
def exmfunc(*dims): #加上*后,函数会将输入的实参(不管是1个还是多个)都封装到一个叫做dims的元组(即不可修改的列表)中,这样在调用时,不管输入几个参数都可以
for dim in dims:
print("/n"+dim)
#def exmfunc(a,b,c,*dims) #如果任意数量的形参不是唯一一个形参,那么需要将它放在形参的最后
#def exmfunc(a,b,c,**dics) #调用exmfunc(a,b,c,d='d',e='e')
#调用时可以输入多个键值对作为实参,这些键值对在函数体中会被当做一个dictionary
##----------------------------------------#
##---------------模块---------------------#
##----------------------------------------#
#将函数存储在模块中,需要时通过import调用。允许函数在不同程序中被调用,同时简化程序
#只需要将函数储存为py文件即可,导入后程序即可使用该文件中定义的所有函数
import modulefunc
modulefunc.func(vara,varb)#通过模块名.函数名来调用模块中的函数
from modulefunc import func1 as a, func2 as b
a(vara) #使用from...import的形式导入函数,则不需要在调用时指定模块名,不管是否指定了别名
from modulefunc import *
#import*表示导入模块中的所有函数,这种形式导入的函数也不需要在调用时指定模块名
##----------------------------------------#
##---------------类-----------------------#
##----------------------------------------#
#类可以用来定义一些对象的通用行为与特有属性。
class Dog(): #首字母大写的默认为类
def __init__(self,name,age):
#类中的函数称为方法,__init__是一个默认方法,每当从类中创建实例时都会自动调用
#每个方法都需要self形参,指代创建的实例
self.name=name #将形参name的值赋给self的属性name(可以通过实例访问的变量称为属性)
self.age=age
self.health=10 #为health提供默认值,则不需要在init中有对应的形参
def sit(self):
print(self.name.title() + " is sitting.")
#在python2.7中,创建类时需要在括号中加入object:class Dog(object):
#创建实例
dog1=Dog('Wang',2)
#创建后,dog1变量就自动具备了name和age属性,以及sit方法
dog1.name
dog1.sit()
##修改属性的值
#1.直接修改
dog1.health=8
#2.使用方法修改
#在类中定义方法:
def update(self,h):
self.health=h
#调用方法进行修改:
dog1.update(8)
#方法2的好处是可以设定一些逻辑,如不允许新设定的值高于之前的值等,还可以直接在原来
#的值的基础上增减,而不是直接赋一个新的值
##继承类
#继承一个类时,将会自动获得该类的所有属性和方法,并且与原先的类成为父类和子类的关系
class Doggy(Dog): #父类必须在当前文件中
def __init__(self,name,age):
super().__init__(name,age) #关联父类和子类,使子类拥有父类的所有属性
#super(Doggy,self).__init__(name,age) #在python2.7中需要两个实参
self.color="white" #定义子类特有的属性
#继续在下方定义新的函数即可为子类新增方法,如果父类的某些方法不适用,可以在子类中定义一个同名的方法进行覆盖
self.kind=Kind() #类的属性和方法过多时,可以将其中一部分存储为另一个类,并在原先的类中创建此类的实例
#dog1.kind.func() #类dog1的属性kind是一个类的实例,此行代码可访问kind实例中的func方法
##导入类
from module_name import calss_name1,class_name2,class_name3
import module_name #导入整个模块
from module_name import * #导入模块中的所有类(不推荐)
##python标准库
#python标准库是一组模块,默认安装在python中,其中的函数和类都可以使用。
#比如collections模块中的OrderedDict类,允许创建有序字典
from collections import OrderedDict
case = OrderedDict()
#pymotw.com可以了解python标准库
##----------------------------------------#
##---------------文件读写------------------#
##----------------------------------------#
##读取文件
with open('xxx.txt') as openfile: #with表示当不需要访问文件时会将其关闭
#相对文件路径:'sub_folder\filename.txt' #OS X和Linus系统使用斜杠/而不是反斜杠
#绝对文件路径:'C:\Users\folder\subfolder\filename.txt'
a=openfile.read() #read返回的字符串会多出一个空行
line=[]
for a in openfile: #逐行访问openfile
line.append(a)
line=openfile.readlines() #逐行读取openfile并存储在列表中
##写入文件
with open('xxx.txt','w') as fileobject:
#加入参数'w'表示写入模式;r表示读取模式(默认),a表示附加模式,r+表示读写模式
fileobject.write("write this in the file")
#只能写入字符串;可以用多条以上语句写入多行
#若使用的是附加模式,则源文件的内容不会被清空;写入模式和读写模式都会在返回文件对象前清空文件
##----------------------------------------#
##-----------------异常--------------------#
##----------------------------------------#
#当python运行过程中出现错误时,python会创建一个被称为异常的特殊对象,如果没有对这种异常
#进行特殊处理,程序就会终止并显示一个traceback
#使用try-except对异常进行处理:
try:
print(5/0)
except ZeroDivisionError:
print("Do not divide by zero! ") #如果发现ZeroDivisionError则运行这行代码
#pass #如果不需要做出什么反应,可以在except代码块中使用pass语句
else:
print("Successful") #如果未发现ZeroDivisionError则会运行这行代码
#其他异常:FileNotFoundError
##----------------------------------------#
##-----------------存储数据----------------#
##----------------------------------------#
#json(JavaScript Object Notation) 可以将信息存储在文件中,可以在python程序之间甚至其他语言的程序之间分享数据
import json
with open('xxx.json','w') as f:
json.dump([2,3,4],f) #json.dump将[2,3,4]写入到f代表的文件xxx.json中
#写入json的文件扩展名一般为json
with open('xxx.json','r') as f:
numbers=json.load(f) #json.load将在f中的信息储存到numbers中
网友评论