1、cpu ——内存———硬盘
程序中要处理的数据要保存在变量中,一个程序占用一块内存,一个变量是一个小内存,内存中保留着好多数据
Ipython是交互式,可以直接输出变量
pycharm是解释器执行程序时要print(),这是两者的区别
2、Pycharm调试一行一行向下执行,执行完毕之后程序中的变量就会被完全释放
input()输出的类型都是字符串!
3、If条件语句包含在最外部:break和continue用在循环体内部的
当从1-10循环执行的时候:只要到3就结束循环:
Break作用是在循环语句内部,当某一个小条件成立之后,不需要在执行后面重复执行的代码,增加一个条件if:
If I==3:
Break
当从1-10循环执行的时候:只有3不执行循环代码就用continue:
在使用关键字之前,需要确认的计数是否修改,否则可能会导致死循环
if I==3:
I = I+1
Continue
4、默认不换行:默认在后边添加
print(“*”,end=“”)
5、循环嵌套:
增加一个小的循环,专门负责当前行中,每一列中的星星显示
6、条件多时,在大的条件前和大的条件后增加一个小括号!!增加8个空格的缩进!!1先找一个条件多的情况,在找一个简单的条件,最后把其他情况放到一个else中去!
在判断条件中注意可以加括号然后在换行这样看起来就好看了
7、在Ipython中倒包然后random.就会打印出包下边的方法
8、转义字符:
\t 在控制台输出一个制表符,协助在输出文本时,垂直方向上保持对齐!!
\n 在控制台输出一个 换行符
\ 在一个字符串中输入一个双引号,转义字符
99乘法表,先分解成一个一个的小元素,在根据小元素在进行变量分配
一个一个的分配和替换,一步一步的分析!%d。一个一个分析
9、无限的循环应用场景:由用户主动决定什么时候来退出循环!!!
当你输入错误,又想重新输入时,这时就用到了无限循环的应用
for 循环时用来遍历集合的,现在是需要不停的循环、不停循环,当用户主动选择0时才退出循环!这时需要选择while循环达到不停的循环的作用,while True: 然后当你向退出循环时就要在某一个条件下break一下!
10、TODO 后边加一个空格,就会提示你以后需要做的任务高亮显示!
11、右键修改变量名:rename
12、在文件开头添加一个shebang符号也就是#! /usr/bin/python3 这是python解释器的完整路径
13、数据存在内存中(只要有新数据就会在内存中开辟一个新的空间)
变量存储着数据在内存中的地址(变量中的地址的动作就叫做引用)用ID(变量名)来查询数据存储的地址
如果一个变量已经被定义,如果一个变量赋值的时候,本质上是修改了数据的引用!!
14、函数的参数和返回值都是通过数据的引用来传递的!
15、可变类型:列表和字典调用方法修改内部的值但是地址不会变化,如果使用赋值语句的话地址会变化的
如果使用赋值语句肯定会修改地址的!!!1
16、在字典中key只能使用不可变类型的数据,
17、hash是一种算法:作用是提取数据的特征码(指纹)
接收一个不可变类型的数据作为参数!!
返回结果是一个(特征码)整数!!
在python中为乐保证对字典中后续处理的方便(增删改查),在添加键值对的时候,python首先调用hash函数对字典中的key进行hash,会让字典中保存的数据有一个更好的优化,
18、生命周期:局部变量在函数生命周期的时候使用才会生效,(保存函数内部临时使用的数据)
19、在函数内部要永久修改全局变量的值就用global+变量名,意思是global关键字会告诉解释器后面的变量是一个全局变量,子啊使用赋值语句时,就不会创建局部变量,有global时就不要在函数内部创建局部变量了
20、函数什么时候需要参数呢:函数内部需要处理外部的数据时
当函数内部需要处理的数据不确定(就需要从外界传递参数到函数内部)
需要函数完成后需要汇报结果,此时需要返回值
21、函数返回元组是没有小括号的,
接收返回元组的结果形式:用不同变量进行接收!!
22、+= 在使用字符串时,是先相加在赋值
但是在使用列表时,调用extend方法,把另外一个列表整合到这个列表中
23、缺省参数:指定默认值的参数
应用场景:有一个参数经常出现某一个数设为缺省值
好处:简化函数调用
定义位置:末尾
调用多个缺省参数的函数时,使用关键字参数传递参数
24、元组和字典的拆包:
应用场景:需要调用带有多指参数的函数时,开发时需要把元组变量或者字典变量传递给函数内部时!!!在元组加*,字典前加**
元组变量传给args,字典变量传给kwargs,简化传递方式
25、递归:函数内部自己调用自己的函数
只是参数不同进行相同的处理
先考虑递归出口:当满足一个条件时,函数不在执行(一层一层的返回)倒过来想,把出口指定为最小的数字
做假设函数能处理1。 num-1. 的相加,就定义变量函数调用自己(核心是两个数字的相加num+temp)
26、列表:用ipython 变量. +tab键盘
记录一串信息:不用给变量反复起名,只定义一个列表变量就行
方法是一个变量名.
函数是函数名.
关键字:del从列表删除一个元素。不需要小括号
函数:len 需要小括号
方法:. 需要小括号
关键字:python中有33个关键字import keyword。 不需要使用括号
函数:需要死记硬背呀
方法:可以在智能提示中有提示,是对前面对象的操作
应用场景:列表存储多个相同类型的数据,然后进行重复吧
27、元组:.count和.index只有2个方法
应用场景:作为函数的参数和返回值
可以格式字符串
可以让列表不可修改,保护数据安全,转换成元组
28、字典:应用场景:
存储描述一个物体的信息
常用操作:删除.pop(key)
统计键值对数量len(dict)
合并字典:字典.uodate(新字典),如果key相同时覆盖原有的键值对
字典遍历:for k in xiaoming_dict:这样是得到的key
29、字典和列表应用场景:
将多个字典放在一个列表中,在进行遍历,在循环体内对每一个字典进行相同的处理!!!1
30、字符串:6大方法!!
去除空白字符:
拆分和连接:
文本对其:
大小写转换:
查找和替换:
判断类型:
31、公共方法:这几种数据类型都能使用的方法(列表,元组,字典,字符串)
内置函数:len\del\max\min\cmp\
Max针对字典是只针对字典的key进行统计
比较两个字符串用比较运算符比较!
运算符:+ * in not in <=. >>==
合并,重复,元素是否存在,元素是否不存在,元素比较
32、列表的append和extend方法区别【】
33、for else 应用场景:在迭代遍历嵌套的数据类型,进行数据搜索时才用到(例如一个列表中包含多个字典)
把班上所有同学详细信息字典存到列表中,现在查找某一个同学的详细信息,如果找到了就不需要继续找了
find_name = “小妹”
for stu_dict. In. Students:
If stu_dict[“name”] == find_name:
Print()
break
既不找小妹,也不找阿土,,给你一个字典中没有的人,那就用到了else了,
搜索列表时,所有字典检查之后,都没有发现需要的搜索目标,还希望得到一个统一的提示就会用到for. Else. 语法了
For。 else。 是当所有循环没有找到时,统一执行一次!!1如果在内部如果没有找到就会都执行一次else
34、jenlins2.138.2。 易百教程!
Jenkins的管理员密码:在下面
vim /Users/cheng/.jenkins/secrets/initialAdminPassword
35、石墨文档
36、子类调用父类的方法是Dog.bark(self),不要忘记这个self
父类名.方法(self)(python3中不推荐使用这种方法)推荐super().方法
37、定义类属性标记是否!!!!!!
#判断是否执行过初始化动作
if Musicplayer.init_flag:
return
#如果没有执行过,则执行初始化动作
print("初始化播放器")
38、异常:
代码写完后,交给python的解释器执行
39、游戏模块:
pygame
Python3 -m pygame.examples.aliens
40、
Vim +文件名 +。 直接定位到文件的最后一行,不加+就默认定位到第一行
产生交换文件按键d就能删除交换文件
x 就相当于wq保存并退出
命令分类:
one:重复次数:命令模式下输入一个数字,再加上该命令重复执行的次数
Two:移动和选择:冒号+行数。 或者行数+gg 向上翻页ctrl+b 向下翻页ctrl+f. 屏幕不动情况下—— 屏幕顶部H。中间M。 底部L
段落为单位切换光标{ 向上寻找段落。 }向下寻找段落
括号切换,括号都是成对出现的用shift+%
标记:m后加一个字母(随便)。 在返回的时候用单引号+前面的字母(相同标记会被覆盖,删除行同时也会删除标记)
three:编辑操作:
选中文本小写v+k向上选中 +j向下选中从光标开始到光标结束的文本! 大写v把途中经过的行全选中,ctrl+v纵向选择
shift+【
four:撤销和重复:(删除命令和移动命令可以相结合使用)
删除用d 撤销删除用u. (Undo). ctrl+r(恢复撤销的命令)
删除x. 5x。一下删除5个字符 Dd删除所在的行 5dd删除5行 D大写的d是从光标的位置一直删除到最后.
删除第四行到第六行d6G
dw删除从光标开始到单词末尾
d0删除到第一行的其实位置
D’a. 使用m命令增加的标记,把光标所在位置到标记之间的代码全部删除
five:复制和黏贴:
yy复制一行。 nyy复制多行 p黏贴. Np就是黏贴n次
five:查找和替换:
six:编辑:
41、utf8mb4增加了一些表情符号!
42、即时通信IM
43、删除项目的时候,下面的逻辑删除不用更改,但是在做下面统计相关的东西的时候要记住把删除的给去除掉!怎么才能删除掉??
44、type问题!!研究一下(记住主键不能当作写死变量的那一列)
45、接口的内容可能因为权限随时更改时显示的内容会变的时候,这时候可以根据实际情况重新调用这个接口,实现数据的实时更新!!(可以在登录的时候调用,也可以在切换的时候调用!!)
46、用户容易输入错误的数值,把这个数值设置私有属性,,要是想修改的话就用get和set方法内部修改,set的时候写逻辑设置范围(用@propery可以实现同样功能)@salary.setter(这是对salary属性的设置,前提是这个类必须有salary这个属性),这样用户输入错误的时候就会调用内部的方法,有提示了
47、<__main__.Person object at 0x101e3b6d8>这是__str__的方法实现的打印结果
48、python中的特殊方法(运算符的重载)
+ 对 __add__
- 对 __sub__
< 对__lt__
<=对 __le__
== 对 __eq__
!= 对__ne__
|对 __or__
^ 对 __xor__
&对 __and__
<< 对 __lshift__左移
>>对 __rshift__右移
*对__mul__
% 对__mod__模运算(取余)
//对__floordiv__ 整数除
**对__pow__指数运算
__getattr__点号运算(获取属性)a.xxx
__setattr__属性赋值,a.xxx = value
__repr__打印 (print())
__str__ 转换
__call__函数调用 a()
__getitem__索引运算(a[key])
__setitem__索引赋值(a[key]=value)
__len__ 长度 (len(a))
49、python中的特殊属性:
class.__mro__(类层次结构)
class.__subclasses__()子类列表
class.__base__(类的基类)
class.__bases__(类的基类元组,最近的上一层)
obj.__dict__对象的属性字典形式显示
obj.__class__对象所属的累
50、都能够代码复用的作用:
继承:is狗是动物
组合:has手机有cpu(两个类,其中一个类的实例当作另外一个类的参数传进去,就能用另外一个类调用另外一个类中的方法了!!)
51、设计模式:
工厂模式:创建者和调用者的分离,工厂类实现类,创建对象的统一管理
定义一个工厂类,下面定义一个生产方法:判断条件,调用生产品牌的类
定义不同品牌的生产的类
调用的时候实例化工厂对象,在调用生产方法(传递不同的生产的对象)
52、单例模式:重写__new__属性(创建和初始化都应该是一次)
class my single:
_obj = none
__init__flag = True
Def. __new__(cos,*args,**kwargs)
If cls.__obj == none
Cls.__obj = object.__new__(cls)
Return cls.__obj
Def __init__(self,name):
If my single.__init_flag:
print(“inin____”)
Self.name = name
My single.__init_flag = False
53、round\float 新生成另外一个对象
增强运算符。 += *=
54、时间:unit时间点:1970年1月1日00:00:00。 Time.time()用秒.微妙表示
// 整数除 / 小数除
55、定义多点坐标-绘出折线-计算起始点和终点距离
Turtle.penup()
Turtle.goto
Turtle.pendown()
Turtle.write()
56、ascii是一个字符表示一个汉字(8位代表一个字符),unicode是三个字符表示一个汉字
57、str()函数把其他类型转成字符串,replace()字符串的替换对字符串修改(生成新字符串,以前的变量就回收回去了)
58、join常配合列表来使用(只生成一个对象,+是生成多个对象)
59、字符串驻留机制(符合标识符规则的字符串仅包含下划线,字母,数字)同一字符串对象的可以好多变量引用(对象地址是同一个)
60、a.isalnum 所有字符全是字母或数字
a.strip(“*”)去除字符串首尾信息 a.capitalize()新字符串,首字母大写,
A.title() 新字符串,每个词首字母都大些。 A.swapcase()所有字母大小写转换
格式排版:a.center(10,”*”) a.isdigit()是否只由数字组成
61、制表符、换行符、空格 ————都属于空白符isspace()
62、可变字符串:sio = io.stringIO(s)可变对象
sio。seek(7)移动到指定字符
sio.write(“g”)修改这个位置上的值
Sio.getvalue()获取sio字符串的值(修改频繁的时候用,以上过程没有产生新的字符串对象)
63、bin()把转换成二进制数,按位亦或意思是两者不同为1,相同为0(针对二进制数)
a = 3. A<<2. 左移以为相当于乘以2,两位乘以4
64、规则:复杂的就用括号就行
位运算和算数运算>比较运算符>赋值运算符>逻辑判断
65、对象()调用了__call__方法
66、python 中没有重载,可以定义多个重名函数,但是只有最后一个是有效的!
python方法的动态性
67、a = Student() >>>>a.say_score() >>>>>Student.say_core(a)
68、try。 except时候能确定的就要if判断一下才好!
69、def是建一个对象堆里面开辟函数对象(包含了参数信息,代码信息)
栈里面保存函数名变量(就是堆的地址)
调用时候找到堆对象找到里面的代码(执行里面的代码)
70、参数的传递赋值:(全是引用传递而不是值传递)
可变对象(字典、列表、集合、自定义的对象)
不可变对象(数字、字符串、元组、function,布尔值)
传递可变对象的引用:两个变量保存着同一个对象的地址(实参和形参指向同一个对象)
传递不可变对象的引用:赋值操作的时候,不可变对象无法修改,系统会创建一个新的对象
对象多了个修改之后新的对象,然后被形参指向!
71、浅拷贝:不拷贝对象的内容,只是拷贝子对象的引用(修改里面的嵌套数据导致自己和拷贝出来的对象都要被修改)
深拷贝:会连子对象的内存全部拷贝一份,对子对象的修改不会影响到源对象(这个对象的所有子孙都要拷贝一份)(修改拷贝出来的里面嵌套的对象会导致只有自己被修改)
72、传递不可变对象的时候(如果发生拷贝)用的是浅拷贝(传递嵌套的结构)然后在函数中修改内部的结构(浅拷贝都会变)
73、位置参数:传递时一一对应
默认值参数:不传时默认就是定好的数,放到后边
命名参数:调用时把形参名字和数字绑定好
可变参数:* **
强制命令参数: *在参数中的最前面,剩下的通过命名参数传递
74、递归:自己调自己
函数一旦被调用就开辟(stackfree栈针压栈,进入(栈里面执行代码))test01还没调用完毕又调用函数test02开辟栈针,,当函数执行完毕栈针就被销毁了,然后test01栈针也结束被销毁。。。但是自己调自己(递归时)就把自己的栈空间满了,程序崩溃了!
第一个打开的方法最后才关闭
75、嵌套函数_内部函数_数据隐藏
76、可迭代对象:序列(字符串、列表、元组),字典,迭代器对象,生成器对象
77、循环嵌套:外层循环是行循环,内层循环是列循环(外层是大循环,里面是小循环)
\t 是取消换行(制表符相当于tab)—————print()是取消换行的意思
\n是换行符
end=“\t” 表示以什么空白制表符结尾
end=“\n”表示以换行符结尾
78、:e . 查看当前文件有啥文件
N .文件名。 在此目录下新建文件名
W. 文件名。 保存当前内容至另一个文件中,但仍停留在当前文件中
79、分屏命令:
:sp + 文件名。 横向分屏
:vsp +文件名 纵向分屏
控制窗口:ctrl + w
W 切换到下一个窗口
R. 互换窗口
c 关闭当前窗口,不能关闭最后一个窗口
q 退出当前窗口,如果是最后一个窗口,则关闭vi
O。关闭其他窗口
80、光标移到最前方contral+a ,移到最右方contral+e
82、闭包:一个函数的内部的函数在内部定义和调用!函数式编程(1、内部返回一个函数对象,不加括号。2、闭包的函数使用到了外部函数的变量,满足这两点要求就是闭包)内部用到的变量只能读不能修改(闭包中使用nonlocal时候比较多)
83、汉诺塔递归:
#汉诺塔:
def hanoi(n,x,y,z):
if n==1:
print(x,"-->",z)
else:
hanoi(n-1,x,z,y)# 将前n-1个盘子从x移动到y上
print(x,"-->",z) #将最底下的最后一个盘子从x上移动到z上
hanoi(n-1,y,x,z)#将y上的n-1个盘子移动到z上
n = int(input("请输入汉诺塔的层数:"))
hanoi(n,"x","y","z")
84、f.tell(). 返回光标的位置
f.seek(45,0)移动文件指针的位置从0开始偏移45个位置。把光标定位到这个位置
85、list(f)直接把文件转换成一个列表
f.close()就写进文件中去了,如果没关闭就写到缓冲区里面去了
86、文件操作保存:
#最后进行函数的封装!!
f = open("record.txt")
boy = []
girl = []
count = 1
for each_line in f:
if each_line[:6] != "=======":
(role,line_spoken) = each_line(":",1)
if role == "小甲鱼":
boy.append(line_spoken)
if role == "小客服":
girl.append(line_spoken)
else:
file_name_boy = "boy_" + str(count) + ".txt"
file_name_girl = "girl" + str(count) + ".txt"
boy_file = open(file_name_boy,"w")
girl_file = open(file_name_girl,"w")
boy_file.write(boy)
girl_file.write(girl)
boy_file.close()
girl_file.close()
boy = []
girl = []
count += 1
f.close()
87、
easygui:图形用户界面ui设计(是在tkinter上运行的)
msgbox 对话框
choicebox 对话框
ccbox. 对话框
import easygui as g
import sys
while 1:
g.msgbox("嗨,欢迎进入第一个界面小游戏")
msg = "请问你希望在鱼c工作室学习到什么知识呢?"
title = "小游戏互动"
choices = ["恋爱","编程","琴棋书画"]
choice = g.choicebox(msg,title,choices)
g.msgbox("你的选择是:"+str(choice),"结果")
msg = "重新开始游戏"
title = "请选择"
if g.ccbox(msg,title):
pass
else:
sys.exit(0)
88、内存函数:issubclass()注意自身也可以是自身的子类!!
isinstance(object,classinfo)检查实例对象是不是属于这个类的,第二个参数也可能是元组
hasattr(object,name属性) 测试一个对象是否有特定的属性,其中属性要用引号扩起来
getattr(object, name, default)如果娶不到就到你设置的默认值取
setattr(object, name, value)
Delator(object,name)
89、魔法方法:带双下划线的方法,是面向对象的一切!
#斐波那契数列,迭代器!!
class fibs():
def __init__(self,n=10):
self.a = 0
self.b = 1
self.n = n
def __iter__(self):
return self
def __next__(self):
self.a,self.b = self.b,self.a + self.b
if self.a > self.n:
raise StopIteration
return self.a
x = fibs(100)
for i in x:
print(i)
90、
定制序列:不可变__len__()和__getitem__方法
可变多了个__setitem__和__delitem__方法
#编写一个不可变的自定义列表,要求记录列表中每个元素被访问的次数
class countlist:
def __init__(self,*args):
self.values = [x for x in args]
self.count = {}.fromkeys(range(len(self.values)),0)
def __len__(self):
return len(self.values)
def __getitem__(self, key):
self.count[key] += 1
return self.values[key]
91、描述符:
#定义一个温度类,定义两个描述符,描述摄氏度和华氏度两个属性,自动传唤
class celsius:
def __init__(self,value=26.0):
self.value = value
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
self.value = float(value)
class fahrenheit:
def __get__(self, instance, owner):
return instance.cel*1.8 + 32
def __set__(self, instance, value):
instance.cel = (float(value)-32)/1.8
class temperature:
cel = celsius()
fah = fahrenheit()
92、生成器是迭代器的一种实现(只需要普通函数就行,不需要在定义类加了一个yield)
就是协同程序(函数调用都是局部调用,完事就交回去的)