Python学习指南:这35个核心要点你知道吗?

昨天,在整理书架时,我发现了一本Python入门指南。
封面已经变黄了。
记得2 008 年刚入行时,导师递给我一杯咖啡,在屏幕上敲下一行代码:x=“hello”3 ,然后问我要打印什么。
有一瞬间,我以为这是“你好,你好,你好”。
教练点点头说这是一个串弦重复动作。
现在回想起来,这包括字符串不变性和 Python 原语的灵活行为的细节。

等一下,还有一件事。
当时我无法弄清楚整数除法 / 和 // 。
讲师以会计账簿为例进行讲解。
1 00/3 是 3 3 .3 3 3 ...,1 00 // 3 是 3 3 ,这与数学中的舍入一致。
这些细节现在都记录在Python3 文档中,但考虑到当时的混乱,我发现它们相当有趣。

我突然想起了高精度的十进制数。
不久前,我正在帮助财务同事调试一份报告。
我用浮点数计算税收,0.1 3 的结果是0.3 0000000000000004 我一转换成分数,立刻就变成了准确的分数。
他们还问我为什么没有人系统地教这个。
本教程主要关注Web开发,因为它很少用于金融场景。

列表理解真的很容易使用。
去年我重构了旧代码,将 5 00 行循环改为一行列表推导和过滤。
我的同事说这就像魔法一样。
但真正令人惊讶的是发电机。
处理 1 0GB 日志文件时,在 open('log.txt') 中使用 for 行不会影响内存。
这种内存管理机制类似于 C++ 中的智能指针,后跟引用计数和垃圾收集。

类和装饰器是两座大山。
当我在 2 01 0 年第一次编写 Web 框架时,我花了两天时间尝试找出 functools.wraps 来为我的视图功能添加登录验证。
现在查看源代码,我注意到 Django 的 @login_required 装饰器还包含数据库查询。
这项技术非常复杂,初学者确实需要从基础开始。

asyncio 是另一个障碍。
2 02 0年,团队接手了一个物联网项目,使用asyncio读写传感器数据。
性能比多线程好得多。
但当我写《等待》时,总感觉像是在玩俄罗斯方块游戏,生怕某些《等待》不按顺序进行。
可能需要多年的练习才能掌握这种异步编程。

等一下,我还有一个问题。
现在人工智能非常流行,越来越多的年轻人开始学习Python。
但当我 1 0 年前了解动态类型时,有些人仍然说它没有静态类型那么严格。
现在,动态类型与元类和装饰器相结合非常灵活。
Python 会像建造未来的乐高积木一样吗?只要你了解了规则,你能创造出的东西将会变得越来越离谱。

python入门教材(一)

说实话,在学习Python变量的时候,一开始我觉得很神秘。
其对“不声明直接使用”的巧妙处理,恐怕会让C语言人血压升高。
不过仔细一想,还真没什么麻烦。
例如,当我上次编写爬虫脚本时,我只是简单地定义了城市、日期和 URL 等变量,并在中间来回更改它们。
我什至不必首先担心它们是什么类型,只需分配新值即可。

有趣的是,Python 的变量类型转换绝对是令人惊叹的。
我的一个同学在写程序的时候,突然把计数器计数改为字符串“end”。
结果,后一个论点完全错误。
这让我想起虽然类型转换自由是好事,但是在调试的时候很容易陷入麻烦。
就像这段代码: 蟒蛇 分数=9 5 分数=“优秀” Print(score) 最终给出“优秀”的输出
这种隐式转换有时是一个缺点。

多变量作业是最有趣的。
我在写测试脚本的时候,经常使用A,B=1 ,2 ​​。
一行代码传输两个值,比传统的A=1 要好很多; B = 2 但最神奇的是变量交换。
当 x, y = y 时,写成 x。
当我第一次看到这个的时候,我以为编译器会报错。
后来才知道这是元组拆包的一个巧妙操作,直接交换了值。
效率高得灾难性曾是。

运算符是最简单的,但也是最容易忽略细节的。
比如添加相同类型就没有问题: 蟒蛇 a=5 b = 3 print(a + b) 输出 8
但是如果添加不同的类型,它会爆炸。
比如5 +“公斤”就会直接崩溃。
这提醒我在编写数据处理脚本时必须特别小心类型混合。
字符串乘法非常有趣: 蟒蛇 "Hello" 3 输出 "HelloHelloHello"
我在生成测试数据时经常使用这个操作。
“错误!错误!错误!”就像即时通讯可以通过一行代码完成一样。

我经常使用取模和舍入运算来处理日期和时间。
例如,计算剩余秒数: 蟒蛇 Total_Seconds = 3 6 00
(datetime.now().Seconds % 6 0)
这种求余运算比直接计算 3 6 00
秒更通用,并且在闰秒发生时仍然可以应对。
但要小心//舍入操作。
负数将向下舍入: 蟒蛇 -5 // 2 个输出 -3
在调试和测试过程中,这个描述曾经让我感到困惑。
本来想四舍五入到-2 ,结果直接变成了-3 所以对负数要非常小心。

