面试秒打脸 居然是True90%Python新手都栽过的3个基础坑大家好今天聊几个Python里看似“小儿科”但面试超高频、刷题天天写的基础细节。很多同学刷LeetCode的时候天天写这些代码但真被面试官问到原理就当场卡壳和到底是不是同一个东西比较返回啥写栈题天天写return not stack这行到底啥原理空列表为啥能直接当布尔判断别小看这些细节面试突击时最容易在阴沟里翻船。今天一次性讲透看完再也不会踩坑。一、灵魂拷问和是同一个东西吗1. 先甩结论完全是同一个东西 的返回结果是True。直接上代码验证print()# 输出Trueprint(type())# 输出class strprint(type())# 输出class strprint(id()id())# 多数Python实现下也为True空串会被驻留复用2. 本质只是字面量写法不同在Python中双引号和单引号都用来定义字符串创建出来的都是str类型对象内容完全一致。空字符串的内容都是“空”没有任何字符所以二者的值、类型、内存地址多数情况完全相同没有任何区别。3. 唯一区别内部嵌套引号的转义规则单双引号唯一的使用差异在于字符串内部包含引号时不用转义字符串用单引号包裹内部可以直接写双引号字符串用双引号包裹内部可以直接写单引号# 不用转义写法更干净s1他说你好s2我是Python程序员我m fine# 内外引号相同必须加反斜杠转义s3我\m fines4他说\你好\4. 新手常见误区很多人会问那三引号...和...呢三引号是多行字符串用来写大段换行文本、文档注释和普通单双引号不是一回事不要混为一谈。二、刷题必写stack []时not stack是什么为什么1. 先给答案stack[]print(notstack)# 输出True空列表执行not运算结果为True。2. 底层原理Python的「空容器真值规则」Python有一条非常核心的布尔判定规则所有空容器空列表、空字符串、空字典、空元组、空集合布尔值均为False非空容器布尔值为True所以stack []是空列表 →bool(stack) Falsenot是逻辑取反运算符 →not False True3. 代码直观演示# 空容器布尔值全为Falseprint(bool([]))# False 空列表print(bool())# False 空字符串print(bool({}))# False 空字典print(bool(()))# False 空元组# 非空容器布尔值全为Trueprint(bool([(]))# Trueprint(bool(abc))# True4. 刷题场景实战有效的括号回到LeetCode第20题「有效的括号」我们经常写returnnotstack它的含义是栈为空 → 所有左括号都匹配成功 → 返回True字符串有效栈非空 → 有剩余左括号没闭合 → 返回False字符串无效等价于return len(stack) 0但not stack是Python的惯用优雅写法更简洁、更符合Pythonic风格。三、延伸避坑90%新手都踩过的命名雷区讲完空串和空列表顺便提一个刷题高频坑不要用内置函数名当变量名。很多人写括号题会顺手写map{):(,}:{,]:[}❌ 这是错误习惯map是Python内置函数覆盖之后后续再调用map()会直接报错。同理list、dict、str、set、max、min这些内置名称都不能当变量名。正确写法bracket_map{):(,}:{,]:[}而stack是完全安全的变量名它不是关键字也不是内置函数放心用。四、一句话总结和完全等价都是空字符串 结果为True仅内部嵌套引号时转义规则有差异空列表布尔值为Falsenot stack结果为True是判断栈空的标准Python写法不要用map、list、str等内置名称当变量名stack可以放心使用。这些细节虽然基础但面试、刷题天天见吃透了能少走很多弯路。你还踩过哪些Python基础小坑评论区聊聊~
面试官上来就问:““和 ‘‘ 是同一个东西吗?““ == ‘‘ 的结果是什么?stack = []时,not stack 是什么?为什么?我人直接傻了!
面试秒打脸 居然是True90%Python新手都栽过的3个基础坑大家好今天聊几个Python里看似“小儿科”但面试超高频、刷题天天写的基础细节。很多同学刷LeetCode的时候天天写这些代码但真被面试官问到原理就当场卡壳和到底是不是同一个东西比较返回啥写栈题天天写return not stack这行到底啥原理空列表为啥能直接当布尔判断别小看这些细节面试突击时最容易在阴沟里翻船。今天一次性讲透看完再也不会踩坑。一、灵魂拷问和是同一个东西吗1. 先甩结论完全是同一个东西 的返回结果是True。直接上代码验证print()# 输出Trueprint(type())# 输出class strprint(type())# 输出class strprint(id()id())# 多数Python实现下也为True空串会被驻留复用2. 本质只是字面量写法不同在Python中双引号和单引号都用来定义字符串创建出来的都是str类型对象内容完全一致。空字符串的内容都是“空”没有任何字符所以二者的值、类型、内存地址多数情况完全相同没有任何区别。3. 唯一区别内部嵌套引号的转义规则单双引号唯一的使用差异在于字符串内部包含引号时不用转义字符串用单引号包裹内部可以直接写双引号字符串用双引号包裹内部可以直接写单引号# 不用转义写法更干净s1他说你好s2我是Python程序员我m fine# 内外引号相同必须加反斜杠转义s3我\m fines4他说\你好\4. 新手常见误区很多人会问那三引号...和...呢三引号是多行字符串用来写大段换行文本、文档注释和普通单双引号不是一回事不要混为一谈。二、刷题必写stack []时not stack是什么为什么1. 先给答案stack[]print(notstack)# 输出True空列表执行not运算结果为True。2. 底层原理Python的「空容器真值规则」Python有一条非常核心的布尔判定规则所有空容器空列表、空字符串、空字典、空元组、空集合布尔值均为False非空容器布尔值为True所以stack []是空列表 →bool(stack) Falsenot是逻辑取反运算符 →not False True3. 代码直观演示# 空容器布尔值全为Falseprint(bool([]))# False 空列表print(bool())# False 空字符串print(bool({}))# False 空字典print(bool(()))# False 空元组# 非空容器布尔值全为Trueprint(bool([(]))# Trueprint(bool(abc))# True4. 刷题场景实战有效的括号回到LeetCode第20题「有效的括号」我们经常写returnnotstack它的含义是栈为空 → 所有左括号都匹配成功 → 返回True字符串有效栈非空 → 有剩余左括号没闭合 → 返回False字符串无效等价于return len(stack) 0但not stack是Python的惯用优雅写法更简洁、更符合Pythonic风格。三、延伸避坑90%新手都踩过的命名雷区讲完空串和空列表顺便提一个刷题高频坑不要用内置函数名当变量名。很多人写括号题会顺手写map{):(,}:{,]:[}❌ 这是错误习惯map是Python内置函数覆盖之后后续再调用map()会直接报错。同理list、dict、str、set、max、min这些内置名称都不能当变量名。正确写法bracket_map{):(,}:{,]:[}而stack是完全安全的变量名它不是关键字也不是内置函数放心用。四、一句话总结和完全等价都是空字符串 结果为True仅内部嵌套引号时转义规则有差异空列表布尔值为Falsenot stack结果为True是判断栈空的标准Python写法不要用map、list、str等内置名称当变量名stack可以放心使用。这些细节虽然基础但面试、刷题天天见吃透了能少走很多弯路。你还踩过哪些Python基础小坑评论区聊聊~