欢迎光临散文网 会员登陆 & 注册

【Python教程】《零基础入门学习Python》最新版

2022-05-25 08:41 作者:我我我就是我唯一的我  | 我要投稿

修改编辑器的字体,使中英文标点符号差异大些:


用Python设计第一个游戏 P3 - 03:39


  • 点击IDLE菜单栏上"Options-Configure IDLE"
  • 选择"Fonts/Tabs"选择等宽字体(推荐Consolas),点击"Apply"后点击“OK”


Python3代码样式指导手册(PEP8)

https://fishc.com.cn/thread-139746-1-1.html


变量名可以用汉字表示 eg:数量=1


python内置函数共68个


Tab 键除了用于缩进,Tab 键的另一个妙用就是自动填充,比如咱输入 pr 两个字符,再摁一下键盘上的 Tab 键,会弹出一个提示款,IDLE 在猜测你想干哈呢


Python3 虽然支持中文作为变量名,但有些大牛却不赞同这么做,你觉得他们的依据是什么?

答:随着时代的发展,越来越多的编程语言不仅支持纯英文代码,还支持全球多数国家的语言开发,有些变态的甚至还能使用 Emoji 符号……但是,都没能流行起来!为什么呢?以下是小甲鱼认同的几点原因,欢迎补充。

  • 不利于与外国友人协同开发程序;
  • 敲一个中文单词的步骤比英文单词要多;
  • 习惯问题:以前的编程语言多数只支持纯英文,大家只能硬着头皮用英文;
  • 就算是变量名支持中文了,但符号却还是只能使用英文的;
  • 难道你们不觉得切输入法很烦吗?


给变量命名,要避免与 Python 内部使用的名字冲突,不然这个内置函数就废掉了


如果要为一个函数写说明文档,那么你觉得应该使用哪种字符串比较合适?三引号字符串,也就是长字符串合适。


如果在 IDLE 的交互模式中使用 help(obj) 函数,可以查看到 obj 对应的说明文档


print()

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)




1 + 1 >= 2返回 True。 2 >= 2 成立


random -- 生成伪随机数

https://fishc.com.cn/thread-145254-1-1.html

可以实现对伪随机数的攻击,random生成的随机数可以被重现:


改进我们的小游戏(下) P8 - 06:11


random.getstate()获取随机数种子加工之后,随机数生成器的内部状态


改进我们的小游戏(下) P8 - 06:37


x=random.getstate()

random.randint(1,10)

random.setstate(x)

random.randint(1,10)


Python 除法的运算结果是以浮点数的形式存储的(尽管结果可以整除)


浮点数在计算机中的存储是存在 “误差” 的,当浮点数相加的结果等于整数时,偏差则不会出现。如果需要做到 100% 精确计算浮点数,请使用 decimal 模块(传送门)

from decimal import Decimal

a = Decimal('0.1')

b = Decimal('0.3')

print(a - b)

#-0.2


random.randint(a, b) 返回一个随机整数 N,范围是:a <= N <= b


拥有相同的种子的语句,打印的结果是相同

random.sample(range(1,8),6)从1-7之间随机抽取6个不重复数


运算符 // 取比目标结果小的最大整数 -3//2 #-2


如果给 int() 函数传入一个浮点数参数,那么 int() 是简单暴力地将小数部分裁掉(比如 int(9.99) 的结果等于 9)……可是我们更习惯的是使用“四舍五入”的方式来取整。如果不借助其它函数,你能够单纯使用 int() 函数来实现吗

答:只需要将 int() 函数的参数 +0.5 即可实现四舍五入



布尔类型 P11 - 03:18




布尔类型 P11 - 07:12




短路逻辑和运算符优先级 P12 - 01:27


and 和 or 遵从短路逻辑


短路逻辑和运算符优先级 P12 - 03:14


print1 if condition1 else print2


extend()参数必须是可迭代对象,新加内容追加到列表最后一个元素的后面



list变量名.clear() 清空列表


列表X is 列表Y False。因为列表X和Y的值位置不同



列表(V) P24 - 01:41


浅拷贝:copy() 或者 lista=listb[:]

深拷贝:decopy()


两者效果一样,但后者效率更快,但后者推导式语句使用较为复杂时,需要权衡下使用,后期是否好维护



字符串

swapcase()将原字符串大写变小写,小写变大写。

fillchar默认为0


zfill(width) ,当width大于原字符串width, 用0填充左侧。

