细分编程的基本概念:
1. 程序的构成
用 \ 表示行连接符;
2. 对象的基本组成和内存示意图
对象:由标识、类型、值组成
用id(),获取对象在内存的地址
用type(),获取对象的类型
>>> a=3
>>> a
3
>>> id(a)
256522528
>>> type(a)
<class 'int'>
3. 引用的本质_栈内存和堆内存_内存示意图
变量位于:栈内存
对象位于:堆内存
Python 不需要显示声明类型。根据变量引用的对象,Python解释器自动确定数据类型。并且每个对象都有数据类型,只支持该类型支持的操作
>>> a=3
>>> a
3
>>> a=a+10
>>> a
13
>>> a+="ab"
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
a+="ab"
TypeError: unsupported operand type(s) for +=: 'int' and 'str'
>>> a+=1
>>> a
14
4. 标识符_帮助系统的简单使用_命名规则
a.区分大小写 b.第一个字母必须是字母或者下划线,其后的字符是:字母、数字、下划线 c.不能使用关键字
d.以双下划线开头和结尾的名称通常有特殊意义,尽量避免。
>>> help()
Welcome to Python 3.7's help utility!
If this is your first time using Python, you should definitely check out
the tutorial on the Internet at https://docs.python.org/3.7/tutorial/.
Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules. To quit this help utility and
return to the interpreter, just type "quit".
To get a list of available modules, keywords, symbols, or topics, type
"modules", "keywords", "symbols", or "topics". Each module also comes
with a one-line summary of what it does; to list the modules whose name
or summary contain a given string such as "spam", type "modules spam".
help> keywords
Here is a list of the Python keywords. Enter any keyword to get more help.
False class from or
None continue global pass
True def if raise
and del import return
as elif in try
assert else is while
async except lambda with
await finally nonlocal yield
break for not
help> quit
You are now leaving help and returning to the Python interpreter.
If you want to ask for help on a particular object directly from the
interpreter, you can type "help(object)". Executing "help('string')"
has the same effect as typing a particular string at the help> prompt.
>>>
5. 变量的声明_初始化_删除变量_垃圾回收机制
删除变量:用del ,比如 del(ddd),但ddd的值还在,这时可以用垃圾回收制,也达到释放空间的效果
(注:如果对象没有变量引用,就会被垃圾回收器回收,清除内存空间)
6. 链式赋值_系列解包赋值_常量
链式赋值:
>>> x=y=123
>>> x
123
>>> y
123
系列解包赋值:(对比:在C或者C++ 语言中,需要引进中间变量进行值交换,而在Python中可以直接进行赋值)
>>> a,b,c=4,5,6
>>> b
5
>>> a,b,c=b,a,c
>>> b
4
常量:
Python不支持常量,没有语法规则限制改变一个常量的值
7. 内置数据类型_基本算术运算符
注:/ 表示浮点数除法 ; // 表示整数除法 ; ** 表示幂 (其余和C/C++一样)(0不能做除数,在C/C++中也不能做除数)
用divmod()函数可同时得到商和余数
>>> a=3
>>> a/2
1.5
>>> a//2
1
>>> a**3
27
>>> a%2
1
>>> a/0
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
a/0
ZeroDivisionError: division by zero
>>> divmod(10,3)
(3, 1)
8. 整数_不同进制_其他类型转换成整数
a. 二进制:0b或0B 八进制:0o或者 0O 十六进制:0x或者0X
b.用int()实现类型转换
c.自动转型 ,整数和浮点数做运算,最后的得到浮点型
d. Python2中 int是32位,long 是64位;Python3中 int可以存储任意大小的整数,long 被取消
9. 浮点数_自动转换_强制转换_增强赋值运算符
round()函数可以做四舍五入
10. 时间表示_unix时间点_毫秒和微秒_time模块
a.在计算机中,1970年这个时刻为“unix时间点” #得出来的是 秒.微秒
b. 可以通过time.time()可获得当前时间
11. 多点坐标_绘出折线图_计算两点距离
通过海龟绘图,能形象看到两个点,再通过公式计算得出距离
import turtle
import math
#定义多个点
x1,y1=100,100
x2,y2=100,-100
x3,y3=-100,-100
x4,y4=-100,100
turtle.penup()
turtle.goto(x1,y1)
turtle.pendown()
turtle.goto(x2,y2)
turtle.goto(x3,y3)
turtle.goto(x4,y4)
#计算起始点和终点的距离
dis=math.sqrt((x1-x4)**2+(y1-y4)**2)
print(dis)
12. 布尔值_比较运算符_逻辑运算符_短路问题
逻辑运算符:or,and,not
>>> a=True
>>> b=False
>>> a or b
True
>>> a and b
False
>>> not a
False
13. 同一运算符_整数缓存问题
is:判断两个标识符是不是引用同一个对象 (对比: == 是判断两个对象的值); is not 是判断两个标识符是不是引用不同对象
>>> a=True
>>> b=False
>>> a or b
True
>>> a and b
False
>>> not a
False
>>> a = 1000
>>> b = 1000
>>> a==b
True
>>> a is b
False
>>> id(a)
67210928
>>> id(b)
67210912
>>> c=10
>>> d=10
>>> c is d
True
>>> #在【—5,256】之间的被缓存起来,在同一个位置(由于解释器优化),如果在文件里 【—5,任意数】都为同一地址
>>> a is not b
True
14. 字符串_unicode字符集_三种创建字符串方式_len()
a.python不支持单个字符,一个字符代表长度为1的字符串
b.python3直接支持Unicode 编码(ASIIC码是它的子集);内置函数 ord()可以把字符转化成对应的Unicode码;
内置函数chr()把十进制数字转换成对 应的字符
c.python允许空字符串的存在
>>> a="a,b,c"
>>> a
'a,b,c'
>>> a='a,b,c'
>>> a
'a,b,c'
>>> a"'i'"
SyntaxError: invalid syntax
>>> a=" 'a' "
>>> a
" 'a' "
>>> a="""m="1" b="l"
c="0" """
>>> a
'm="1" b="l"\nc="0" ' #\n 为转义字符
>>> w=''
>>> w
''
>>> len(w)
0
15. 字符串_转义字符_字符串拼接_字符串复制_input()获得键盘输入
a.转义字符: \ + 特殊字符
b.续行符 : \
c.字符串拼接: 如果两边都是字符串,则拼接(另:可以>>> 'a' 'b' 直接得到'ab');都为数字,做加法;两边类型不同,抛出异常
b.不换行打印:print("a",end="") print("e") 结果:ae
e.从控制台读取字符串:
>>> myname=input("请输入名字")
请输入名字 aaa
>>> myname
' aaa'
16. 字符串_str()_使用[]提取字符_replace()替换生成新字符串_内存分析
a. str()实现数字转型字符串 b.使用【】提取字符 (正向搜索(a[0],a[1])还可以反向搜索(a[-1],a[-2]), 搜索范围:到len-1 或 -len)
c.replace()实现字符串替换
>>> a='abc'
>>> a.replace('a','sss')
'sssbc'
>>> a
'abc'
>>> a=a.replace('a','sss')
>>> a
'sssbc'
>>> a
'sssbc'
17. 字符串_切片slice操作_逆序
a.slice操作即:提取子字符串
>>> a="123456789"
>>> a[1]
'2'
>>> a[:] #输出整个字符串
'123456789'
>>> a[1:2] #只包括开头,不含结尾,即不含a[2]
'2'
>>> a[1:5:1] #不跳
'2345'
>>> a[1:5:2] #跳一个字符
'24'
>>> a[:1] #从a[0]开始输到a[1]的上一位
'1'
>>> a[1:] #从a[1]开始输到a[len-1]
'23456789'
>>> a[-3:] #反向搜索:从a[-3]到a[-1]
'789'
>>> a[:-1] #反向搜索:从a[-len]到a[-1]
'12345678'
>>> a[::-1] #逆序输出
'987654321'
>>> a[-8:-3]
'23456'
>>> a[-3:-8] #这样写不行
''
>>> a[::-2]
'97531'
>>> a[1:1000000000] #如果超出了字符串长度,输到最后一个字符即可
'23456789'
18. 字符串_split()分割_join()合并_join()效率测试
a. split和join的使用:
>>> a="a b a b"
>>> a.split()
['a', 'b', 'a', 'b']
>>> a.split("a")
['', ' b ', ' b']
>>> b=["a","b"]
>>> "".join(b)
'ab'
b.当数据量很大时,join合并比用“+”合并要快得多
import time
a=""
time1=time.time()
for i in range(100000):
a+="abc"
time2=time.time()
print("运行时间1:"+str(time2-time1))
li=[] #可变列表
time3=time.time()
for i in range(100000):
li.append("abc") #不断补字符串
a="".join(li)
time4=time.time()
print("运行时间1:"+str(time4-time3))
19. 字符串_驻留机制_内存分析_字符串同一判断_值相等判断
字符串驻留:对符合标识符规则的两个相同的字符串,启用字符串驻留机制
>>> a="a"
>>> b="a"
>>> a is b
True
>>> c="a#"
>>> d="a#"
>>> c is d
False
>>> c == d
True
成员操作符:(in 和 not in)左边的串是否在右边里
>>> a="aaaabb"
>>> b="b"
>>> b in a
True
>>> b not in a
False
>>> c="ww"
>>> c in a
20. 字符串_常用查找方法_去除首位信息_大小写转换_排版
a.常用查找方法:
>>> a="qwertyuiop"
>>> len(a)
10
>>> a.startswith("qwe") #是否以qwe开头
True
>>> a.endswith("op") #是否以op结尾
True
>>> a.find("w") #第一次出现指定字符串的位置
1
>>> a.rfind("w") #最后一次出现指定字符串的位置
1
>>> a.find("rt")
3
>>> a.count("w") # w 在字符串中出现几次
1
>>> a.isalnum() #所有字符全是字母或者数字
True
去除首尾信息: 运用a.strip()函数
大小写转换:a.capitalize() 首字母大写; a.title() 每个单词的首字母大写 ; a.upper() 所有字符都转成大写 ;a.lower() 所有字母转小写 ; a.swapcase() 所有字母大小写转换
>>> a="a is b "
>>> a.capitalize()
'A is b '
>>> a.title()
'A Is B '
>>> a.upper()
'A IS B '
>>> a.lower()
'a is b '
>>> a.swapcase()
'A IS B '
格式排版: center():居中 (如 :a.center(10,"*")); ljust() 左对齐 ;rjust() 右对齐
>>> a="we"
>>> a.center(10)
' we '
>>> a.ljust(10,"*")
'we********'
其他方法:(对字符串的组成(数字、字母)进行判断,可用的时候再百度)
21. 字符串_format格式化_数字格式化操作
format()基本用法:两种方法,如果花括号内用数字占位,则需要注意输入顺序,如果使用字符串,则不需要;
>>> a="名字是:{0},年龄是:{1}"
>>> a.format("李",13)
'名字是:李,年龄是:13'
>>> b="名字是:{0},年龄是:{1},{0}真可爱"
>>> b.format("李",15)
'名字是:李,年龄是:15,李真可爱'
>>> c="名字是{name},年龄是{age}"
>>> c.format(age=19,name="李")
'名字是李,年龄是19'
填充和对齐:
^,< ,>分别是居中,左对齐,右对齐
>>> "{:#>9}".format("qwe")
'######qwe'
>>> "{:#^9}".format("qwe")
'###qwe###'
>>> "{0:#^8},{1:#^8}".format("qwe","qwe")
'##qwe###,##qwe###'
数字格式化:
>>> "{:0<4d}".format(4)
'4000'
>>> "{:0.2f}".format(2.3333333333)
'2.33'
>>> "{:X<4d}".format(3)
'3XXX'
>>> "{:.2%}".format(0.25)
'25.00%'
>>> "{:10d}".format(0.25)
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
"{:10d}".format(0.25)
ValueError: Unknown format code 'd' for object of type 'float'
>>> "{:10d}".format(25)
' 25'
>>> "{:.2e}".format(250)
'2.50e+02'
>>> "{:.3e}".format(250)
'2.500e+02'
22. 可变字符串_io.StringIO
>>> import io
>>> a="ab"
>>> sio=io.StringIO(a)
>>> sio
<_io.StringIO object at 0x036E1F80>
>>> sio.getvalue()
'ab'
>>> sio.seek(1)
1
>>> sio.write("g")
1
>>> sio.getvalue()
'ag'
23. 运算符总结_位操作符_优先级问题
>>> a=5
>>> 3<a<10
True
>>> #位操作符
>>> a=0b111
>>> b=0b100
>>> a
7
>>> b
4
>>> c=a|b
>>> c
7
>>> c=a^b
>>> bin(c)
'0b11'
>>> c=a&b
>>> bin(c)
'0b100'
>>> c
4
>>> a=0b100
>>> b=0b100
>>> bin(a^b)
'0b0'
>>> a<<2
16
>>> a
4
>>> a<<2
16
>>> a<<3
32
>>> a<<4
64
>>> a>>2
1
>>> a>>4
0
>>> [10,20]+[10]
[10, 20, 10]
>>> a=10
>>> a<<=2
>>> a
40