I know, i know 地球另一端有你陪我
一、Python
1、数据容器
类似于 java 中的集合,Python 包含四大数据容器
元组tuple、列表list、集合set、字典dict
1、元祖 tuple
特点:
1、元素类型可以不唯一
2、元素允许重复
3、初始化后,其中元素不可修改
4、输入输出有序
定义:
tuple1 = (1,1,1,2,2,3,4,5,'a',True)
获取:
tuple1[0]
关于元祖推导式
a = (i for i in range(1, 101))
print(a)
不同于其他推导式,元祖推导式返回的是一个生成器 直接打印会输出该生成器的地址 生成器是迭代器的一种,因此可以使用 next() 来遍历 但
2、列表 list
特点:
1、元素类型可以不唯一
2、元素允许重复
3、初始化后,其中元素可以修改
4、输入输出有序
定义:
list1 = [1, 1, 1, 2, 3, 'a', 1.1, True]
切片:
左闭右开,因此右侧需要多取一位,允许自右向左,最右为-1
最后的参数为步长,会从左边的起始位开始移动,默认为1
list1[6:10]
list1[::-1]
修改:
list1[1] = 'A'
增加:
list1.append('last')
list1.insert(3, 1.1)
删除:
list1.pop()
list1.remove(1)
del list1[0]
排序:
list2 = [1, 5, 4, 2, 10, 3, 7, 6, 9, 8]
list2.sort()
list2.sort(reverse=True)
查找(返回索引):
list2.index(7)
合并:
print(list1 + list2)
list1.extend(list2)
反转:
list2.reverse()
统计元素出现次数:
list2.count(1)
清空列表:
list2.clear()
3、集合 set
特点:
1、元素类型可以不唯一
2、元素不允许重复,初始化时会自动去重
3、初始化后,其中元素可以修改
4、输入输出无序
定义:
set1 = {1,1,2,2,3,'a',True}
添加:
set1.add(5)
集合的运算:
set2 = {1, 2, 3, 4, 5, 6}
set3 = {4, 5, 6, 7, 8, 9}
print(set2 & set3)
print(set2 | set3)
print(set2 - set3)
4、字典 dict
特点:
1、每一个元素都是 key :value 格式(类似 java 中的 map)
2、key 不允许重复,且必须不可变(四个基本数据类型,和 tuple),value 随意
3、初始化后,其中元素可以修改
4、没有索引,通过 key 来获取数据
5、key 中,True 和 1 会相互覆盖,False 和 0 会相互覆盖
6、查询速度不会随着元素增多而变慢(key)
定义:
dict1 = {
-1:-1,
2:2,
1:1,
0:0,
True:2,
False:2,
1:3,
0:3
}
获取:
dict1[-1]
dict1.get(-1,'如果key不存在就输出这一句')
dict1.keys()
dict1.values()
dict1.items()
2、选择结构
if elif else
if 表达式1:
代码1(前面四个空格)
代码2(前面四个空格)
elif 表达式2:
代码3(前面四个空格)
...
else 表达式3:
代码4(前面四个空格)
3、循环结构
while 循环(python 中没有 do while)
while 表达式:
循环体代码1
循环体代码2
while i <= 100:
sum += i
i += 1
print(sum)
for 循环(注意左闭右开)
for i in range(1,3):
print('*',end='')
关于一行代码九九乘法表
print('\n'.join('\t'.join('{} * {} = {}'.format(i,j,i*j) for j in range(1,i+1)) for i in range(1,10)))
本质是两个列表推导式的缩写(此处用小括号,所以这里是元祖推导式) 和其他推导式不同的是,元祖推导式返回的是一个生成器,使用方法和迭代器类似
4、文件 IO
读和写都归到 open 函数中
1、读文件
f1 = open("C:/Users/fgh/PycharmProjects/fghPython/day58/source/students.txt", mode='r', encoding='utf8')
print(f1.read(10))
print(f1.readline())
print(f1.readline())
print(f1.readlines())
f1.close()
2、写文件
f2 = open("C:/Users/fgh/PycharmProjects/fghPython/day58/source/stu.txt", mode='w', encoding='utf8')
f2.write("必须传入字符串1\n")
f2.writelines(['一行数据\n', '一行数据\n'])
f2.close()
3、with open(能够嵌套使用,并且会自动关闭通道)
with open("C:/Users/fgh/PycharmProjects/fghPython/day58/source/students.txt", mode="r", encoding='utf8') as f3:
with open("C:/Users/fgh/PycharmProjects/fghPython/day58/source/stu.txt", mode='a', encoding='utf8') as f4:
f4.writelines(f3.readlines())
5、连接 MySQL
import pymysql
conn = pymysql.connect(user='root', passwd='123456', host='master', port=3306, database='student')
cursor = conn.cursor()
t = cursor.execute("select name,age from student where clazz like %s and gender= %s and age > %s", ('理科%', '男','25'))
print("总计记录数:", t)
for i in range(t):
print(cursor.fetchone())
cursor.close()
conn.close()
同样可以使用 with
with pymysql.connect(user='root', passwd='123456', host='master', port=3306, database='student') as conn:
with conn.cursor() as cursor:
nums = cursor.execute("select name,age from student where clazz like %s and gender= %s and age > %s",('理科%','男','25'))
for i in range(nums):
print(cursor.fetchone())
6、日期转换
from datetime import datetime
dt = datetime.strptime("2021-12-13 16:41:38", "%Y-%m-%d %H:%M:%S")
print(dt, type(dt))
print(dt.year)
print(dt.month)
print(dt.day)
print(dt.weekday())
date_str = datetime.strftime(dt, "%Y/%m/%d %H:%M:%S")
print(date_str, type(date_str))
7、函数
'''
不需要访问权限修饰符
也不需要返回值类型
def 函数名(参数1,参数2......):
代码块
代码块
代码块
代码块
# 如果需要返回值
return 返回值
'''
def sum1toN(n1):
sum = 0
i = 1
while i <= n1:
sum += i
i += 1
return sum
res = sum1toN(100)
print(res)
def jieCheng(n):
res = 1
while n >= 1:
res *= n
n -= 1
return res
print(jieCheng(5))
递归函数
'''
尽量避免使用递归函数 能用循环就用循环
递归函数需要满足两个条件:
自我调用
递归出口
'''
def jieCheng2(n):
if n == 1:
return 1
return n * jieCheng2(n - 1)
print(jieCheng2(5))
匿名函数
'''
# lambda 表达式
# lambda 参数1,参数2......:返回值
# 计算x的y次方
'''
def ciFang(x, y):
return x ** y
print(ciFang(2, 3))
n1 = lambda x, y: x ** y
print(n1(2, 3))
8、函数参数的类型
1 位置参数(必选参数) 及平常使用的参数
2 默认参数(可以不传,有默认值)
'''
# 默认参数 y,可以不传
# 计算x的y次方 如果不传入y则默认计算x的2次方
'''
def cifang2(x, y=2):
return x ** y
print(cifang2(2))
print(cifang2(2, 3))
3 可变参数(可以传入仍以数量,转化为 tuple)
'''
# 传入n1,n2 就 返回n1+n2
# 传入n1,n2,n3 就 返回n1+n2+n3
'''
def sumN(*args):
print(args, type(args))
sum = 0
for i in args:
sum += i
print(sum)
sumN(1, 2)
sumN(1, 2, 3)
4 关键字参数(可以不传,底层是 dict)
'''
# 关键字参数,按需要传入
# 传入时一定要写明种类(key)
# 实际会存储为 dict
# 注册函数:
# name、age、addr(可选)、phone(可选)
'''
def register(name, age, **kw):
print(kw, type(kw))
register("张三", '20', addr="大别野", phone="18888888888")
5 命名关键字参数(必须得传,传入时必须要带上对应的key)
'''
# 必须要传入
# 传入时必须要带上对应的key
# 前一个参数有 * ,下一个就是命名关键字参数
'''
def register2(name,age,*,gender):
print(name,age,gender)
register2('fgh','21',gender='男')
print('#' * 100)
def register3(name, age='18', *args, gender, **kw):
print(name, age, args, gender, kw)
register3("小红", '18', gender='女')
register3("小红", '18', 1, 2, 3, 4, 5, 6, 7, gender='女')
二、面向对象
1、类
class Person(object):
def __init__(self, id, name, gender):
self.id = id
self.name = name
self.gender = gender
self.__secret = '这是一个秘密'
def info(self):
print("Person", self.id, self.name, self.gender)
def run(self):
print("我会跑")
def __str__(self):
return "Person类的对象 %s" % self.name
zs = Person('001', '张三', '男')
print(zs)
print(zs.id)
print(zs.name)
print(zs.gender)
print(zs._Person__secret)
zs.info()
class Teacher(Person):
def __init__(self, id, name, gender):
super(Teacher, self).__init__(id, name, gender)
self.professional = 'compute'
def info(self):
print("Teacher", self.id, self.name, self.gender, self.professional)
t1 = Teacher("张老师", "24", "男")
print(t1.id)
print(t1.name)
print(t1.professional)
t1.info()
t1.run()
class Student(Person):
def __init__(self, id, name, gender):
super(Student, self).__init__(id, name, gender)
self.skill = 'play game'
def info(self):
print("Student", self.id, self.name, self.gender, self.skill)
def run(self):
print("我跑的很快")
stu1 = Student("李四", "20", "男")
def runTwice(person: Person):
person.run()
person.run()
runTwice(zs)
runTwice(t1)
runTwice(stu1)
class Duck():
def run(self):
print("鸭子也会跑")
dk = Duck()
runTwice(dk)
class Dog():
pass
dog = Dog()
def run():
print("狗也会跑")
dog.run = run
runTwice(dog)
三、异常处理
a = 1
print(a)
print(int("123"))
list1 = [1, 2, 3]
print(list1[0])
print(list1[1])
print(list1[2])
str1 = 'abcdef'
'''
try:
可能会发生异常的代码
可能会发生异常的代码
可能会发生异常的代码
except 异常1:
异常1发生了该怎么办
except 异常2:
异常2发生了该怎么办
......
else:
没有发生异常就会执行
finally:
不管有没有发生异常都会执行
'''
try:
print("start")
print(10 / 0)
print("end")
except ZeroDivisionError as e:
print(e)
print("请检查除数")
except ValueError as e:
print(e)
print("如果发生了值异常该怎么处理")
else:
print("没有发生异常就会执行")
finally:
print("不管有没有发生异常都会执行")
class AlienError(Exception):
pass
age = int(input("请输入一个年龄:"))
try:
if age < 0 or age > 200:
raise AlienError("发生了外星人异常")
elif age >= 18:
print("成年")
elif age < 18:
print("未成年")
except AlienError as e:
print("捕获到了AlienError异常")
print(e)
|