Python
2022-02-10 14:45:12 0 举报
AI智能生成
Python的基础语义
作者其他创作
大纲/内容
安装
https://www.python.org/
安装后的目录
IDE设置python的模板
注释类型
单行注释
以#开头
多行注释
使用一对 ''' 三个单引号
''' 多行注释<br>多行注释'''
中文编码声明
# coding:utf-8
数据类型
int、float、布尔、str
变量定义,内存中的保存形式
name='berek' , id(name), type(name), print(name)
float类型
<br>
布尔类型
例如:print(0) 输出为False,除上述情况外,都是True
类型转换str()、int()、float()
name='王五'<br>age=20<br># int转为string<br>print('我是:'+ name + ";今年"+str(age)+"岁!")
转义字符
# 转义字符<br>print('hello\nworld')<br>print('hello\tworld')<br>print('helloooo\tworld') # \t 四位一个制表符,满4位重开,不满四位补足<br>print('hello\rworld') # \r 回到头不输出后面的内容<br>print('hello\bworld') # \b 是退一个格,将o删除了<br>print('http:\\\\www.baidu.com')<br>print('you say:\'hello\'')
函数
input函数
键盘输入
输入值为str
如要转换,需用类型转换,如 int(input("第一个数字:"))
print(2**3) # 2的3次方<br>print(9//4) # 整除<br>print(9%4) # 余数<br><br>a,b,c = 20,30,40 # 解包赋值<br>a,b = b,a #交换<br>print(a,b)
结构
if
<br>
子主题
<br>
print( 1 if 1<2 else 2 )
# money = 1000<br># s = int(input("请输入取款金额:"))<br># if money>s:<br># money=money-s<br># print("余额:",money)<br># elif s==1000:<br># print("正好")<br># else :<br># print("余额不足")<br><br># print('if的条件表达式','true 执行左边的结果,false 执行右边的结果')<br># print("余额:"+str(money-s) if money>s else "余额不足")
while
<br>
b=1<br>sum2=0<br>while b<=100:<br> if not bool(b%2): # if b%2==0: bool(0) == false<br> sum2+=b<br> b+=1<br>print(sum2)
range
r=range(10) #默认从0开始, 默认步长为1 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]<br>print(r) #range(0,10)<br>print(list(r)) #用于查看range对象中的整数序列<br><br>r=range(2,10) #默认从2开始到10结束, 默认步长为1 [2, 3, 4, 5, 6, 7, 8, 9]<br>print(list(r)) #用于查看range对象中的整数序列<br><br>r=range(3,10,2) #默认从3开始到10结束, 默认步长为2 [3, 5, 7, 9]<br>print(list(r)) #用于查看range对象中的整数序列<br><br>'''判断 指定的整数 是否在序列中 in、not in'''<br>print(10 in r)<br>print(10 not in r)
for
print('-------------for------------------')<br>for item in 'hel':<br> print(item)<br>for item in range(3):<br> print(item)<br>for _ in range(3):<br> print("循环次数")<br> break<br><br>print('-------------for-else-----------------')<br>for item in range(3):<br> if item > 4:<br> print("测试1")<br> break<br> else:<br> print("测试2")<br>else:<br> print('测试3')<br><br>for i in range(1,10):<br> for j in range(1,i+1):<br> print(j,'*',i,'=',i*j,end='\t')<br> print()<br>
列表、字典、元组、集合
列表<br>
lst =['hello','world',98,'hello']<br>lst2 = list(['hello','world',98])<br>print(lst.index('hello')) #只返回第一个值的索引<br>print(lst[2])<br>print(lst[1:3:1]) # 从索引1开始到索引3结束,步长为1的片段。 片段是个新的list<br>print(lst[::-1]) # step为负数,从右往左输出<br>print(100 in lst)<br>print(98 in lst)<br><br>lst.append(100)<br>print(lst)<br>#lst.append(lst2) # 将lst2 作为一个元素加到列表末尾<br>lst.extend(lst2) # 向末尾添加多个元素<br>print(lst)<br>lst.insert(1,500) # 任意位置添加一个元素<br>print(lst)<br><br>lst[2:]=lst2 #将lst从1的位置进行切片后,接上lst2的内容<br>print(lst)<br><br>lst.remove('hello') # 移除第一个重复元素,<br>print(lst)<br>lst.pop(1) #移除指定位置的元素,如果不指定位置,默认移除最后一个<br>print(lst)<br>lst[1:3]=[] #删除列表中的内容,使用切片的方式,用空列表替换<br>print(lst)<br><br>lst.clear() # 清空列表<br>print(lst)<br><br>del lst # 删除列表对象<br># print(lst) #输出会报错,因为没有lst对象了<br><br>lst =[10,20,30,40]<br>lst[2]=100 # 修改内容<br>print(lst)<br>lst[1:3]=[200,300,400]<br>print(lst)<br><br>lst.sort() # 排序<br>print(lst)<br>lst.sort(reverse=True) # 降序排序<br>print(lst)<br><br>new_list = sorted(lst)<br>print('生成新的排序列表,原列表不变',new_list)<br>new_list = sorted(lst,reverse=True)<br>print('生成新的降序列表,原列表不变',new_list)<br><br>lst=[i for i in range(1,10)]<br>print('for循环生成列表',lst)<br><br>lst=[i*i for i in range(1,10)]<br>print('for循环生成列表',lst)
字典
<br>
scores={'张三':100,'李四':90,'王五':80}<br>print('创建字典',scores)<br><br>student=dict(name='berek',age=18)<br>print('student: ', student)<br><br># print(scores['张三'])<br>print('查询指定键的值',scores.get('张三'))<br>print('不存在时的默认值',scores.get('赵六',70))<br><br>print('key的判断', '张三' in scores)<br>del scores['张三']<br>print('删除指定键后',scores)<br><br>scores['陈七'] = 60<br>print('新增后',scores)<br><br>scores['陈七'] = 160<br>print('修改后',scores)<br><br>keys=scores.keys()<br>print('keys: ',keys)<br>print('转为list',list(keys))<br><br>values=scores.values()<br>print('values: ',values)<br>print('转为list',list(values))<br><br>items=scores.items()<br>print('values: ',items)<br>print('转为list',list(items))<br><br>for item in scores:<br> print('遍历字典', item, scores[item],scores.get(item))<br><br>items =['name','age','sex']<br>values = [98,96,95,94,93]<br>d={item.upper():value for item,value in zip(items,values)}<br>print('zip生成字典',d)
元组
<br>
print('----------元组---不可变序列---------')<br>t=('Python','hello',98)<br>print('元组',t)<br><br>t1= tuple(('Python','hello',98))<br>print('元组',t1)<br><br>t2=(10,)<br>print("一个值的元组,必须要加小括号和逗号",t2)<br>print(type(t2))<br><br>t3=()<br>t4=tuple()<br>print('空元组',t3,t4)<br><br>t5=(10,[20,30],40)<br>print(t5[0])<br>print(t5[1],id(t5[1]))<br>print(t5[2])<br>t5[1].append(100)<br>print('t5[1]是list,内容可变, 但是在元组的内存地址不变',t5[1],id(t5[1]))<br><br>for item in t:<br> print('for循环获取元素',item)
集合
print('----------集合---可变序列---------')<br>s={'Python','hello',98,'hello'}<br>print('集合不允许有重复的值',s,type(s))<br><br>s1=set(range(6))<br>print('range转集合',s1,type(s1))<br><br>s2=set([1,2,3,3,4,4,5,6])<br>print('list转集合,自动去重',s2,type(s2))<br><br>s3=set((1,2,3,3,4,4,5,65))<br>print('元组转集合,自动去重,内容是无序的',s3,type(s3))<br><br>s4=set('hello')<br>print('字符串转集合,自动去重,内容是无序的',s4,type(s4))<br><br>s5=set({1,2,3,3,4,4,5,65})<br>print('集合转集合,自动去重,内容是无序的',s5,type(s5))<br><br>s6=set()<br>print('空集合',s6,type(s6))<br><br>s.add(80)<br>print('集合add新增一个元素',s)<br>s.update([11,22,33])<br>print('集合update新增list多元素',s)<br>s.update((44,55,66))<br>print('集合update新增元组多元素',s)<br><br>s.remove(11)<br>print('集合remove删除一个元素,没有会抛异常',s)<br>s.discard(1000)<br>print('集合discard删除一个元素,没有不会抛异常',s)<br>s.pop()<br>print('集合pop随机删除一个元素',s)<br><br>s7={10,20,30}<br>s8={30,20,10}<br>print('s7和s8是否相等', s7==s8)<br>s7.add(40)<br>print('s7是否是s8子集', s7.issubset(s8))<br>print('s7是否是s8超集', s7.issuperset(s8))<br>s8.add(50)<br>print('s7和s8是否有交集,有交集为false,无交集为true', s7.isdisjoint(s8))<br><br>print('s7与s8的交集', s7.intersection(s8), s7 & s8)<br>print('s7与s8的并集', s7.union(s8), s7 | s8)<br>print('s7与s8的差集', s7.difference(s8), s7 - s8)<br>print('s7与s8的对称差集', s7.symmetric_difference(s8), s7 ^ s8)<br><br>ss={i*i for i in range(1,10)}<br>print('for循环集合生成式',ss)
<br>
字符串
驻留机制<br>
子主题
a='ab'<br>print('',a,id(a))<br>b= a+'c'<br>print('',b,id(b))<br>c=''.join(['ab','c'])<br>print('字符串拼接时:join的效率比 + 高',c,id(c))<br><br>s='hello,hEllo,python'<br>print('查找内容第一次出现的位置,没有报错',s.index('lo'))<br>print('查找内容第一次出现的位置,没有返回-1',s.find('lo'))<br>print('查找内容最后出现的位置,没有报错',s.rindex('lo'))<br>print('查找内容最后出现的位置,没有返回-1',s.rfind('lo'))<br><br>print('转换后都是新的字符串,id为新的')<br>print('全部大写',s.upper())<br>print('全部小写',s.lower())<br>print('大写转小写,小写转大写',s.swapcase())<br>print('第一个字符大写,其他小写',s.capitalize())<br>print('每个单词第一个字符大写,其他小写',s.title())<br><br>print('居中对齐',s.center(20,'*'))<br>print('左侧对齐',s.ljust(20,'*'))<br>print('左侧对齐',s.ljust(20))<br>print('右侧对齐',s.rjust(20,'*'))<br>print('右侧对齐,0填充',s.zfill(20))<br>print('负数','-8019'.zfill(8))<br><br>lst=s.split(sep=',')<br>print('split分割,默认是空格',lst)<br>lst=s.split(sep=',',maxsplit=1)<br>print('split分割,设置分割的数量',lst)<br><br>lst=s.rsplit(sep=',')<br>print('右侧split分割,默认是空格',lst)<br>lst=s.rsplit(sep=',',maxsplit=1)<br>print('右侧split分割,设置分割的数量',lst)<br><br>print('替换',s.replace('python','java'))<br>print('替换,指定替换的个数','hello,hello,python'.replace('hello','java',1))<br><br>lst=['hello','java','python']<br>print('join连接','|'.join(lst))<br>print('join连接字符串','|'.join('Python'))<br><br>s='hello,Python'<br>s1=s[:5]<br>s2=s[6:]<br>s3='!'<br>newStr=s1+s3+s2<br>print('切片,新的id',s1,id(s1))<br>print('切片,新的id',s2,id(s2))<br>print('组合,新的id',newStr,id(newStr))<br><br>print('---------格式化字符串,替换字符串内的变量-------')<br>name='张三'<br>age=18<br>print('我叫%s,今年%d岁' % (name,age))<br>print('我叫{0},今年{1}岁'.format(name,age))<br>print(f'我叫{name},今年{age}岁')<br><br>print('精度,整数 总宽度10','%10d' % 99)<br>print('精度,浮点数保留小数点后3位','%.3f' % 3.1415926)<br>print('精度,浮点数保留小数点后3位','{:.3f}'.format(3.1415926))<br>print('精度,浮点数总宽度10,保留小数点后3位','%10.3f' % 3.1415926)<br><br>s='编解码操作演示'<br>byte=s.encode(encoding='UTF-8')<br>print('编解码操作:',byte,byte.decode(encoding='UTF-8'))
函数
<br>
def calc(a,b):<br> c=a+b<br> return c<br>result=calc(10,20)<br>print(result)<br><br>def test(arg1,arg2):<br> arg1 =100<br> arg2.append(10)<br>n1 =11<br>n2=[10,20,30]<br>test(n1,n2)<br>print('n1是不可变对象,修改不会改变',n1)<br>print('n2是可变对象,修改会改变',n2)<br><br>def fun():<br> return 'hello','world'<br>print('多个返回值,以元组的方式返回',fun())<br><br>def fun(*args):<br> print('*args可变的位置形参参数,输出为元组',args)<br>fun(10)<br>fun(10,20)<br>fun(10,20,30)<br><br>def fun(**args):<br> print('**args可变的关键字形参参数,输出为字典',args)<br>fun(a=10)<br>fun(a=10,b=20)<br>fun(a=10,b=20,c=30)<br><br>def fun1(a,b,c):<br> print(a,b,c)<br><br>lst=[11,22,33]<br>fun1(*lst) # 将列表 中的每个元素转换为位置实参传入<br>dict={'a':111,'b':222,'c':333}<br>fun1(**dict) # 将字典 中的每个元素转换为关键字实参传入,key的必须与形参名字一致<br><br>def fun2(a,b,*,c,d):<br> print('* 后的形参,必须是关键字形参',a,b,c,d)<br>fun2(a=10,b=20,c=30,d=40)<br>fun2(10,20,c=30,d=40)<br><br>def fac(n):<br> if n==1:<br> return 1<br> else:<br> return n*fac(n-1)<br>print("递归", fac(6))<br><br><br>def fib(n):<br> if n==1:<br> return 1<br> elif n==2:<br> return 1<br> else:<br> return fib(n-1)+fib(n-2)<br>print("斐波那契数列",fib(6))
异常处理
类
class Student_demo:<br> pass<br>print("一切皆对象",id(Student_demo))<br>print(type(Student_demo))<br>print(Student_demo)<br><br>class Student:<br> place = '吉林' #类属性<br> def __init__(self,name,age,weight):<br> self.name=name<br> self.age=age<br> self.__weight=weight #不希望被外部使用<br><br> def eat(self):<br> print("实例方法",f'{self.name}学生在吃饭,体重{self.__weight}')<br><br> @staticmethod<br> def method():<br> print("静态方法")<br><br> @classmethod<br> def cm(cls):<br> print("类方法")<br><br>stu=Student('张三',20,80)<br>print(id(stu))<br>stu.eat()<br>print(stu.name)<br><br>Student.eat(stu)<br>print("类属性获取",Student.place)<br>Student.place='北京'<br>print("类属性修改后",Student.place)<br>print("类属性修改后",stu.place)<br><br>Student.cm()<br>Student.method()<br><br>stu1=Student('李丽', 24, 90)<br>stu2=Student('王五', 28,120)<br>print('----------动态绑定性别属性-----------------')<br>stu1.gender='女'<br>print(stu1.name,stu1.age,stu1.gender)<br>print(stu2.name,stu2.age)<br><br>print('----------动态绑定外部函数-----------------')<br>def show():<br> print("类的外部函数")<br>stu1.show=show<br>stu1.show()
继承
实例对象创建的内存流程
print("-------支持多继承---------")<br>class Person():<br> def __new__(cls, *args, **kwargs):<br> print(f'__new__被调用执行了,cls的id值为:{id(cls)}')<br> obj=super().__new__(cls)<br> print(f'__new__调用父类object的__new_,创建的对象的id值为:{id(obj)}')<br> return obj<br> def __init__(self,name,age):<br> print(f'__init__被调用执行了,self的id值为:{id(self)}')<br> self.name=name<br> self.age=age<br> def info(self):<br> print(f'Person类中 姓名:{self.name},年龄:{self.age}')<br><br>class Student(Person): # 继承Person<br> def __init__(self,name,age,score):<br> super(Student, self).__init__(name,age)<br> self.score=score<br> # 重写info方法<br> def info(self):<br> # 父类的方法<br> super(Student, self).info()<br> print(f'Student类中 成绩:{self.score}')<br> # 重写str<br> def __str__(self):<br> # 使用return 返回<br> return f'Student类中 调用str输出,姓名:{self.name},年龄:{self.age},成绩:{self.score}'<br> # 重写add 这样两个实例对象才能相加<br> def __add__(self, other):<br> return self.name+";"+other.name<br><br>print(f'Student类的id值为:{id(Student)}')<br>stu=Student("Berek",20,100)<br>stu1=Student("Peter",30,80)<br>stu.info()<br>print("dir()显示对象中的属性和方法",dir(stu))<br>print('自动输出重写的__str__的内容',stu)<br>print('输出重写的__add__的内容',stu+stu1)<br>print('实例对象的属性字典',stu.__dict__) # {'name': 'Berek', 'age': 20, 'score': 100}<br>print('实例对象的类对象',stu.__class__) # <class '__main__.Student'><br>print('类对象的属性字典',Student.__dict__)<br>print('类对象的父类元组',Student.__bases__) # (<class '__main__.Person'>,)<br>print('类对象的继承关系',Student.__mro__) # (<class '__main__.Student'>, <class '__main__.Person'>, <class 'object'>)<br>print('类对象的子类列表',Person.__subclasses__()) # [<class '__main__.Student'>]<br>
模块
import math<br>print(id(math))<br>print(type(math))<br>print(math)<br>print(math.pi)<br>print('------------------------------------')<br>print(dir(math))<br>print('math的pow方法,2的3次方',math.pow(2,3))<br><br>from math import pi<br>print(pi)<br><br>import demo_extends<br>stu1=demo_extends.Student("TEST_modules",30,80)<br>stu1.info()<br>from demo_extends import Student<br>stu2=Student("TEST_modules_Student",30,80)<br>stu2.info()<br><br>print('----------------导入包------包的文件下有__init__.py------------------')<br>import demo_package.demo_module_1 as ma<br>print(ma.a)<br>from demo_package import demo_module_2<br>print(demo_module_2.b)<br>from demo_package.demo_module_2 import b<br>print(b)<br><br>print('---------使用pip install 三方的模块--------------')<br># import schedule<br># import time<br># def job():<br># print('哈哈-----')<br>#<br># schedule.every(3).seconds.do(job)<br>#<br># while True:<br># schedule.run_pending()<br># time.sleep(1)
文件操作
<br>
with语句(上下文管理器)
print('-------读取--r--------')<br>file=open('testFile.txt','r',encoding='UTF-8')<br>print(file.read())<br># print(file.readlines())<br>file.close()<br>print('-------覆盖写入--w--------')<br>print('-------追加写入--a--------')<br>file=open('testFile.txt','a',encoding='UTF-8')<br># file.write('越来越强大!\n')<br>file.close()<br><br>print('--------with上下文管理器------------')<br>with open('testFile.txt','r',encoding='UTF-8') as withFile:<br> print(withFile.read())<br><br>import os<br>print('当前的工作目录',os.getcwd())<br>print('创建多级目录')<br>#os.makedirs('A/B/C')<br>#os.removedirs('A/B/C')<br><br>print(os.path.abspath('demo.py'))<br>print(os.path.exists('demo_io.py'),os.path.exists('demo_io_file.py'))<br>print(os.path.split('E:\\workspaces\\python_demo\\demo.py'))<br>print(os.path.splitext('demo.py'))<br>print(os.path.basename('E:\\workspaces\\python_demo\\demo.py'))<br>print(os.path.dirname('E:\\workspaces\\python_demo\\demo.py'))<br>print(os.path.isdir('E:\\workspaces\\python_demo\\demo.py'))<br><br>print('--------输出当前文件夹下的py文件名称-----------')<br>path=os.getcwd()<br>lst=os.listdir(path)<br>for filename in lst:<br> if filename.endswith('.py'):<br> print(filename)<br><br>print('--------遍历当前文件夹下的所有py文件名称,包括子目录-----------')<br>path=os.getcwd()<br>lst=os.walk(path)<br>for dirpath,dirname,filename in lst:<br> '''print(dirpath)<br> print(dirname)<br> print(filename)<br> print('-------------------')'''<br> for dir in dirname:<br> print(os.path.join(dirpath,dir))<br> for file in filename:<br> print(os.path.join(dirpath,file))<br> print('-------------------')
打包
输出的内容中有生成的exe的位置,如果需要使用还需要将相关资源拷贝到exe的同级目录下
0 条评论
下一页