Python基础
1.输出
print(2 ** 2)
print(" *** ")
print(" +++ ",end=".")
输出:
4
***
+++.
2.数据类型
1.整型(int)
2.字符串(str)
字符串格式化:
-
%:
str % ( )
,即:字符串 % 元组name = "Kit" age = 18 #test = "我是%s,今年%d岁" %("kti",18) test = "我是%s,今年%d岁" %(name,age)
test = "我是%s,今年%d岁" data1 = test %(name,age)
注意:表示百分比时,需要两个%%
-
format
test = "我是{0},今年{1}岁".format("kti",18) test = "我是{},今年{}岁".format("kti",18) #自动占位 test = "我是{name},今年{age}岁".format(name="kti",age=18)
test = "我是{0},今年{1}岁" data1 = test.format("kti",18)
-
f
name = "kit" age = 18 test = f"我是{name},今年{age}岁"
#f的形式可以用于进制转换: data1 = f"我今年{18:#b}岁" #将18转换为二进制
独有方法:
-
判断字符串是否已xx开始或结束:str.startswith(),str.endswith()
data1 = "xx123++" result1 = data1.startswith("xx") # result = True result2 = data1.endswith("++") # result = True
-
判断字符串是否为整数:str.isdecimal()
-
去掉字符串两端的空格、换行与制表符,得到一个新字符串:str.strip()。去掉左端或右端:str.lstrip(),str.rstrip()
#去除指定内容 data1 = "xx123++" result1 = data1.strip("x") # result = "123++" result2 = data1.strip("x+") # result = "123"
-
将字符串转为大写或小写:str.upper(),str.lower()
-
替换字符串内容:str.replace()
data1 = "xx123++" result1 = data1.replace("+","-") # result = "xx123--"
-
切分字符串得到一个列表,或将列表拼接为字符串:str.split()
data = "xx12,3++,4--,5zz" result1 = data.split(',') # result1 = ['xx12', '3++', '4--', '5zz'] result2 = data.split(',',1) # result2 = ['xx12', '3++,4--,5zz'] #切分2个: result3 = data.split(',',2) # result3 = ['xx12', '3++', '4--,5zz'] #从右开始切分:data.rsplit() result4 = data.rsplit(',',1) #result4 = ['xx12,3++,4--', '5zz']
data1 = ['xx12', '3++', '4--', '5zz'] result1 = ''.join(data1) # result1 = "xx123++4--5zz" result2 = '='.join(data1) # result2 = "xx12=3++=4--=5zz"
-
转换字符串的编码类型:str.encode(“utf-8”)
-
字符串居中(左或右):str.center(20,"+"),str.ljust(),str.rjust()
-
零填充:str.zfill()
-
用前缀r,表示字符串中的所有\都不是转义字符,多用于包含较多\的字符串中(如表示路径)
公共方法:
-
得到字符串的长度:len(str)
-
获取字符串中的字符,索引:str[1],反向str[-1]。只能取值,不能修改。
-
获取字符串的子序列,切片:str[0:2],str[ :3],str[2:-1]。只能取值,不能修改。
-
以某一步长取值字符串内容:str[0:7:2]
-
循环
data1 = "xx123++4--5zz" for char in data1 print(char)
3.布尔型(bool):True/False
0与空数据转为布尔型时为False,其他均为True。
4.序列:列表(list)、元组(tuple)与range()
- 列表(list):用方括号[ ]。
- 元组(tuple):用圆括号( ),有序,(只读对象)不可变。
- range(start,stop, step)
序列的通用方法:
-
拼接
-
长度:len()
-
最大项和最小项:max();min()
-
索引:x.index()
-
切片
x = [1,2,3,4] y = x[1:3] # y = [2,3] x从1到3的切片 z = x[0:4:2] # z = [1,3] x从0到4步长为2的切片
列表的特有方法:
-
追加
data1 = [] data1.append("++") # data1 = ['++'] #批量追加1 data2 = [11,22,33] for item in data2: data1.append(item) # data1 = ['++', 11, 22, 33] #批量追加2 #data1.extend(data2) # data1 = ['++', 11, 22, 33]
-
插入
data1 = [111,222,333] data1.insert(0,0) # data1 = [0,111,222,333] data1.insert(5,444) # data1 = [0, 111, 222, 333, 444]
-
删除:data_list.remove(“111”),data_listpop(1)
-
清空列表:data_listclear()
-
根据列表的值获取索引位置:data_list.index(“222”)
-
对列表的数据进行排序:data_list.sort(),#从小到大;data_list.sort(revorse=True),#从大到小
5.集合(set)
用花括号{ },无序,可变,数据不可重复。data = set() #构建一个空集合~
集合的元素只能是int、bool、str、tuple(可哈希)。
6.字典(dict)
键不重复,元素只能是键值对的可变容器。
方法:
-
获取值
data = { "name":"Kit", "age":18 } data1 = data.get("name") # data1 = 'Kit'
-
获取所有键:
data_dict.keys()
-
获取所有值:
data_dict.values()
-
获取所有键值:
data_dict.items()
-
设置值:
data_dict.setdefault()
-
更新键值对:
data_dict.update()
-
移除指定键值对:
data_dict.pop()
3.变量
命名规范:
- 只能由字母、数字、下划线组成
- 不能以数字开头
- 不能用Python内置的关键字
变量命名网站codelf:https://unbug.github.io/codelf
4.注释
单行注释快捷键:ctrl + ?
多行注释为3个引号:“”“ ++++ ”“”
利用TODU,记录下一步的工作
5.输入
data = input()
data1 = input("请输入数据1")
data2 = input("请输入数据2")
print(int(data1)+int(data2))
注意:输入的任何内容都会被认为是字符串类型。
6.条件语句
- 基本语法
if ***:
+++
else:
---
- 多条件判断
if 条件A:
...
elif 条件B:
...
else:
...
7.循环语句
-
while循环
while 条件: ... ... ... #注意break,continue的使用方法 #break,中止循环 #continue,结束本次循环,开始下一次循环
-
for迭代
for item in items: #items可为任何集合
9.函数
def function1():
函数体
def fun(*args,**kwargs):
print(args,kwargs) # *args:传入不定数量参数。**kwargs:以字典形式传入参数
fun(1,2,3,x=4,y=5) # 执行结果为(1, 2, 3) {'x': 4, 'y': 5}
-
lambda定义匿名函数
f = lambda x: x ** 2 print(f(2)) # 4
-
map:映射
10.类和对象
用函数dir()
查看对象的方法和属性。
1.封装
定义一个简单的类
class 类名: # 类名应遵循大驼峰命名法
def 方法1(self,参数列表): # 第一个参数必须为self
pass # 哪个对象调用的方法,self就是哪个对象的引用
def 方法2(self,参数列表):
pass
# 使用这个类创建对象
对象变量 = 类名() # 自动调用__init__方法
注:可以在类的外部给对象增加属性,但不建议使用这种方法。对象具有的属性应封装在类的内部。用__init__
方法来定义一个类具有哪些属性。
class 类名:
def __init__(self):
self.属性名 = 属性初始值
# 初始化时传入参数
class 类名:
def __init__(self,参数列表):
self.属性名1 = 属性参数1
self.属性名2 = 属性参数2
self._属性名3 = 666 # 定义私有属性,外部无法访问
self.__属性名4 = 123 # 防止被子类覆盖,不能在类外调用
def __方法名1(self): # 定义私有方法,外部无法访问
print(self.__属性名3) # 对象的方法内部可以访问私有属性
# 实际上可以用 _类名__方法名1() 访问,不建议
对象1 = 类名(属性1,属性2)
2.继承
子类拥有父类的所有属性和方法。
class 类名(父类名)::
pass
#多继承
class 类名(父类名1,父类名2,父类名3):
pass
继承自父类的方法不能满足需求时,可在子类中重写父类的方法。需要保留父类的方法时,可用# super().父类方法名()
调用父类方法。
子类对象的方法不能直接访问和调用父类的私有属性和方法,但可以调用父类的共有方法间接访问父类的私有属性或方法。
3.多态
不同的子类对象调用相同的父类方法,产生不同的执行结果。
4.类属性和类方法
使用赋值语句在class
关键字下方可以定义类属性。
@classmethod # 类方法需要用修饰器 @classmethod 来标识
def 类方法名(cls): # 在方法内部,可以通过 cls. 访问类的属性或调用其他类方法
pass
5.静态方法
既不需要访问实例属性或调用实例方法,也不需要访问类属性或调用类方法时,可把定义的方法封装为一个静态方法。
不需创建对象就可以通过类名.静态方法名()
的方式调用静态方法。
@staticmethod
def 静态方法名(): # 不需传入参数
pass
11.异常
try: # 捕获异常
尝试执行的代码
except:
出现错误的处理代码
#错误类型捕获
try:
pass #尝试执行的代码
except 错误类型1:
pass #针对 错误类型1 的错误处理代码
except (错误类型2,错误类型3):
pass #针对 错误类型2 和 错误类型3 的错误处理代码
except Exception as result: # 捕获未知异常
print("未知错误 %s" % result)
else:
pass # 没有异常才会执行的代码
finally:
pass # 无论是否有异常,都会执行的代码
异常的传递:当函数/方法执行出现异常,会将异常传递给函数/方法的调用一方,如果一直传递到主函数仍没有异常处理,程序才会被终止。
建议:利用异常的传递性,在主程序中捕获异常。
主动抛出异常:1. 创建一个Exception
对象;2.使用raise
关键字抛出异常对象。
12.模块和包(Package)
# 导入模块
# 定义全局变量
# 定义类
# 定义函数
# 代码最下方
def main():
pass
# 在测试代码时,根据 __name__ 判断是否执行下方代码
if __name__ == '__main__':
main()
import time # 全部导入
print(time.time())
from time import ctime # 部分导入
# from time import *
print(ctime()) # 调用时不用加模块名
-
time模块
time.strftime('%Y-%m-%d %H:%M:%S')
13.文件
操作文件的函数或方法:
file = open("文件名","访问方式") # 打开
text = file.read() # 读取
file.close() # 关闭
文件访问方式:r,w,a,r+,w+,a+.。常用r(只读),w(只写)。