Python_note
pycharm的便捷方式:
alt+shift+alt+鼠标左键
ctrl+home
光标移到第一行
ctrl+end
光标移到最后一行
ctrl+g
输入要跳转的行数
字符串格式化
1
| message = "Python是%s的编程语言,能让我们%s" %(num1, num2)
|
精度控制
1
| print("数字11.345宽度限制7,小鼠精度2,结果:%7.3f" % num)
|
输入
1
| name = input("你是谁?") # 输入的都是字符串
|
List
(列表)有序的可变序列
Tuple
(元组)有序的不可变序列
Set
(集合)无序不重复集合
Dictionary
(字典)无需Key-Value集合
条件、循环语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| """ 条件 """ if a>b : elif a<b: else: """ 循环 """ while i < 100:
|
可嵌套,保持缩进即可
1 2
| import random num = random.randint(1,100)
|
1 2 3 4 5
| name = "it" for i in name: range(num1, num2, step)
|
函数说明文档规范
1 2 3 4 5 6 7
| def func(x, y): """ 函数说明 :param x:形参x的说明 :param y:形参y的说明 :return:返回值的说明 """
|
全局
容器常用函数
如果要定义任何空的容器,就用他们的名字 set_empty = set()
序列
< 列表、元组、字符串 > – 序列
可以使用切片
列表
list = [1,2,3]
特性:
- 上限 2**63-1
- 混装
- 有序
- 允许重复
- 可以修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| list.index(元素)
list[0] = 1
list.insert(1,"best")
list.append(元素)
mylist2 = [1,2,3] list.extend(mylist2)
del list[2] -- 删除元素 element = list.pop(下标) -- 删除同时,取出
list.remove(元素)
list.clear()
list.count(元素)
len(list)
|
元组
tuple = (1, 2, 3)
特性:
- 不可修改
- 如果是元组里嵌套了List,则可以修改
1 2 3 4 5 6
| list.index(元素)
list.count(元素)
len(list)
|
字符串
item = "hello"
特性:
- 无法修改
- 只能存储字符串
1 2 3 4 5 6 7 8 9 10 11
|
new_str = str.replace() -- 是一个新字符串
list = str.split(" ")
str.strip()
str.strip("12") -- 按照单个字符,都会去掉
|
集合
set = {1,2,3}
特性:
- 无序 (不支持下标访问)
- 允许修改
- 去重
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| set.add()
set.remove(元素)
set.claer()
set.pop()
集合1.difference(集合2) -- 集合1,2保持不变,得到一个新集合
集合1.difference_update -- 集合1修改,集合2保持不变
集合1.union(集合2) -- 得到新集合
|
字典
dict = {"苏嘉莉":99, "苏小弟":98}
特性:
- 不能用下标,但能用Key,不能while
- 重复后,新盖旧
- 可以是任意数据类型,但Key不能是字典
1 2 3 4 5 6 7 8 9 10
| dict[Key]
dict[Key] = Value
dict.pop(Key)
dict.keys()
|
通用操作
1 2 3 4 5 6 7 8 9 10 11
| max() min()
list() str() tuple() set()
sorted(容器,[reverse = True]) -- 加上True就会从大到小
|
函数
返回值
1 2 3
| def test_return(): return 1, 2 x, y = test_return()
|
- 支持不同类型数据返回
传参
- 位置参数在前,且匹配参数顺序
不定长
1 2 3 4
| def user_info(*args)
def user_info(**kwargs)
|
函数参数
函数也可作为参数传入,计算逻辑的传递,而非数据的传递。
匿名函数
特性:
- 只能单行函数体
- 只能使用一次
1
| test_func(lambda x,y: x+y)
|
文件
读取
- r 只读,默认
- w 写入
- a 追加
1
| open(文件名/路径, 'r', encoding="UTF-8")
|
文件不存在会创造文件
1 2 3 4 5 6 7 8 9
| f.read(num) f.readlines() f.readline() f.close()
with open("p.txt","r") as f: f.readlines()
|
写入
1 2 3 4 5
| f.open() f.write("内容") f.flush()
|
异常
1 2 3 4 5 6 7 8 9 10 11 12
| try: pass except: pass
try: pass except (NameError,ZeroDivsionError) as e: print("...") finally:
|
异常具有传递性,如果最高级最后都没有抛出异常,就会报错。且异常处就不再继续。
模块
1 2 3 4 5 6
| __all__ = ['test_a']
if __name__ == '__main__': pass
|
包
JSON
- 列表内嵌套字典
- 字典
1 2 3 4 5
| import json
data = json.dumps(data, ensure_ascii=False)
data = json.loads(data)
|
pyecharts
全局配置
1 2 3 4 5 6 7
| line.set_global_opts( title_opts = Title0pts("测试", pos_left="center", pos_botton="1%"), legend_opts = Legend0pts(is_show=True), toolbox_opts = Toolbox0pts(is_show=True), visualmap_opts = VisualMap0pts(is_show=True), tooltip_opts = Tooltip0pts(is_show=True), )
|
类
成员方法
self
必须写
- 使用
self
来访问类的成员变量
直接传参
- 自动执行
- 构造类传入的参数会自动提供给__init__
1 2 3 4 5 6 7 8 9 10
| class student: name = None age = None def __init__(self, name, age): self.name = name self.age = age stu = Student("周杰伦", 31)
|
类内置,魔术方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Student: def __str__(self): return
stu = Student("周杰伦", 31) print(stu)
def __lt__(self, other): return self.age < other.age
stu1 = Student("周杰伦", 31) stu2 = Student("周杰", 21) print(stu1 < stu2)
def __le__(self, ohter): return pass
def __eq__(self, other): return self.age == other.age
|
封装
1 2 3
| __current = None def __keep(self): pass
|
- 私有对象/成员方法,我们的类对象没办法直接使用
- 私有成员,其他成员可以使用
继承
1 2 3 4 5 6 7 8
| class 类名(父类名): 类内容体
class 类名(父亲1, 父亲2, ...): 类内容体
|
复写
复写后调用父类同名成员
1 2 3 4 5 6 7
| -- 方法1
父类名.成员变量 super().成员变量
父类名.成员方法(self) super().成员方法()
|
类型注解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| -- 语法1
var:int = 10
class Student: pass stu: Student = Student()
-- 简略 -- 详细 my_list : list[int] = [1, 2, 3] my_tuple: tuple[str, int ,bool] my_set: set[int] my_dict: dict[str, int]
-- 语法2
|
- 元组类型详细注解,需要每个元素都标记出来
- 字典类型详细注解,需要2个类型
- 无法直接看出变量类型才需要
1 2
| def func(data:list) -> list: pass
|
定义联合类型注解
1 2 3 4
| from typing import Union my_list: list[Union[str, int]] = [1, "list"]
def func(data: Union[int, str]) -> Union[int, str]:
|
多态
抽象类
父类用pass定义抽象方法,在子类实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| class AC: def cool_wind(self): """制冷""" pass def hot_wind(self): """制热""" pass def swing_l_r(self): """左右摇摆""" pass class Midea_AC(AC): def cool_wind(self): print("美的空调制冷") def hot_wind(self): print("美的空调制热") def swing_l_r(self): print("美的空调左右摆风") class GREE_AC(AC): def cool_wind(self): print("格力空调制冷") def hot_wind(self): print("格力空调制热") def swing_l_r(self): print("格力空调左右摆风") def make_cool(ac:AC): ac.cool_wind() midea_ac = Midea_AC() gree_ac = GREE_AC()
make_cool(midea_ac) make_cool(gree_ac)
|
SQL
- 数据定义:DDL
- 数据操纵:DML
- 数据控制:DCL
- 数据查询:DQL
Python - - 数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| from pymysql import Connection
conn = Connection( host='localhost', port=3306, user='root', password='Su.040121' )
cursor = conn.cursor() conn.select_db("data") cursor.execute("CREATE TABLE test_pymysql(id INT, info VARCHAR(255))") conn.close()
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
from pymysql import Connection
conn = Connection( host='localhost', port=3306, user='root', password='Su.040121' ) cursor = conn.cursor() conn.select_db("data") cursor.execute("SELECT * FROM 留存率")
results: tuple = cursor.fetchall() for r in results: print(r) conn.close()
|
pymysql
进行数据更改的SQL
语句需要提交更改,通过代码来”确认”。
1 2 3 4 5 6 7 8 9
| -- 方法1 conn.execute(插入语句) conn.commit()
-- 方法2 conn = Connection( ... autocommit = True )
|
PySpark
- 进行数据处理
- 提交到Spark集群进行分布式集群计算
编程模型
- 数据输入
- 数据处理计算
- 读取数据转换为
RDD
对象,调用RDD
的成员方法完成计算
- 数据输出
- 调用
RDD
的数据输出相关成员方法,输出到list、tuple、dict、txt
和database
里面