小坷笔记:Python入门

小坷笔记:Python入门
坷写在开头
“人生苦短,我用python”,作为最流行最好用的编程语言,非常好学,一学就会。
最基础
输出函数print
输出字符串
1 | print('helloworld') |
输出数字
1 | print('520') |
输出含有运算符的表达式(此时不要加单引号)
1 | print('1+2')#输出1+2 |
将数据输出到文件中,注意点:使用file=fp,且不带单引号
1 | fp=open('D:/text.txt','a+')#a+:如果文件不存在就创建,如果文件存在就追加(意味着该程序每运行一次,文件里的helloworld就会多一个) |
不换行输出(输出内容在一行中)
1 | print('hello''world''python') |
转义字符
1 | print('hello\nworld')#\n:即为newline,换行 |
字符编码
无论是汉字还是字母在电脑中都算是字符,一个字符对应一个整数,这个整数可使用二进制,八进制,十进制,十六进制,当然最后到计算机中都会变成二进制,因为计算机只识别二进制
1 | print(chr(0b100111001011000))#0b即二进制,chr表示该二进制对应的ASCII码对应的字符,即汉字乘 |
保留字(给任何对象命名时都不能用)
1 | import keyword |
标识符(可以是字母、数字、下划线,不能以数字开头,不能是保留字,严格区分大小写)
变量
1 | name='玛利亚' |
变量可以多次赋值,但在多次赋值后会指向最后一个
1 | name='玛利亚' |
数据类型
整数类型 int 如98
默认的是十进制,二进制0b,八进制0o,十六进制0x
1 | n1=90 |
1 | print('十进制',118) |
浮点数类型 float 如3.1415
1 | a=3.1415 |
但是由于计算机是通过二进制进行存储的,所以存储浮点数会有误差,如下
1 | a=1.1 |
输出结果并非3.3,因此需要导入模块Decimal来矫正
1 | from decimal import Decimal |
布尔类型 bool 只有True False
1 | f1=True |
同时布尔值可以转成整数计算
1 | print(f1+1)#输出2 |
字符串类型 str 如’人生苦短,我用python’
可以使用单引号’,双引号“和三引号,其中三引号可以分行
1 | str1='人生苦短,我用python' |
数据类型转换
1 | name='吴坷航' |
str()可以将其他类型转换成str类型
1 | a=90 |
int()可以将其他类型转换成int类型,注意:文字、字母类和小数类字符串无法转成int,浮点数类转化时抹零取整
1 | f1=98.7 |
float()可以将其他类型转换成float类型,注意:文字、字母类和小数类字符串无法转成int,整数类型转换后会加.0
1 | '''嘿嘿, |
输入函数input
1 | present=input('你想要什么礼物') |
从键盘录入两个整数,计算两个整数的和
1 | a=input('请输入一个加数') |
1 | a=input('请输入一个加数') |
运算符
算数运算符
标准运算符(加+,减-,乘*,除/,整除//)
1 | print(1+1) |
取余运算%
1 | print(11%2) |
幂运算
1 | print(2**3)#表示2的3次方 |
一正一负进行整除,会向下取整
1 | print(9//-4)#-3 |
一正一负进行取余,公式:余数=被除数-除数*商
1 | print(9%-4)#-3 9-(-4)*(-3)=-3 |
赋值运算符,运算顺序从右到左
1 | i=3+4 |
支持链式赋值
1 | a=b=c=20 |
支持参数赋值
1 | a=20 |
支持系列解包赋值
1 | a,b,c=20,30,40#要求等号左边和右边数量相等 |
交换两个变量的值
1 | a,b=10,20 |
比较运算符(结果为布尔类型)> < >= <= !=
1 | a,b=10,20 |
==比较的是值还是标识呢?比较的是值
比较对象的标识用is
1 | a=10 |
1 | lst1=[11,22,33,44] |
布尔运算符
and,or,not,in,not in
and并且
1 | a,b=1,2 |
or 或者
1 | print(a==1 or b==2)#True |
not取反
1 | f=True |
in和not in
1 | s='helloworld' |
位运算符
&按位与,只有同为1时结果为1,其它时候为0
1 | print(4&8)#4是00000100,8是00001000,因此输出0 |
|按位或,只要有一个为1结果就是1
1 | print(4|8)#输出12 |
左移位运算符<<,高位溢出低位补0,结果相当于乘2
1 | print(4<<1)#8 |
右移位运算符>>,高位补0低位溢出,结果相当于除2
1 | print(4>>1)#2 |
运算符的优先级:
算数运算符(先算乘除再算加减,有幂运算优先幂运算)>位运算>比较运算(运算结果是True和False)>布尔运算
有括号优先计算括号里的
Python一切皆对象,所有的对象都有一个布尔值
以下对象的布尔值是False:False,数值0,None,空字符串,空列表,空元组,空字典,空集合
1 | print(bool(False)) |
除以上对象的bool值为False,其他对象的bool值都为True
语法结构
顺序结构
1 | print('程序开始') |
分支结构-单分支结构 if
1 | money=1000 |
分支结构-双分支结构 if else
从键盘录入一个整数,判断是奇数还是偶数
1 | num=int(input('请输入一个整数')) |
分支结构-多分支结构 多选一执行if elif elif …else(可省略)
从键盘录入整数作为成绩
90-100 A
80-89 B
70-79 C
60-69 D
0-59 E
小于0或大于100为非法数据
1 | score=int(input('请输入一个成绩:')) |
分支结构-嵌套if
会员购物金额 >=200 8折
=100 9折
<100 不打折
非会员 >=200 9折
<200 不打折
1 | answer=input('您是会员吗?y/n') |
条件表达式
语法结构:x if 判断条件 else y ,如果判断条件为True,表达式的返回值为x,否则为y
从键盘录入两个整数,比较两个整数的大小
已学过的写法:
1 | num_a=int(input('请输入一个整数')) |
条件表达式写法:
1 | num_a=int(input('请输入一个整数')) |
pass语句
什么都不做,只是一个占位符,用于还没想好代码怎么写的情况
1 | answer=input('您是会员吗?y/n') |
range的三种创建方式
第一种创建方式 range(stop) 创建一个【0,stop)的整数序列,步长为1
1 | r=range(10) |
第二种创建方式 range(start,stop) 创建一个【start,stop)的整数序列,步长为1
1 | r=range(1,10) |
第三种创建方式 range(start,stop,step) 【start,stop)的整数序列,步长为step
1 | r=range(1,10,2) |
判断指定整数在序列中是否存在,用in和not in
1 | print(10 in r)#False 表示10不在当前序列中 |
循环结构:while循环 for in循环
while循环
1 | a=1 |
四步循环法
1.初始化变量
2.条件判断
3.条件执行体
4.改变变量
计算0到4的和
1 | sum=0 |
计算1到100之间的偶数的和
1 | sum=0 |
语法结构:for 自定义对象 in 可迭代对象(字符串,序列)
1 | for item in 'Python': |
range()产生的整数序列也是可迭代对象
1 | for i in range(10): |
如果循环体中不需要用到自定义变量,可将变量写成_
1 | for _ in range(5): |
使用for循环计算1到100的偶数和
1 | sum=0 |
输出100到999之间的水仙花数(153=111+555+333)
1 | for item in range(100,1000): |
break语句:用于结束循环结构
从键盘录入密码,最多三次,如果正确就结束循环
1 | for item in range(3): |
也可以用while
1 | while a<3: |
continue语句:用于结束当前循环,进入下一个循环
输出1-50之间所有5的倍数
1 | for item in range(1,50): |
使用continue来写
1 | for item in range(1,50): |
else语句
三种情况:
- if…else 已讲过
- while…else 没有碰到break时执行
- for…else 没有碰到break时执行
1 | for item in range(3): |
嵌套循环
输出一个三行四列的矩形
1 | for i in range(1,4):#行数 |
打印一个九九乘法表
1 | for i in range(1,10): |
二重循环中的break和continue用于控制本层循环
1 | for i in range(5): |
列表
创建列表的第一种方式:[]
1 | lst=['hello','world',98] |
创建列表的第二种方式:运用内置函数list()
1 | lst2=list(['hello','world',98]) |
可以通过索引获取制定对象的值
正向索引:从0到N-1 负向索引:从-N到-1
1 | print(lst) |
可以通过index()函数获取指定对象的索引
1 | lst=['hello','world',98,'hello'] |
也可以在指定的[start,stop)范围内查找
1 | lst=['hello','world',98,'hello'] |
列表的切片
1 | lst=[10,20,30,40,50,60,70,80] |
省略step
1 | print(lst[1:6:])#默认步长为1 |
1 | print('原列表',id(lst)) |
省略start
1 | print(lst[:6:2])#[10, 30, 50] 默认start为0 |
省略stop
1 | print(lst[1::2])#[20, 40, 60, 80] 默认stop为N |
step为负数的情况
1 | print(lst[::-1])#[80, 70, 60, 50, 40, 30, 20, 10],即逆序,第一个元素是原列表第一个元素,最后一个元素为原列表第一个元素 |
列表元素的判断和遍历
in和not in
运算符中讲过
1 | print('p' in 'python')#True |
列表中同样
1 | lst=[10,20,'python','hello'] |
列表元素的遍历
1 | for item in lst: |
列表元素的增加操作
append() 向列表的末尾添加一个元素
1 | lst=[10,20,30] |
1 | lst2=['hello','world'] |
insert()在列表任意位置添加一个元素
1 | lst.insert(1,90)#在索引为1的位置上添加一个90 |
切片 在列表的任意位置上添加至少一个元素
1 | lst3=[True,False,'hello'] |
列表元素的删除操作
1 | remove() 从列表中移除一个元素 |
pop() 删除一个指定索引上的元素
1 | lst.pop(1)#将索引为1上的元素移除 |
切片
至少删除一个元素,但在切片后会产生新的列表对象
1 | new_lst=lst[1:3] |
如何用切片不产生新的列表对象而删除原列表中的内容
1 | lst[1:3]=[] |
clear() 清除列表中元素
1 | lst.clear() |
del 删除列表
1 | del lst |
print(lst) 程序会报错,因为此时已经没有lst这个列表了
列表元素的修改
为指定索引元素赋予一个新值
1 | lst=[10,20,30,40] |
为指定的切片赋予一个新值
1 | lst[1:3]=[300,400,500,600] |
列表元素的排序操作
sort() 默认升序
1 | lst=[20,40,10,98,54] |
可通过关键字参数,实现降序
1 | lst.sort(reverse=True) #reverse=True表示降序排序 reverse=False表示升序排序 |
使用内置函数sorted()
1 | new_lst=sorted(lst) |
两个方法的区别:sort()方法是对原列表进行操作,而内置函数sorted()是产生了一个新列表
列表生成式
1 | lst=[i for i in range(1,10)] |
字典
Python内置的数据结构之一,与列表一样是可变序列,以键值对方式存储数据,是无序序列
字典的实现原理和查字典类似,根据key查找value所在位置
字典的创建
第一种方式,使用{}
1 | scores={'张三':100,'李四':98,'王五':45} |
第二种方式:使用内置函数dict()
1 | student=dict(name='jack',age='20') |
字典元素的获取
第一种方式[]
1 | scores={'张三':100,'李四':98,'王五':45} |
第二种方式get()
1 | print(scores.get('张三'))#100 |
key的判断
1 | scores={'张三':100,'李四':98,'王五':45} |
获取字典视图的三种方法
keys() 获取所有的key
1 | keys=scores.keys() |
value() 获取所有的value
1 | values=scores.values() |
items()获取所有的key-value对
1 | items=scores.items() |
字典元素的遍历
1 | for item in scores: |
字典的特点:字典中所有元素都是key-value对,key不允许重复,value允许重复
1 | d={'name':'张三','name':'李四'} |
字典的元素是无序的,因此不能插入对象
字典占用内存较大,但查找速度较快
字典生成式 内置函数zip()
1 | items=['Books','Fruits','Others'] |
元组
Python内置的数据结构之一,是一个不可变序列,从外观上来讲,元组和列表的区别是元组是(),列表是[]
可变序列:列表,字典
不可变序列:元组,字符串,没有增、删、改的操作
1 | s='hello' |
元组的创建方式
第一种方式,使用()
1 | t=('Python','world',98) |
第二种方式,使用内置函数tuple()
1 | t1=tuple(('Prthon','world',98)) |
第一种方式里小括号可以省略
1 | t2='Prthon','world',98 |
如果元组只有一个元素,必须加上小括号和逗号,不然就会被判定为其他类型
1 | t=(10,)#逗号不能省 |
空元祖
空列表
1 | lst=[] |
空字典
1 | d={} |
空元组
1 | t4=() |
元组是不可变序列,所以如果元组里的对象是不可变对象则没有任何办法,但如果元组里的对象是可变对象如列表,则可变对象里的数据可以修改
1 | t=(10,[20,30],9) |
元组是可迭代对象,可以使用for in进行遍历
1 | t=('Prthon','world',98) |
集合
Python语言提供的内置数据结构,和列表、字典一样属于可变类型,集合是没有value的字典
集合的创建方式
第一种 {}
1 | s={2,3,4,5,5,6,7,7} |
第二种 set()
1 | s1=set(range(6)) |
定义一个空集合
1 | s6={}#不可以这样,这样是字典类型 |
集合元素的判断操作
1 | s={10,20,30,40,50} |
集合元素的新增操作
调用add()一次添加一个元素
1 | s.add(80) |
调用update()一次至少添加一个元素
1 | s.update({200,300,400})#可以添加集合 |
集合元素的删除操作
通过remove()一次删除指定元素,如果元素不存在会报错
1 | s.remove(300) |
通过discard()一次删除指定元素,但元素不存在不会报错
1 | s.discard(100) |
通过pop()一次删除任意元素,这种情况指定参数会报错,因为删除的元素是任意的
1 | s.pop() |
通过clear()清空集合
1 | s.clear() |
集合的关系
两个集合是否相等,通过==和!=
1 | s={10,20,30,40} |
一个集合是否另一个集合的子集,通过issubset()
1 | s1={10,20,30,40,50,60} |
一个集合是否是另一个集合的超集/母集,通过issuperset()
1 | print(s1.issuperset(s2))#True |
两个集合是否含有交集,通过isdisjoint()
1 | print(s2.isdisjoint(s3))#这里注意,有交集为False |
集合的数学操作
求两个集合的交集
1 | s1={10,20,30,40} |
求两个集合的并集
1 | print(s1.union(s2))#{40, 10, 50, 20, 60, 30} |
求两个集合的差集
1 | print(s1.difference(s2))#10 |
求对称差集(即两个差集的并集)
1 | print(s1.symmetric_difference(s2))#{50, 10, 60} |
集合的生成式
将列表生成式里的[]改成{}就是集合生成式(没有元组生成式)
复习一下列表生成式
1 | lst=[i*i for i in range(6)] |
集合生成式
1 | s={i*i for i in range(6)} |
总结:
列表(list) 可变 可重复 有序 []
元组(tuple)不可变 可重复 有序 ()
字典(dict) 可变 key不可重复value可重复 无序 {key:value}
集合(set) 可变 不可重复 无序 {}
字符串
字符串的驻留机制:仅保留一份相同且不可变的字符串的方法,对相同的字符串仅保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串地址赋给新空间
1 | a='Python' |
在需要字符串拼接时建议使用str类型的join方法而非+
字符串的查询操作
index()查找子串substr第一次出现的位置,若子串不存在会报错
rindex()查找子串substr最后一次出现的位置,若子串不存在会报错
find()查找子串substr第一次出现的位置,若子串不存在不会报错,会输出-1
rfind()查找子串substr最后一次出现的位置,若子串不存在不会报错,会输出-1
1 | s='hello,hello' |
字符串的大小写转换
upper():把字符串中所有字符都转成大写
lower():把字符串中所有字符都转成小写
swapcase():把所有大写转成小写,所有小写转成大写
capitalize():把第一个字符转成大写,其余字符转成小写
title():把每个单词的第一个字符转成大写,每个单词的其他字符转成小写
1 | s='hello python' |
字符串内容的对齐
center():居中对齐,第一个参数指定宽度,第二个参数指定填充元符,默认是空格,设置宽度小于实际宽度则返回原字符串
ljust():左对齐,第一个参数指定宽度,第二个参数指定填充元符,默认是空格,设置宽度小于实际宽度则返回原字符串
rjust():右对齐,第一个参数指定宽度,第二个参数指定填充元符,默认是空格,设置宽度小于实际宽度则返回原字符串
zfill():右对齐,左边用0填充,该方法只接受一个参数,用于指定字符串的宽度,设置宽度小于实际宽度则返回原字符串
1 | s='hello,Python' |
字符串的劈分方法
split():
从字符串左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表
也可以通过参数sep指定劈分符;
也可以通过参数maxsplit指定劈分字符串时的最大劈分次数,经过最大劈分次数后,剩余的子串会单独作为一部分
rsplit():
从字符串右侧开始劈分,其他和split()一样
1 | s='hello world Python' |
字符串的判断方法
isidentifier() 判断指定的字符串是不是合法的标识符
isspace()判断指定字符串是否全部由空白符组成(回车,换行,水平制表符)
isalpha()判断指定字符串是否全部由字母组成
isdecimal()判断指定字符串是否由十进制数字组成
isnumeric()#判定字符串是否全部由数字组成
isalnum()#判定字符串是否全部由字母和数字组成
1 | s='hello,python' |
字符串的替换
replace():第一个参数指定被替换的子串,第二个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不受影响,可以通过第三个参数指定最大替换次数
1 | s='hello,Python' |
字符串的合并
join():将列表或者元组中的字符串合并成一个新的字符串
1 | lst=['hello','world','Python'] |
字符串的比较操作
运算符:> >= < <= == !=
比较规则:首先比较两个字符串中的第一个字符,如果相等则比较下一个字符,依次比较下去直到不相等为止
比较原理:两个字符比较时,比较的是原始值,通过调用内置函数ord()可以获得指定字符的原始值
同时,调用内置函数chr()也可以获得指定原始值对应的字符
1 | print('apple'>'app')#True |
字符串的切片操作
字符串是不可变类型,不可增,删,改,切片操作会产生新的对象
1 | s='hello,Python' |
格式化字符串
格式化字符串既按一定格式输出的字符串,两种方式:
- %作占位符 %s字符串 %i或%d整数 %f浮点数
- {}作占位符
- f-string
1 | name='张三' |
格式化里的宽度和精度
1 | print('%10d' % 99)# 99 10表示宽度 |
另类的表示宽度和精度的方式
1 | print('{0:.3}'.format(3.1415926))#3.14 .3表示宽度 |
字符串的编码转换
编码
1 | s='天涯共此时' |
解码
1 | byte=s.encode(encoding='GBK') #要先编码才能解码,byte代表的就是一个二进制数据(字节类型的数据) |
函数
函数的定义
1 | def calc(a,b):#a和b称为形式参数,简称形参 |
函数调用的参数传递:
- 位置实参,即位置一一对应,如上
- 关键字实参,即根据形参名称调用实参
1 | res=calc(b=20,a=10)#=左侧的a和b称为关键字参数 |
1 | def fun(arg1,arg2): |
在函数调用过程中,进行参数的传递
如果是不可变对象,如n1,在函数体修改过程中不会影响实参的值(arg1的修改为100,不会影响到n1的值)
如果是可变对象,如n2,在函数体修改过程中会影响实参的值(arg2的修改为.append(),会影响到n2的值)
1 | def fun(num): |
函数的返回值:
- 如果函数没有返回值(函数结束后,不需要向调用处提供数据),return可以省略不写
- 函数的返回值,如果是一个,直接返回该类型的数据
- 函数的返回值,如果是多个,返回结果为元组
可变参数
可变参数分为个数可变的位置参数和个数可变的关键字参数
个数可变的位置参数:
- 定义参数时,可能无法事先确定传递的位置参数的个数时,使用可变的位置参数
- 使用*来定义
- 结果为一个元组
1 | def fun(*args): |
个数可变的关键字形参:
- 无法事先确定传递的关键字实参的个数时
- 使用**定义
- 结果为一个字典
1 | def fun1(**args): |
变量的作用域
分为局部变量和全局变量
1 | a=100 #全局变量 |
在局部,当局部变量和全局变量名称相同时,局部变量优先级更高
1 | def calc3(x,y): |
匿名函数lambda
没有名字的函数,只能使用一次,一般在函数的函数体只有一句代码且只有一个返回值时,可以使用匿名函数来简化
1 | def calc(a,b): |
递归函数
在一个函数的函数体内部调用该函数本身
一个完整的递归由两部分组成:一部分是递归调用,一部分是递归终止条件
使用递归计算N的阶乘
1 | def fac(n): |
斐波那契数列
1 | def fac(n): |
类型转换函数
bool(obj) 获取指定对象obj的布尔值
str(obj) 将指定对象obj转成字符串类型
int(x) 将x转成int类型
float(x) 将x转成float类型
list(sequence) 将序列转成列表类型
tuple(sequence) 将序列转成元组类型
set(sequence) 将序列转成集合类型
数学函数
abs(x) 获取x的绝对值
divmod(x,y) 获取x和y的商和余数
max(sequence) 获取sequence的最大值
min(sequence) 获取sequence的最小值
sum(iter) 对可迭代对象进行求和运算
pow(x,y) 获取x的y次幂
round(x,d) 对x进行保留d位小数,结果四舍五入
1 | print('绝对值:',abs(100),abs(-100)) |
迭代器操作函数
sorted(iter) 对可迭代对象进行重新排序
reversed(sequence) 反转序列生成新的迭代器对象
zip(iter1,iter2) 将iter1和iter2打包成元组并返回一个可迭代的zip对象
enumerate(iter) 根据iter对象创建一个enumerate对象
all(iter) 判断可迭代对象iter中所有元素布尔值是否都为True
any(iter) 判断可迭代对象iter中所有元素布尔值是否都为False
next(iter) 获取迭代器下一个元素
filter(function,iter) 通过指定条件过滤序列并返回一个迭代器对象
map(function,iter) 通过函数function对可迭代对象iter的操作返回一个迭代器对象
1 | lst=[54,56,77,4] |
1 | new_lst=reversed(lst) |
1 | x=['a','b','c','d'] |
1 | enum=enumerate(y,start=1) |
剩余函数都大同小异
其他一些实用函数
fortmat(value,format_spec) 将value以format_spec格式进行显示
len(s) 获取s的长度或s元素个数
id(obj) 获取对象的内存地址
type(x) 获取x的数据类型
eval(s) 指s这个字符串所表示的Python代码,即去掉字符串的引号
1 | print(format(3.14,'20')) #数值型默认右对齐 |
1 | print(eval('10+30')) #40 |
类和对象
类(class)就是从多个对象中抽取出“像”的属性从而归纳总结出来的一个类别
例如int,float,str这些都是类
我们可以自己定义类,类名称首字母必须大写
编写一个Person类型
1 | class Person(): |
现在已经创建类了,但类是模版,相当于图纸,还需要创建自定义类的对象才可以使用,语法:对象名=类名()
1 | per=Person() #per就是Person类型的对象 |
类的具体语法:
- 类属性 直接定义在类中,方法外的变量
- 实例属性 定义在__init__方法中,使用self打点的变量
- 实例方法 定义在类中的函数,而且自带参数self
- 静态方法 使用装饰器@staticmethod修饰的方法
- 类方法 使用装饰器@classmethod修饰的方法
1 | class Student: |
示例:编写学生类,并创建三个学生对象
1 | class Student: |
动态绑定属性和方法
1 | stu2.gender='男' |
Python中权限控制
单下划线开头:表示受保护,允许类本身和子类进行访问,但实际可以被外部代码访问
双下划线开头:表示私有,只允许定义该属性或方法的类本身访问
首尾双下划线:一般表示特殊的方法
1 | class Student(): |
继承的概念
(以下这段转自我看到的解释的很好的帖子)
Python单继承
1 | class Goat(object): |
分析: My_favor继承了goat这个类,所以就拥有goat类的所有属性和方法。
Python多继承
1 | class Goat(object): |
分析:如果一个类继承多个父类的时候,优先继承的是第一个类的属性和方法,也即若想优先继承哪个类,就把哪个类放在最前面即可。
1 | class Goat(object): |
分析:如果子类和父类拥有同名属性和方法,子类创建对象调用属性和方法的时候,调用到的是子类里面的同名属性和方法。
使用super的继承
上述方法在继承父类的属性和方法时,若父类的类名修改的话,子类在继承的时候也要相应的进行修改,同时代码量大,复杂。接下里介绍super方法继承。
继承一个类
1 | class Goat(object): |
分析:使用super来继承Mamba这个类。
继承多个类
1 | class Goat(object): |
分析:同时调用多级类。
定义私有属性和方法
1 | class Goat(object): |
分析:设置私有属性或者函数,在属性或者函数钱加”__“即可。由于上面中self.__name = “乔丹”,设置了私有属性,所以只能用Mamba的初始化来进行执行。
后记
学到这里Python基础就已经足够。
后续关于Pyhton的更新就主要是机器学习、人工智能方向了。