asp网站数据库连接,网站建设怎么赚钱,建网站费用,桂林建站平台哪家好目录 Python的基本语法
逻辑结构
函数
列表
元组
字符串
切片操作
集合
字典
enumerate
文件
异常
模块和包
json和pyecharts
面向对象
连接mysql Python的基本语法
定义变量的语法#xff1a; a 10 a b c 20
注释#xff1a; #
python在第一行可…目录 Python的基本语法
逻辑结构
函数
列表
元组
字符串
切片操作
集合
字典
enumerate
文件
异常
模块和包
json和pyecharts
面向对象
连接mysql Python的基本语法
定义变量的语法 a 10 a b c 20
注释 # python在第一行可以指定文件的编码格式#coding:gbk
数据类型int, float, bool, str
输出系统的关键字 import keyword print(keyword.kwlist)
查询对象所存储的内存地址id(obj)
查询对象的数据类型type(obj)
将其他数据类型转为字符串str(obj)
将其他数据类型转为整数int(obj)
将其他数据类型转为浮点数float(obj)
格式化输出 print(name, 200, 30) print(我的名字是%s, 今年%d岁了 % (name, age))
输入 password input(请输入你的密码) print(你的密码是 % password)
运算符 // 整除 num 10 // 4 ** 次方 num 2 ** 5
布尔运算符 not, and, or is:比较两个对象的内存地址是否相同 print(a is b) not is:两个对象的内存地址是否不相同 print(a not is b) in:一个字符串是否在另一个字符串里面 print(a in abcd) not in:一个字符串是否不在另一个字符串里面 print(a not in abcde)
系列解包赋值 a,b,c 20,30,40
位运算符 |
逻辑结构
获取对象的布尔值bool(obj)
以下对象的布尔值为False其他任何对象的布尔值都为True False 数值0 None 空字符串空列表空元组空字典空集合
单分支结构的语法 if 布尔表达式 python语句
双分支结构的语法 if n % 2: print(111) else: print(222)
多分支结构的语法 if score 100: print(A) elif score 90: print(B) elif score 80: print(C) else: print(D)
三目运算 表达式1 if 条件 else 表达式2 条件成立执行表达式1不成立执行表达式2
pass语句什么都不做只是一个占位符
range()函数的使用 三种创建range对象的方式 三个参数分别是startstopstep rrange(10) #创建一个[0,9]之间的整数序列步长为1 print(list(r)) #打印内容 rrange(1,6) #创建一个[1,5]之间的整数序列步长为1 print(list(r)) #打印内容 rrange(1,20,3) #创建一个[1,4,7....19]之间的整数序列步长为3 print(list(r)) #打印内容 返回值是一个迭代器对象range类型的优点不管range对象表示的整数序列有多长所有range对象占用的内存空间都是相同的因为仅仅需要存储startstop和step只有当用到range对象时才会取计算序列中的相关元素in与not in 可以判断整数序列中是否存在指定的整数range(n)会生成[0,n)的数据序列range(a,b)会生成[a,b)的数据序列range(a,b,step)会生成[a,b)的数据序列步长为step
# while循环的使用
sum0
n0while n100:sumnn1print(sum)# for-in循环的使用
for item in python:print(item)for item in range(10):print(item)item就是一个变量
#如果在循环体中不需要使用到自定义变量可将自定义变量写为_
for _ in range(5):print(人生苦短我用python)# else和for循环和while循环的使用 当循环不是被break语句退出时 才可以执行else中的语句
for item in range(3):pwdinput(请输入您的密码)if pwd 8888:breakelse:print(密码错误请重新输入)
else:print(三次密码都输入错误账号锁定)n3
while n0:pwd input(请输入您的密码)if pwd 8888:breakelse:print(密码错误请重新输入)n-1
else:print(三次密码都输入错误账号锁定)
函数
# 函数的定义函数可以嵌套定义函数
def 函数名(传入参数): 函数体 return 返回值#函数的注释有特定的位置书写要求要写在函数名字的下方#查看函数的文档注释可以使用函数help(函数名)# 有参函数
def add(a,b): print(a b)# 想要在函数内部修改全局变量的值
def fun1(): 需要先用global声明这个变量为全部变量才能修改global nn 200缺省参数 形参在函数定义的时候给形参一个默认值这个形参就是缺省参数。注意点缺省参数要写在普通参数的后边特点在函数调用的时候如果给缺省参数传递实参值使用的是传递的是实参值如果没有传递使用默认值。
# 关键字传参可以不按照参数的定义顺序传参
def fun7(name,age):print(name)print(age)fun7(age20,namerose)# 不定长参数
# 在形参前边加上一个*该形参变为不定长元组形参可以接收所有的位置实参
# 在形参前边加上两个*该形参变为不定长字典形参可以接收所有的关键字实参
def fun(*args,**kwargs): print(args)print(kwargs)fun(1,2,3,4,5)
fun(a1,b4,c8)# 函数没有返回值默认返回None# 函数返回多个值返回值可以直接返回任何类型以及多个数据用逗号分隔即可
def fun6(): return 2,666n1,str5 fun6()
print(f{n1}{str5})# 函数作为函数参数def test(add):sum add(10,20)print(sum)def add(n1,n2):return n1n2test(add)# 函数的定义中
# def关键字可以定义带有名称的函数
# lambda关键字可以定义匿名函数(无名称)
# 有名称的函数可以基于名称重复使用
# 无名称的匿名函数只可临时使用一次
# 语法:
# lambda 传入参数: 函数体(一行代码)def test(add):sum add(10,20)print(sum)
test(lambda x,y: x y)列表
列表是python中的一种数据类型可以存放多个数据列表中的数据可以是任意类型的
列表list定义使用[]
# 两种创建列表的方式
list1 [hello,100,True]; list2 list([100,222.22,world])# 获取列表的长度
list1 [1,2,3]
print(len(list1))# 索引的范围
# 正向索引从0到N-1
# 逆向索引从-N到-1
# 指定索引不存在抛出IndexError
列表的特点 列表元素按顺序有序排序索引映射唯一数据列表可以存储重复数据任意树类型混存根据需要动态分配和回收内存 获取列表中指定元素的索引obj.index() 如查找列表中存在N个相同元素只返回相同元素的第一个元素的索引如果查询的元素在列表中不存在则会抛出ValueError还可以在指定的start和stop之间进行查找
获取列表中的多个元素切片操作 语法 obj[start:stop:step]切片的结果 原列表片段的拷贝step默认为1简写为 [start:stop]step为正数从start开始往后计算切片 [:stop:step] 切片的第一个元素默认是列表的第一个元素[start::step] 切片的最后一个元素默认是列表的最后一个元素 step为负数从start开始往前计算切片 [:stop:step] 切片的第一个元素默认是列表的最后一个元素[start::step] 切片的最后一个元素默认是列表的第一个元素
# 列表的遍历
for item in obj print(item)列表的添加操作 append()在列表的末尾添加一个元素如果添加的是列表添加的就是列表这一个元素extend()在列表的末尾至少添加一个元素如果添加的是列表添加的就是列表里面的全部元素insert()在列表的任意位置添加一个元素当前位置以及以后的元素都后移一位切片obj[1:] [hello,222] 切片的数据只能是列表添加后原来位置以及后面的元素都会消失 列表的删除操作 remove(value)一次删除一个元素重复元素只删除第一个元素不存在抛出ValueErrorpop(index)删除一个指定索引位置上的元素指定索引不存在抛出IndexError不指定索引删除最后一个元素切片obj[1:] [] 将指定下标以及之后的元素全部删除clear()清空列表del del list1[3] 删除元素
列表的修改操作 obj[1:3] [100,200,300,400,500]将列表下标[1,3)的数据全部替换为 后面的数据 列表的查询操作 int index(value)根据数据值查找元素所在的下标找到返回元素的下标没有找到程序报错int count(value)查询数据出现的次数invalue in list1 存在则返回True 列表的排序操作 调用sort方法列表中所有元素默认按照从小到大的顺序进行排序可以指定reverseTrue进行降序排序调用内置函数sorted()可以指定reverseTrue进行降序排序原列表不发生改变new_list sorted(list1)
# 列表的逆置
list2 list1[::-1] 列表生成式
list1 [I * 2 for I in range(1,10)]
元组
什么是元组 Python内置的数据结构之一是一个不可变序列 创建元组的方式 直接小括号 t (Python,100,True)使用内置函数tuple()t tuple((hello,11.11))只包含一个元组的元素需要使用逗号和小括号t (100,) 为什么要将元组设计成不可变序列 在多任务环境下同时操作对象时不需要加锁因此在程序中尽量使用不可变序列 元组中存储的是对象的引用 如果元组中对象本身不可变则不能在引用其他对象。如果元组中的对象时可变对象则可变对象的引用不允许改变但数据可以改变。
# 元组的遍历
t1(python,100,True) for item in t1:print(item)字符串
# 字符串的定义
s1 abc
s1 abc
s1 abc
s1 abc # 用下标访问字符
s1 abcd
print(s1[2])# 获取字符串的长度
s1 abcddd
print(len(s1))字符串的常见操作 int find(sub_str,start,end):找子串 返回下标 找不到返回-1int rfind(sub_str,start,end):从后面开始找子串 返回下标 找不到返回-1int index(sub_str,start,end):找子串 返回下标 如果找不到就报错int rindex(sub_str,start,end):从后面开始找子串 返回下标 如果找不到就报错int count(sub_str,start,end):统计子串出现的次数str replace(old_str,new_str,count):替换对应字符串不改变原字符串返回新的字符串默认全部替换列表 split(sub_str,count):默认用空格切割全部切割列表 rsplit(sub_str,count):从后面开始 默认用空格切割全部切割str join(str):当执行 _.join(hello)后 返回h_e_l_l_o 每两个元素都插入一次
切片操作
切片是对操作的对象截取其中一部分的操作 切片的语法变量[start:end:step]会得到一个新的字符串start开始位置的下标end结束位置的下标不包含end对应的下标step步长下标之间的间隔默认是1start的位置也可以省略不写表示是0end的位置也可以不写表示整个字符串的长度但冒号不能省略 print(s1[::-1]) 字符串逆向输出
list1[:3]取前三个数据
集合
什么是集合 Python语言提供的内置数据结构与列表字典一样都属于可变类型的序列集合是没有value的字典
# 集合的创建
set1{pyhotn,100,True}print(set1)集合的相关操作 集合元素的判断操作 in 或 not in 集合元素的新增操作 调用add()方法一次添加一个元素调用update()方法至少添加一个元素如果添加的是列表则添加的是列表中的元素 集合元素的删除操作 调用remove()方法一次删除一个指定元素如果指定的元素不存在则抛出KeyError调用discard()方法一次删除一个指定元素如果指定的元素不存在则不抛出异常调用pop()方法一次只删除一个任意元素调用clear()方法清空集合
集合间的关系 两个集合是否相等 可以使用运算符 或 ! 进行判断 一个集合是否是另一个集合的子集 可以调用方法issubset进行判断B是A的子集 一个集合是否是另一个集合的超集 可以调用方法issuperset进行判断A是B的超集 两个集合是否没有交集 可以调用方法isdisjoint进行判断
s1{10,20,30,40,60}
s2{10,20,30,99}#交集
print(s1.intersection(s2))
print(s1s2)#并集
print(s1.union(s2))
print(s1|s2)#差集
print(s1.difference(s2))
print(s1-s2) #s1-(s1|s2)#对称差集
print(s1.symmetric_difference(s2))
print(s1^s2)
# 集合的定义式
s {I * I for I in range(10)}
print(s)字典
# 创建字典的两种方式
scores{张三:100,李四:99,王五:80}
print(scores)d1dict(name张三,age20)
print(d1)# 字典中元素获取的两种方式
scores{张三:100,李四:99,王五:80}
# []取值与使用get()取值的区别
# []如果字典中不存在指定的key抛出keyError异常
print(scores[张三])
# get()方法取值如果字典中不存在指定的key返回None
# print(scores.get(张三))字典的增删改查操作 判断key是否存在 print(张三 in dict1)删除元素 del dict1[张三]添加元素 dict1[小王] 100清空字典dict1.clear() 获取字典视图的三种方式 keys()获取字典中所有keyvalues()获取字典中所有valueitems()获取字典中所有keyvalue对
score{张三:100,李四:80,王五:10}for item in score.keys():print(item)for item in score.values():print(item)for item in score.items():print(item)for k,v in score.items():print(k,v)字典的特点 字典中的所有元素都是一个key-value对key不允许重复value可以重复字典中的元素是无序的字典中的key必须是不可变对象字典也可以根据需要动态的伸缩字典会浪费较大的内存是一种使用空间换时间的数据结构
# 字典生成式
items[Fruits,Books,Others]
prices[100,50,90]dict1{item:price for item,price in zip(items,prices)}print(dict1)enumerate
list1 [a,b,c]
# 将可迭代对象所在的下标和具体元素组合在一起变成元组
for i in enumerate(list1)
print(i)
文件
f open(file1.txt,moder,encodingutf-8)
buf f.read()
print(buf)
f.close()
文件操作的三大步骤 1、打开文件open()2、读文件 文件对象.read()3、关闭文件 文件对象.close() 读文件操作 open(file,moder,encodingNone)file要操作的文件名字类型是strmode文件打开的方式r只读打开w只写打开a追加打开encoding文件的编码格式常见的编码格式有两种一种是gbk一种是utf-8返回值文件对象后序所有的文件操作都需要通过这个文件对象进行
写文件操作 1、打开文件方式用w文件不存在会创建文件文件存在会覆盖清空原文件2、写文件 文件对象.write(写入文件的内容)3、关闭文件
# codinggbk
f open(a.txt,w,encodingutf-8)
f.write(你好)
f.close()
# 追加操作
# codinggbk
f open(a.txt,a,encodingutf-8)
f.write(hello world)
f.close()# read(capacity)方法参数为整形读几个字节
# readLines()按行读取一次读取所有行列表中的每一项是一个字符串即一行的内容# 读取大文件的方法
# 按行读
# codinggbk
f open(a.txt,r,encodingutf-8)
while True:buf f.readline()if buf:print(buf,end)else:breakf.close()# 按字节读
# codinggbk
f open(a.txt,r,encodingutf-8)
while True:buf f.read(10)if buf:print(buf,end)else:breakf.close()
文件和目录的操作 对文件和目录的操作需要导入os模块 import os1、文件重命名os.rename(原文件路径名新文件路径名)2、删除文件os.remove(文件的路径名)
异常
# 捕获异常的代码
try:可能出现异常的代码
except 异常类型:处理代码# 捕获异常的代码
try:可能出现异常的代码
except 异常类型:处理代码# 捕获多个异常
try:code
except (ZeroDivisionError,ValueError) :code# 显示异常信息
try:可能出现异常的代码
except ValueError as e:print(e)# 捕获所有异常
try:code
except Exception as e:code# 异常的完整结构
try:可能发生异常的代码
except Exception as e:发生异常执行的代码print(e)
else:代码没有发生异常会执行
finally:不管有没有发生异常都会执行# 异常具有传递性当所有函数都没有捕获异常的时候程序就会报错
模块和包
# 使用模块的方法模块就是一个python文件就是一个工具包import 模块名
模块名.功能名from 模块名 import 功能名from 模块名 import *import 模块名 as 别名from 模块名 import 功能名 as 别名# 起别名如果使用了as别名就不能再使用原来的名字了
import my_module as mm1什么是包 功能相近或者相似的模块放在一个目录中并在目录中定义一个__init__.py文件这个目录就是包
# 如何导入包内的模块
import 包名.模块名 as 别名 别名可有可无# main函数
if __name__ __main__:print(main start)# __all__ [fun1,fun2]
__all__出现在模块里表示外部文件导入该模块时只能使用列表里面的函数
json和pyecharts
什么是json json是一种轻量级的数据交互格式。可以按照json指定的格式取组织和封装数据json本质上是一个带有特定格式的字符串
import json
data [{name:张三,age:11},{name:李四,age:20},{name:王五,age:15}]
print(data)
# 不使用ASCII码
data json.dumps(data,ensure_asciiFalse)
print(data)
data json.loads(data)
print(data)
# https://gallery.pyecharts.org/#/ 该网站用python代码画图 称为画廊from pyecharts.charts import Line
line Line()line.add_xaxis([中国,美国,英国])line.add_yaxis(GDP,[30,20,10])line.render()
面向对象
# 创建类的方式
class Dog(object):name None
class Dog():name Noneclass Dog:name None# 对象的创建添加属性
dog Dog()
# 给对象添加属性
dog.name 大黄
dog.age 20# 修改属性值和添加一样存在就是修改不存在就是添加
dog.age 2
# 类的行为成员方法
class Student:name Nonedef say_hi(self):print(Fhi,{self.name})stu1 Student()
stu1.name 张三stu1.say_hi()self 作为类中方法的第一个形参再通过对象调用方法的时候不需要手动的传递实参值是python解释器自动将调用该方法的对象传递给self所以self这个形参代表的是对象。self就是一个形参的名字可以写成其他的形参名一般不修改这个名字。 魔法方法 在python的类中有一类方法这类方法以两个下划线开头和两个下划线结尾并且在满足某个特定条件的情况下会自动调用这类方法称为魔法方法。
__init__()成员方法作为构造方法使用 调用时机在创建对象之后会立即调用。1、用来给对象添加属性给对象属性一个初始值(构造函数)2、代码的业务需求都需要执行的代码可以写在这个方法中注意点如果这个方法中有除了self之外的形参那么在创建对象的时候需要给额外的形参传递实参值。 __str__()方法类似于toString()方法 调用时机 1、print(对象)会自动调用__str__()方法打印输出的结果是__str__方法的返回值2、str(对象)类型转换将自定义对象转换为字符串的时候会自动调用 应用 1、打印对象的时候输出一些属性信息2、需要将对象转换为字符串类型的时候 注意点方法必须返回一个字符串
__lt__()方法用于比较两个对象的大小 __le__()方法用于比较大于等于和小于等于__eq__()方法用于比较是否等于重写该成员方法自定义两个对象的比较条件
class Student:name Noneage Nonedef __init__(self,name,age):self.name nameself.age agedef __lt__(self,other):return self.age other.agestu1 Student(张三,20)
stu2 Student(李四,30)print(stu1 stu2)
__del__()方法类似于gc机制 析构函数调用时机 对象在内存中被销毁删除的时候(引用计数为0)会自动调用__del__方法1、程序代码运行结束在程序运行过程中创建的所有对象和变量都会被删除销毁2、使用del 变量将这个对象的引用计数变为0会自动调用__del__()方法 应用场景 对象被删除销毁的时候要书写的代码可以写在__del__()中。 引用计数 是python内存管理的一种机制是指一块内存有多少个变量在引用1、当一个变量引用一块内存的时候引用计数加12、当删除一个变量或者这个变量不再引用这块内存引用计数减13、当内存的引用计数变为0的时候这块内存被删除内存中的数据被销毁
私有属性 只需要在原属性名前加上两个下划线目的保证数据的相对安全想要访问和使用私有属性定义get和set方法进行访问 私有方法 在方法的前边加上两个下划线私有方法不能在类外部访问作用一般作为类内部的方法使用不让在外部直接调用
# 继承的基本语法
class Animal(object)代码
# Dog继承了Animal
class Dog(Animal)代码# 想要在子类中调用父类的同名方法
父类名.方法名(self,其他参数)super().方法名()# 多继承语法
class A(B,C) 继承了B和Cpassclass Student:name Noneage Nonevar: int 10
my_list: list [1,2,3]
my_object: Student Student() var_1 20 # type: int
ver_2 100 # type: int
# 在注释中使用注解def fun(x: int,y: int):return x yprint(fun(10,20))
# 在形参中使用类型注解def fun2(data: list) - list:return dataprint(fun2([1,2,3]))
# 对返回值进行注解类方法 使用classmethod修饰的方法称为类方法第一个参数为cls代表的是类对象自己 静态方法 使用staticmethod修饰的方法称为静态方法
什么是多态
多态指的是同一个行为使用不同的对象获得不同的状态。
定义函数通过类型注解声明需要父类对象实际传入子类对象进行工作从而获得不同的工作状态。 什么是抽象类
包含抽象方法的类称之为抽象类。抽象方法是指没有具体实现的方法称为抽象方法 抽象类的作用
多用于做顶层设计以便子类做具体实现。
也是对子类的一种软性约束要求子类必须复写父类的一些方法。
并配合多态使用获得不同的工作状态。
连接mysql
from pymysql import Connection
#获取到mysql数据库的连接对象
connConnection(hostlocalhost,port3306,userroot,password1212
)
#打印mysql数据库软件信息
print(conn.get_server_info())#获取到游标对象
cursorconn.cursor()
#选择数据库
conn.select_db(test)
#执行sql
#cursor.execute(createtabletest_pymysql(idint);)
cursor.execute(select*fromtab1)
resultcursor.fetchall()
print(result)
#cursor.execute(insertintotab1values(20,rose);)
#提交事务
conn.commit()
#关闭到数据库的连接
conn.close()