Q:什么是数字类型
A:
what
包含:int(整型)float(浮点型)bool(布尔型)complex(复数)
how
1.除法结果怎样分别整型和浮点型 2/2 为float 2//2 为int
2.表达其他进制 0b10(二进制的10) 0o10(八进制的10) 0x10(十六进制的10)
3.布尔值bool(0)=False bool(1)=True 第一个字母必须大写
Q:什么是字符串类型
A:
what
代号:str
when
字符串的运算
加法:“hello”+"world"?’helloworld’
乘法:“hello”*3?’hellohellohello’
获取字符 [x:y]:x表示起始位置(0为第一个字符)y表示步长不表示第几
‘helloworld’[0]?h
‘helloworld’[-1]?d
‘helloworld’[0:4]?hell
‘helloworld’[0:-1]?’helloworl’
how
1.建议每行79字符
2.字符串的引号必须成对出现
Q:什么是转义字符
A:
what
加
如 ’ 输出为’ 否则系统会认为缺少另一个’
\n 换行
\r 回车
’ 单引号
\t 横向制表符
where
在print函数中在全文前入r或R,就不是一个普通字符串而是一个原始字符串,所见即所得
Q:什么是列表list
A:
what
定义[1,2,3,4,5,6]或[“hello”,“world”,1,9]或[[1,2],[3,4],“hello”,“world”,1,9](嵌套列表)
数字、布尔和字符串都可以,甚至是列表(任意类型)
how
访问列表元素
[1,2,3,4,5,6][0] => 1
[1,2,3,4,5,6][3] => 3
[1,2,3,4,5,6][0:2](得到列表) => [1,2]
[1,2,3,4,5,6][-1:](得到列表) => 输出为:[6]
列表计算
[1,2,3,4,5,6]+[7,8] => [1,2,3,4,5,6,7,8]
[7,8]*3 => [7,8,7,8,7,8]
列表元素切片方法
a[0:len(a):2] 其中:a是列表,0为初始位置,len(a)表示便宜量,此处为列表a的长度,2是步长
Q:什么是元组tuple
A:
what
定义(1,2,3,4,5,6)
和列表一致可以放任意元素,和列表运算方式也一致
how
访问元组元素
(1,2,3,4,5,6)[0] => 1
(1,2,3,4,5,6)[3] => 3
(1,2,3,4,5,6)[0:2](得到列表) => (1,2)
(1,2,3,4,5,6)[-1:](得到列表) => 输出为:(6)
元组计算
(1,2,3,4,5,6)+(7,8) =>(1,2,3,4,5,6,7,8)
(7,8)*3 =>(7,8,7,8,7,8)
元组元素切片方法
a(0:len(a):2) 其中:a是元组,0为初始位置,len(a)表示便宜量,此处为元组a的长度,2是步长
how much
括号表示运算符号的时候,规定()不表示tuple
括号表示tuple方法(1,)或()
Q:什么是序列
A:
what
字符串str 列表list 元组tuple都是序列
how
序号:用[2]序号获得元素,每个元素会被分配一个序号
切片:用[0:3][-1:0]获得元素序列 [0:8:2]是另一种用法
判断元素:
3(not) in [1,2,3,4,5,6]得到bool
3 in [1,2,3,4,5,6] => True
10 in [1,2,3,4,5,6] => False
3 not in [1,2,3,4,5,6] => False
求长度:
len([1,2,3,4,5,6]) => 6
求最大/最小<根据ASIC码排序通过方法old()求值>
max(min)([1,2,3,4,5,6]) => 6(1)
max(min)('hello world') => w (空格)
min('hello world') => d
Q:什么是集合set
A:
what
用{1,2,3,4,5,6}定义
集合不重复,集合是无序的
{1,2,1,3,2,4} => {1,2,3,4}
how
判断元素:
3(not) in {1,2,3,4,5,6}得到bool
3 in {1,2,3,4,5,6} => True
10 in {1,2,3,4,5,6} => False
3 not in{1,2,3,4,5,6} => False
求长度:
len({1,2,3,4,5,6}) => 6
求最大/最小<根据ASIC码排序通过方法old()求值>
max(min)({1,2,3,4,5,6}) => 6(1)
-号 求差集
{1,2,3,4,5,6}-{3,4} => {1,2,5,6}
&号 求交集
{1,2,3,4,5,6}&{3,4} => {3,4}
|号 求合集
{1,2,3,4,5,6}|{3,4,7} => {1, 2, 3, 4, 5, 6, 7}
定义一个空集
set()
Q:什么是字典dict
A:
what
字典是集合类型,无序
通过Key(关键字)来访问Value(值)
表示方式:{Key1:Value1,Key2:Value2,Key2:Value2,Key2:Value2,…}
Key必须是不可变的类型<不可以是列表但是可以是元组字符串和int等数字型>
Value可以是str,int,bool等多种形式,包括数组、集合甚至字典
how
提取字典值
{1:'a',2:'b',3:'c'}[1] => 'a'
{1:'a',1:'b',3:'c'}[1] => 'b'
字典不能有重复的key
{1:'a',1:'b',3:'c'} => {1:'b',3:'c'}
{1:'a','1':'b',3:'c'}[1] => 'a'
{1:'a','1':'b',3:'c'}['1'] => 'b'
空的字典定义{}
set()
Q:什么是变量
A:
what
变量没有类型限制,python的动态性
who
int str tuple 是值类型 可变
list set dict 是引用类型 不可变
值类型是指向一个赋值,把变量指向一个数字
引用类型是原本系统的地址,更改变量等于更改系统内部数值
how much
变量名称尽量有意义,命名可读性要强
变量名首字不能是数字(可以是字母和下划线)
系统关键字(保留关键字),不可以用
橙色是保留关键字,紫色是易错关键字,不建议使用。
黑色可以使用,变量名区分大小写
为了维护代码的稳定性,不可变数值能用元组就用元组
Q:什么是运算符
A:
what
赋值运算符
算数运算符和赋值运算符的区别是,会改变变量值
比较(关系)运算符
返回一个bool值
在字母比较中,比较的是一个ascll码
但字符串并不是一个ascll码,会把每一个字母做比较
逻辑运算符
操作bool返回结果也是bool
int和float 0是False 非0是True
字符串 空字符串是False 否则是True
list tuple set dict 空的是False 否则是True
and的返回规律
and是运算两个数值对比,因此
发现一真一假,就会返回假的值。
发现两个同为真的话,就会返回后面的值。
发现两个同为假的话,就会返回前面的值。
or的返回规律
or是运算两个数值一个为真就可以结束运算,因此
发现一真一假,就会返回真的值。
发现两个同为真的话,就会返回前面的值。
发现两个同为假的话,就会返回后面的值。
成员运算符
返回值是bool
身份运算符
返回值是bool
is 和 = =
= = 是值是否相等
is是比较身份是否相等,比较内存地址id()在内存中的位置
类型的判断type
值(value判断方式==),身份(id判断方式is)和类型(type判断方式isinstance())是对象的三个特征
isinstance(a,str) a是否为str
isinstance(a,(int,str,float)) a是否为类型中的任意一个
位运算符
都把值先转换成二进制再进行运算
位运算不支持list tuple dict str
位运算支持set和数字类型
Q:python文件的运行
A:
who
辅助开发工具
pycharm vscode sublime
vscode插件:Python(必备);terminal;view in browser;Vim; vscode-icons
how
原生系统运行python文件
系统运行 →cd D:→回车→D:(文件夹名称)→回车→D:(文件夹名称)\python (文件名称).py→回车
vscode快捷键:
F5 调试
ctrl+F11 跳出
单行注释:ctrl+/(以#开始)
多行注释:alt+shift+a(以’’‘开始,以’’'结尾)
重命名:点文件名按 F2
片段功能:在一个字块位置编写完毕后,按Tab键到下一个字块处;回到上一个字块处用shift+Tab
ctrl+C:强制停止一个程序(特别是无限循环时)
在常规设置内找到files.exclude可以将不需要的文件隐藏
Q:什么是条件控制
A:
what
if
'''
每个模块前应该有一段描写模块意义的文字
常量(constant)固定不变,应该大写,
'''
定义常量
定义变量
if 结果为bool值的语句:
一个命令行 #可以是pass
第二个命令行 #可以是pass
...
else:
一个命令行
第二个命令行
...
elif
#引入:elif=else+if,elif必须和if配对使用
#在python里面没有switch
#也可以选择字典解决
if
'''
每个模块前应该有一段描写模块意义的文字
常量(constant)固定不变,应该大写,
'''
定义常量
定义变量
if 结果为bool值的语句:
一个命令行 #可以是pass
第二个命令行 #可以是pass
elif:
一个命令行
第二个命令行
...
elif:
一个命令行
第二个命令行
...
who
关键字 if else elif
how much
对于程序嵌套,应该尽量避免,转而使用函数或者elif和字典等
Q:什么是循环控制
A:
what
while
while 结果为bool值的语句:
一个命令行 #可以是pass
第二个命令行 #可以是pass
...
else: #while后面可以接else使用
一个命令行
第二个命令行
...
for
for 数值 in 序列:
一个命令行 #可以是pass
第二个命令行 #可以是pass
...
else: #for后面可以接else使用
一个命令行
第二个命令行
...
who
关键字 while for in range break continue
when
在递归中适合使用while
for主要用来遍历/循环 序列或者集合,字典
how
for打印两层列表
示例:
#print默认打印出列,加end=''可更改为打印成行
a =[ ['apple','orange','banana','grape'],(1,2,3)]
for i in a;
for j in i;
print(j,end='')
终止for语句的遍历
示例:
#结束循环语句使用break,后续else也不会执行,执行结果:1
#break只结束一层for循环
a = [1,2,3]
for x in a:
if x==2
break
print(x)
跳过for语句的遍历
示例:
#跳过循环语句使用continue,后续else会执行,执行结果:1 3
a = [1,2,3]
for x in a:
if x==2
continue
print(x)
一段代码执行十次
示例:
'''
与C#中for(i=0; i<10; i++){}等效
range函数(a,b) a表示起始值,b表示偏移量
'''
#连续1到10
for x in range(0,10):
print(x)
#间隔range函数(a,b,c) a表示起始值,b表示偏移量,c表示步长
for x in range(0,10,2):
print(x)
#反向range函数(a,b,c) a表示起始值,b表示偏移量,c表示步长
for x in range(10,,0,-2):
print(x)
how much
while非常容易造成死循环,如何避免:避免判断语句是一个常量,在代码块中需要有能够影响代码块变量的命令
Q:编程习惯有哪些
A:
变量名称尽量有意义,命名可读性要强
为了维护代码的稳定性,不可变数值能用元组就用元组
对于程序嵌套,应该尽量避免,转而使用函数或者elif和字典等
高级代码要求:高性能,封装性好(可复用性高)
python建议,一行代码不得超出80字
避免循环导入 1调用2 2就不能再调用1 否则报错 不推荐
函数嵌套不应超过两层
尽量不要使用a[i]表达序列的数值
函数中尽量不要使用过多的参数,若需要参
数数量大,应该使用对象
枚举内部的变量名类似常量尽量全体大写
对修改是封闭的,对扩展是开放的
定义可以复杂,但调用不能复杂
Q:Python项目的组织结构
A:
what
命名空间:包名.子包名.模块名.类
where
包→模块→类→函数和变量
一个文件夹代表一个包
一个文件代表一个模块
一个class代表一个类
how
调用其他模块的内容
同包内部
import 模块名
调用时 print(模块名.变量名)
不同包内部
import 包名.模块名
调用时 print(包名.模块名)
调用后会生成一个__pycache__文件夹里面包含一个模块名.cpython-36.pyc文件
模块名.cpython-36.pyc 是一个自解码文件
此方法import 只能到达模块
另外可以写成
import 包名.模块名 as m
调用时 print(m.变量名)
调用变量另一种方法:from
from 包名.模块名 import 变量名
调用时 print(变量名)
from 包名 import 模块名
调用时 print(模块名.变量名)
from 包名.模块名 import *
调用时 print(变量名)
#调用多变量,但不推荐
from 包名.模块名 import *
调用时 print(变量名)
#在被调用模块中添加一行代码__all__ = [变量名1,变量名2,变量名3]
其中,列表变量为可以让其他人调用的变量
一次导入多个模块或变量
from 包名.模块名 import 变量名1,变量名2,变量名3
#一行代码写不开,可以在代码后加\然后换行,不推荐
可以使用括号换行
how much
关于__init__.py
1.将一个文件夹变成一个包,这个文件夹必须有一个,init.py 文件(模块)
2.init.py 文件可以为空,只做标注包
3.没有 包名.init 这个命名空间
4.import 包名(或者包下面的模块等)后就会直接执行在__init__.py 文件中命令
5.init.py 文件中命令的应用场景
在__init__.py 文件中定义
all = [模块名1,模块名2,模块名3]
#调用这个包时,只能调用定义后的模块中的变量
6.可以将包内模块所需要的所有变量,都用import进来
可以避免多次重复写,也可以跨包调用
示例:
import 包名
print(包名.模块名.变量名) #调用
包和模块是不会被重复导入的
import 导入模块后就会执行模块内的代码