find()从左往右找,rfind()从右往左找


字符串(II) P29 - 01:54


在find()里的值,没有在字符串里,会返回-1。



字符串(II) P29 - 02:18


在index()里的值,没有在字符串里,会报错。



字符串(II) P29 - 03:21


expandtabs(4)即指定一个tab等于4个空格



字符串(II) P29 - 07:11



#P30

[,start[,end]]代表start和end是可选参数

removeprefix(prefix)和removesuffix(suffix)允许删除指定的前缀或后缀


字符串(IV) P31 - 03:52


将字符串以参数指定的分隔符为依据将字符串切割并返回1个3元组。

partition() 从左往右

rpartition()从右往左



split()从左往右

rsplit()从右往左

splitlines(keepends=False)按行分割并将结果以列表的方式返回。keepends=True表示结果包含换行符


.join()拼接效率 比 +拼接效率



format()


字符串(V) P32 - 07:31





字符串(VI) P33 - 00:24



例如:


适用整数的值有(值前面加#会在输出时显示值类型):

例如


适用浮点数的值有(值前面加#会在输出时显示值类型):

例如:


is 、is not 判断是否同一对象




sort和sorted处理列表排序,使用sort(),原列表会被改变。参数reverse表示反排序,key=len表示按照len大小排序




序列(下) P36 - 00:28


all()判断可迭代对象所有对象是否为真

all()判断可迭代对象任一对象是否为真


序列(下) P36 - 01:22



序列(下) P36 - 03:08



序列(下) P36 - 06:32





序列(下) P36 - 10:38




1个迭代器肯定是1个可迭代对象。可迭代对象可以重复使用,而迭代器则是一次性的。


iter()


next()逐个将迭代器的元素提取出来。当迭代器没有任何元素就会报错



字典(中) P38 - 09:02




字典(中) P38 - 10:55


pop不存在元素会报错,可给一个default值替代报错信息

popitem()在python 3.7版本后删除字典最后加入的键值对。

del语句可以用于字典

clear()清空字典的键值对,字典是空的。



字典(下) P39 - 01:07



字典(下) P39 - 02:30



setdefault()查找一个键是否存在于字典中,如果不存在,则指定一个新的值


复制字典:copy()

逆向排序:reverse(3.8版本及以后才可以)




集合(上) P40 - 05:15


isdisjoint()

issubset()

issuperset()

union()

intersection()

difference()

symmetric_diffference()


.frozenset()创建不可变的集合

.set()创建可变的集合



集合(下) P41 - 06:59


不可变对象是可哈希的,可变对象是不可哈希的!


集合的嵌套使用.frozenset()


其中,/代表/左侧必须是位置参数,不能使用关键字参数


*代表*左侧可以是位置参数或关键字参数,*右侧必须是关键字参数才不会报错


return语句被执行后,直接返回结果,不会再执行之后的语句


使用**可以把参数打包成字典


函数(III) P44 - 10:10




函数(IV) P45 - 00:32


全局变量可以在函数内部中访问,但无法在函数中修改值。



不建议global申明全局变量并修改,易出现难以排查的bug




函数(IV) P45 - 06:30



函数(IV) P45 - 08:44


在内部函数修改外部函数的变量,使用nonlocal语句



函数(IV) P45 - 09:29


作用域的影响范围存在相互覆盖的情况,当冲突出现的时候,python会选择谁?

Local(局部作用域) 、Enclosed(嵌套函数外层函数作用域)、Global(全局作用域)、Build-In(内置作用域)

Local与Global发生冲突时,除非使用global语句申明,否则python会使用Local的变量;

当函数嵌套发生的时候,除非使用nonlocal语句,

否则局部作用域又会覆盖外层函数的作用域的变量


闭包 -- 函数(V) P46 - 00:32



多看几遍...


装饰器 -- 函数(VI) P47 - 07:43



以下写法结果相同



表示调用myfunc()时把myfunc()作为参数传递给装饰器time_master()再调用装饰器




装饰器 -- 函数(VI) P47 - 12:44


多个装饰器 从最靠近函数的@开始


装饰器 -- 函数(VI) P47 - 13:44


以下写法结果相同




lambda表达式 -- 函数(VII) P48 - 02:15


lambda能出现在python不允许def语句出现的地方



生成器 -- 函数(VIII) P49 - 01:20


在函数中,yield表达式代替return语句就是生成器。下例是counter()生成器


生成器的作用是每次提供1个数据。不能使用下标索引的方式获取值,会报错。

generator object 生成对象。



递归 -- 函数(IX) P50 - 00:49


递归(函数调用函数本身),如果没有结束条件,就会不断运行,直至ctrl+c强制终止



汉诺塔 -- 函数(X) P51 - 09:06



def hanoi(n,x,y,z):


    #print("!!--------------------",str(n),x,y,z)


    if n==1:

        print(x,"-->",z)  

       

    else:

        hanoi(n-1,x,z,y)


        #print("++---------------------",str(n-1),x,z,y)


        print(x,"-->",z)

        hanoi(n-1,y,x,z)


      #  print("----------------------",str(n-1),y,x,z) # 1 b a c


n=int(input("层数:"))

hanoi(n,"a","b","c")



使用help(函数名)查看函数文档




函数文档、类型注释、内省 -- 函数... P52 - 04:00


:str 或者:int 、 ->str是给人看的,即类型注释,是作者期望输入的类型,如果不按类型注释输入,python也不会阻止/报错。



函数文档、类型注释、内省 -- 函数... P52 - 08:40


.__name__ 获取函数名字

.__annotations__查看类型注释

.__doc__查看函数文档



高阶函数 -- 函数(XII) P53 - 00:36


当一个函数接收另一个函数作为参数时,该函数为高阶函数

functool库



高阶函数 -- 函数(XII) P53 - 06:17


将1个函数的多个参数拆分多次进行传递


高阶函数 -- 函数(XII) P53 - 07:47


没调用@wraps之前,是有副作用的(红框)


调用后


ctr+f 搜索快捷键



永久存储(中) P55 - 02:09


form pathlib import Path()

Path.cwd() #获取当前目录的路径·

.is_dir()#判断一个路径是否为一个文件夹

.is_file()#判断一个路径是否为一个文件

.exist()#判断一个路径是否存在

.name#获取路径的最后一个部分

.stem获取文件名

.suffix获取文件后缀

.parent获取父级目录

.parents获取逻辑祖先路径构成的序列


.parts将路径的各个组件拆分成元组


.stat查询文件/文件夹的信息


永久存储(中) P55 - 08:40


绝对路径:文件真正存在的路径

相对路径:以当前目录为基准进行一级一级目录推导的路径。使用 . 表示当前路径,..表示上一路径

resolve()将相对路径变为绝对路径


iterdir()获取当前路径下所有子文件和子文件夹

generator object 生成器

打印文件列表


mkdir()创建文件夹。如果要创建的文件夹已存在,会报错。除非exist_ok=True


创建多个文件需要设置红框内容才不会报错

open()打开文件

rename()修改文件名字

replace()替换指定的文件或文件夹

rmdir()删除文件夹(文件夹为空才不报错)

unlink() 删除文件

glob()查找



永久存储(下) P56 - 00:19


with语句能确保文件关闭。



永久存储(下) P56 - 05:44


生成以二进制形式保存内容的pkl文件



读取pkl 内容





异常(下) P58 - 00:22


try-except-else:没运行except就会接着运行else


异常(下) P58 - 01:33


try-except-finally 无论异常是否发生都会运行finally


异常(下) P58 - 05:49


实现代码自爆。

能偷天换日



raise 不能生成异常。

异常列:


异常(下) P58 - 08:29


通常用于代码调试

条件不成立时引发AsserttionError


异常(下) P58 - 09:36


利用异常实现goto


类和对象(I) P59 - 02:59


类里面的变量是属性,函数叫方法。

可通过实例对象访问类的属性和方法


类和对象(I) P59 - 07:17


在创建对象之前,通过类将相关属性和方法给打包到一起,然后通过类生成相应的对象。


类和对象(II) P60 - 01:30



class B:子类 class A:父类

当子类存在与父类相同的属性和方法,访问子类时将得到子类的属性和方法



判断1个对象是否属于1个类 isinstance()

由于B是子类,所以isinstance(b,A)也True


检测1个类是否为另一个类的子类 issubclass()


类和对象(II) P60 - 06:00


1个子类可以同时继承多个父类。



类和对象(II) P60 - 07:47


__dict__可以访问出实例对象有哪些属性


最小的类


类和对象(II) P60 - 01:03


















【Python教程】《零基础入门学习Python》最新版的评论 (共 条)

分享到微博请遵守国家法律