我很习惯使用数据类型转换函数 int()、str() 和 float()。
但有一个教训,强制转换会导致错误: 蟒蛇 int('3 .1 4 ') 给出 3 个输出,没有错误 int("abc") 报错 ValueError
这提醒我最好在转换前加上一个判定,避免程序突然崩溃。
是。
这样写比较安全: 蟒蛇 尝试: value = int(input("请输入一个数字:")) 除了值错误: print("输入的数字无效")
在块中编写代码时,变量名称和类型混合在一起很容易让人头晕。
我习惯于为变量提供反映其类型的名称,例如 user_age 和 file_path,这样当我查看代码时我至少知道它应该做什么。
当然,Python 的动态类型功能确实很酷,但编写无人能理解的“神奇代码”也很容易。
像我师弟写的脚本,变量temp一会儿存温度值,一会儿存状态字符串,最后直接崩溃。
这件事让我明白,自由越大,责任越大。

在块中写入Python变量是困难还是简单。
最重要的是要养成良好的习惯,否则在调试时你最终会把自己逼疯的。

Python零基础入门到精通-6.1节:彻底掌握Python中的变量

哎呀,让我告诉你Python 中的变量。
我当年也是通过很多坑才了解到这一点的。

以两年前我带一个小徒弟学习Python为例。
一开始他不明白变量是什么。
我告诉他,想想你的冰箱。
冰箱只是一个容器。
你把食物放进去,你想什么时候拿出来就可以。
变量就像一台冰箱,一个存储数据的“盒子”。

比如你写x=1 0,这说明你在电脑上标记了一小块区域,插入了数字1 0两天后,你想改一下,写x=2 0。
嘿嘿,那块地的数字从1 0变成了2 0。
但是“盒子”x本身还是叫x,没变。

这个东西的特别之处在于它不存储数字1 0本身。
它将该号码的“门牌号”存储在内存中。
一旦知道门牌号,您就可以在那里找到该号码。

去年之前,我给北京的一家培训机构讲课,举了一个例子。
我写了a = 1 0,然后b = a,徒弟问我:“老师,现在a和b都是1 0了吗?”我说:“是的,但是他们不是同一个1 0”我用id(a)和id(b)来测试,哦,两个数字完全不一样。
这就是为什么如果你改变b = 2 0,a仍然是1 0因为b本身去了一个新的地方设置了2 0,与a无关。

但是如果你有a = [1 , 2 , 3 ],然后b = a,然后b.append(4 ),你会发现a还多了一个4 ,为什么呢?因为列表是“可变对象”,所以您要更改的是它指向的一块土地,而不是复制三块土地。

我还想告诉你关于命名的事情。
去年我在上海做一个项目,一个朋友叫变量abc1 2 3 谁关心这个?后来我把它改成了user_age,立刻就明白了这意味着什么。
在Python中你可以使用中文字符,例如age = 2 5 ,但确实不推荐。
读代码的人要猜测很长时间。

任务就是=这个东西。
你输入 x = 5 ,Python 会找到一个地方放置 5 ,然后告诉 x“你指向那里”。
你输入 y = x,Python 将复制 x 所指向的国家/地区的门牌号并将其粘贴到 y 上。
它们看起来很相似,但本质上是不同的。

另外,如果你写 x, y = 1 , 2 ,这称为“链接”或“拆包”。
去年我教了一个小女孩。
她不明白为什么x先变成1 ,y先变成2 我给她画了一张图,显示这两个值就像两个人,填在x和y这两个方框里。

我使用 id() 函数向我的学徒演示内存地址的事情。
你写 a = 1 0,然后 print(id(a)),这会给你一长串数字,这就是内存地址。
如果你写 b = a, print(id(b)),它很可能与你的 id(a) 完全相同,这意味着它们都在查看相同的数字 1 0
但是如果你真的想知道某个特定变量在内存中是什么样子,你需要使用特殊的调试工具。
你不能仅仅通过 id() 来查看它。

简单来说,变量只是一个存储数据的盒子。
它存储的是数据的地址,而不是数据本身。
改变数据是改变它所指向的地面上的东西,而不是盒子本身。
如果你记住了这个核心,你就可以避免很多陷阱。

Python 语言基础变量定义和使用

Python变量是直接通过赋值创建的,类型随着值的变化而变化。

x=1 创建 int 对象 1 ,x 指向内存。

id(x) 查找可以在不同时间存在的对象的唯一地址。

x=2 被替换,x指向新对象,地址发生变化。

x="OSSEZ" 性别会自动改变,不用担心。

一个整数可以存储较小的值1 和2 ,并且数字可以相同。

整数字符串是不可变的,赋值会创建新对象,并且表达式会发生变化。
函数内的变量不能与外部同名的变量相同。

更改类型会影响阅读和代码。

评价一下自己。