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