标识符
- 区分大小写
- 字母、数字、下划线
- 数字不能作为开头
- 不能使用关键字
- 不能使用内置函数
变量
动态类型——变量的类型可以变化
注释
#这是一句注释
模块
访问对应模块的变量
import 模块
print(模块.模块变量)
直接访问对应模块的变量
from 模块import 模块变量
print(模块变量)
直接访问对应模块的变量并取别名
from 模块 import 模块变量 as 别名
print 别名
数据类型
内置类型
- 数字
- 字符串
- 列表
- 元组
- 集合
- 字典
数字类型
整数类型
- type()函数返回对应的数字类型
- 二进制以0b开头
- 八进制以0o开头
- 十进制以0x开头
浮点类型
- e表示10,后面的值表示e的次幂
复数类型
- 实部与虚部结合——1+1i
- (1+1i)+(1+1i)=2+2i
- 类型为complex
布尔类型
- 只有True和False两种情况
- 非零可转换为True——bool(1)
- 空串为False——bool(‘’)
- 非空为True——bool(‘ ‘),即使是空格
隐式数字类型相互转换
布尔转换为整数
a = 1+True
print(a)
整数转化为浮点
a = 1.0+1
print(a)
布尔转换为浮点
a = 1.0+True
print(a)
显式数字类型转换
浮点转整数
a = int(1.0)+1
print(a)
布尔转整数
a = int(True)
print(a)
浮点转整数
a = int(0.9)
print(a)
整数转小数
a = float(1)
print(a)
布尔转小数
a = float(True)
print(a)
算术运算符
加减乘除余
a**b a的b次幂
a//b 小于a/b的最大整数
比较运算符
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
逻辑运算符
not 非
and 于
or 或
位运算符
~ 按位取反
& 按位取与
| 按位取或
^ 按异取位或
>> 右移
<< 左移
if结构
a=int(input("请输入:"))
if a < 0:
print("小于0")
elif a > 0:
print("大于0")
else:
print("等于0")
运行结果:
请输入:0
等于0
while循环
a = 0
while a < 100:
a += 1
print(a)
for循环
for a in range(10):
a += 1
print(a)
else:
print("无了")
跳转语句
break 跳出循环
continue 跳出一次循环
return 返回
序列
概念
- 可迭代、有序
- 下标从0开始
- 正负值索引
H | E | L | L | O |
0 | 1 | 2 | 3 | 4 |
-1 | -2 | -3 | -4 | -5 |
- a[0]=’H’ a[-1]=’H’
- max(a) -> ‘O‘
- min(a) -> ‘H’
- len(a) -> 5
计算
- a*=2 -> ‘HELLOHELLO’
- a+=’WORLD’ -> ‘HELLOWORLD’
切片
- a[1:3] -> ‘EL’
- a[:3] -> ‘HEL’
- a[0:] -> ‘HELLO’
- a[:] -> ‘HELLO’
- a[1:-1] -> ‘ELL’ 掐头去尾
成员测试——存在判断
‘E’ in a -> True
‘e’ not in a -> True
list列表
- 类型可变
- 可进行追加、插入、删除、替换操作
创建列表
- list创建方式 list('hello')
- 类Java数组创建方式 [1,2,3,4]
追加元素
- 单个元素 a.append(5)
- 多个元素 a += [1,2]
- 多个元素 a.extend([1,2])
插入元素
- 在下标为2的地方插入55 a.insert(2,55)
元素替换
- 将下标为2的位置替换成10 a[2] = 10
元素删除
- 删除第一个为10的元素 a.remove(10)
tuple元组
性质
- 不可变序列类型
创建
- a = 1,2,3,4
- a = (‘a’,’b’)
- a = (‘a’,’b’,1,2)
- tuple([1,2,3,4,5])
- tuple(‘hello’) -> ('h', 'e', 'l', 'l', 'o')
元组拆包
- a,b = ('张三',100) -> 张三 100
set集合
概念
- 可迭代
- 无序
- 不可重复
创建
a = set('hello')
a = {1,1,2,2,3,3}
修改
添加
a.add('张三')
删除
a.remove(1)
清空
a.clear()
dick字典
概念
- 可迭代
- 键值对
- 不可重复
创建
- 普通键值对方式
a = {1: "张三"}, {2: "李四"}
- 打包为元组,dick函数通过元组进行创建字典
a = dict(((1, 'a'), (2, 'b'), (3, 'c')))
- 打包为元组,dick函数通过列表进行创建字典
a = dict([(1,'a'),(2,'b'),(3,'c')])
- 列表通过zip打包为元组,通过列表进行创建字典
a = dict(zip([1,2,3],['a','b','c']))
查询
查询单个
a['key']
查询全部信息
a.items()
查询key
a.keys()
查询value
a.values()
修改
a['key'] = 4
删除
a.pop('key')
字符串
转义符
Tab \t
换行 \n
回车 \r
双引 \”
单引 \’
反斜杠 \\
转换
字符转数字
a = int('888')
数字转字符
a = str(888)
占位符
a = 'i*i={}'.format(10)
b = '{0}+{0}+{1}+{1}'.format(1, 2)
格式化控制符
使用
{1:d}
s | 字符串 |
d | 十进制整数 |
F,f | 十进制浮点 |
G,g | 十进制数 |
E,e | 科学计数法浮点数 |
o | 八进制整数 |
X,x | 十六进制整数 |
例子
a = '我今年{0:d}岁'.format(20)
字符串操作
查找
字符串.find(哪个字符,(开始),(结束))
替换
字符串.replace(old,new,(要换的个数,不填默认all))
字符串分割
字符串.split(按此切割,(切割多少次,默认all))
函数
定义函数
概念
- 函数有函数名、参数、返回值
- 类外定义,作用域在此类中
- 嵌套函数:函数中定义
- 方法:在类中定义
结构
def 函数名(形式参数列表)
函数体
return 返回值
例子
def area(width, height):
s = width * height
return s
调用函数
- 根据位置调用
area(2, 2)
- 根据名字调用
area(height=5, width=10)
参数的默认值
注意:不能只设置其中一个
def area(width=5, height=5):
s = width * height
return s
可变函数
基于元组的可变字符串
def adds(*nums):
add = 0
for num in nums:
add += num
return add
print(adds(2, 2, 3, 5, 3, 5))
基于字典的可变字符串
def adds(**nums):
for key, value in nums.items():
print('{0}:{1}'.format(key, value))
adds(a='1', b='2', c='3')
函数变量的作用域
就近原则
作用域改成全局
global a
函数的类型
概念
- 函数类型function
- 函数可作为另一个函数的返回值
- 函数可作为另一个函数的参数
过滤函数——filter
根据方法返回条件,对数据进行过滤操作
def f(x):
return x > 50
data = [10, 20, 30, 40, 50, 60, 70, 80, 90]
filtered = filter(f, data)
print(list(filtered))
映射函数——map
根据方法返回,对数据进行改变
def f(x):
return x * 2
data = [10, 20, 30, 40, 50, 60, 70, 80, 90]
mapped = map(f, data)
print(list(mapped))
lambda函数
def calc(opr):
if opr == '+':
return lambda a, b: (a + b)
else:
return lambda a, b: (a - b)
print(calc('+')(10, 10))
面向对象
创建类
结构
class 类名(父类):
类体
例子
class myFistClass:
pass
创建对象
class myFistClass:
pass
myclass = myFistClass()
类的成员
- 成员变量
- 实例变量
class Student: def __init__(self, name, age): self.name = name self.age = age xiaoming = Student('小明', 18) print('{0}今年{1}岁'.format(xiaoming.name,xiaoming.age))
- 类变量
- 在类中,方法外面定义的变量,不属于对象的变量
- 实例变量
- 构造方法
__init__()用于创建和初始化实例变量
class Student: def __init__(self, name, age): self.name = name self.age = age xiaoming = Student('小明', 18) zhangsan = Student('张三',20)
- 成员方法
- 实例方法
class Student: def __init__(self, name, age): self.name = name self.age = age return def homework(self): return print("{}在做作业".format(self.name)) def work(self, num): return print("{}做了{}份作业".format(self.name, num))
- 类方法
class Student: # 类变量 number = 100 # 类方法 @classmethod def numbers(cls,num): return cls.number+num Student.numbers(5)
- 实例方法
- 属性
def __init__(self, name, age): self.name = name self.age = age return def get_name(self): return self.name def set_name(self, name): return self.name
def __init__(self, name, age): self.name = name self.age = age return @property def name(self): return self.name @name.setter def name(self, name): self.name = name
封装
私有变量
下划线开头的就是私有变量
_number = 100
私有方法
下划线开头的方法就是私有方法
def __init__():
继承
class Animal:
def __init__(self, name):
self.name = name
return
def show_info(self):
return "动物的名字{}".format(self.name)
class Cat(Animal):
def __init__(self, name, age):
super().__init__(name)
self.age = age
return
多继承
class Water:
def __init__(self, account):
self.account = account
return
def show_info(self):
return "有{}千克水".format(10)
class Light:
def __init__(self, account):
self.account = account
return
def shou_info(self):
return "有{}小时的光照".format(10)
class Plant(Water, Light):
def __init__(self, name):
super().__init__(10)
self.name = name
return
异常
异常捕获
结构
except可加多个来处理不同的异常
except方法内页可以传入多个异常来进行处理
try:
可能有异常的语句
except(异常类型):
处理异常
例子
try:
1 / 0
except:
print("错误")
finally
最终的
结构
try:
except :
finally:
自定义异常
class MyException(Exception):
def __init__(self,message):
super().__init__(message)
手动引发异常
用raise来触发异常
try:
a = 1
except:
raise print("错误")
math
数学计算
ceil(x) | 大于等于x的最小整数 |
floor(x) | 小于等于x的最大整数 |
sqrt(x) | x的平方根 |
pow(x,y) | x的y次幂 |
log(x[,base]) | base为底的对数,省略base则是x的自然对数 |
sin(x) | 弧度x的三角正弦 |
degrees(x) | 弧度x转为角度 |
radians(x) | 角度x转弧度 |
时间
datetime | 时间和日期 |
data | 日期 |
time | 时间 |
timedelta | 计算时间跨度 |
tzinfo | 时区信息 |
datetime
参数
year | 年 | |
month | 月 | [1,12] |
day | 日 | [1~当月最大] |
hour | 时(省略) | [0,24) |
minute | 分(省略) | [0,60) |
second | 秒(省略) | [0,60) |
microsecond | 微秒(省略) | [0,1000000) |
tzinfo | 时区 |
例子
import datetime
d = datetime.datetime(2020, 2, 10)
常用方法
- 返回当前本地日期和时间
datetime.datetime.today()
- 返回指定时区的日期和时间
datetime.datetime.now()
- 从1970.1.1开始计算的秒数
datetime.datetime.fromtimestamp(99999999)
date
参数
year | 年 | |
month | 月 | [1,12] |
day | 日 | [1~当月最大] |
方法
- 返回当前日期
d = datetime.date.today()
- 从1970.1.1开始计算的秒数
d = datetime.date.fromtimestamp(999999999)
time
参数
hour | 时(省略) | [0,24) |
minute | 分(省略) | [0,60) |
second | 秒(省略) | [0,60) |
microsecond | 微秒(省略) | [0,1000000) |
tzinfo | 时区 |
timedelta
参数
days | 天 |
seconds | 秒 |
microseconds | 微秒 |
milliseconds | 毫秒 |
minutes | 分钟 |
hours | 小时 |
weeks | 周 |
用法
d = datetime.date.today()
d += datetime.timedelta(10)
类型转换
- 日期转字符
d.strftime('%Y-%m-%d %H:%M:%S')
- 字符转日期
datetime.datetime.strftime(d, '%Y-%m-%d %H:%M:%S')
正则表达式
字符串匹配
import re
a = r'\w+@a\.com'
b = 'abc123@a.com'
c = re.match(a, b)
print(c)
字符串查找
返回查找的第一个
re.search(a, b)
返回所有查找的列表
re.findall(a, b)
字符串替换
# 字符串替换
p = r'\d+' # 匹配数字
text = 'as12das56f1253f4qw'
r_text = re.sub(p, '', text)
print(r_text)
r_text = re.sub(p, '', text, count=1)
print(r_text)
r_text = re.sub(p, '', text, count=2)
print(r_text)
字符串分割
p = r'\d+'
text = 'as12das56f1253f4qw'
splited = re.split(p,text)
print(splited)
文件操作
打开文件
参数
open(file,mode='r',encoding=None,errors=None)
file:file参数用于表示要打开的文件,可以是字符串或整数
mode:用于设置文件打开模式
- t:文本方式
- b:二进制
- r:只读
- w:只写;文件不存在,创建文件;文件存在就覆盖文件
- x:独占模式打开文件,文件不存在,调用w,文件存在引发FileExistsError异常
- a:追加模式,文件不存在创建文件,文件存在末尾追加
- +:更新模式,需与r、w、a组合使用
encoding:用来指定打开文件时的文件编码,默认编码是UTF-8编码,主要用于打开文本文件。
errors:用来指定在文本文件发生编码错误时如何处理。推荐errors参数的取值为'ignore',表示在遇到编码错误忽略错误,程序继续执行。
关闭文件
close()