大部分人都会忽略的Python易错点总结
python中复数实现(-2) ** 0.5和开根号sqrt(-2)的区别
(-2)**0.5和sqrt(-2)是不同的,前者是复数后者是会报错的。
print((-2)**0.5)
#输出:(8.659560562354934e-17+1.4142135623730951j)
import math
math.sqrt(-2)#报错
ValueError: math domain error
Python用循环构造的函数数组,运行这个数组里面的函数后返回值都一样
functions = []
for i in range(5):
def f(x):
return x + i
functions.append(f)
for f in functions:
print(f(7))
上面程序的输出是:
11
11
11
11
11
为什么明明f(x)返回的是x+i,而i是从0到4变化的。按道理执行f(x)后的返回值也应该是变化的,为何我们执行f(x)后是5个一样的值。
答:这是因为python中函数保存的外面的变量都是存储的是地址。也就是说x+i中的i是地址,循环执行完成后。i这个地址的值变成了4.所以最后执行f(7)就是一直是11==7+4.
不信你可以输出id(i)试试。
注意: Python取变量的地址的方法是id(变量名)。
Python数组列表list中extend()和append()的区别
代码举例说明
x = [1,2,3]
print(x.extend([2,3,4]))
"""
输出:
[1,2,3,2,3,4]
"""
print(x.append([2,3,4]))
"""
输出:
[1,2,3,[2,3,4]]
"""
可以看到:
- extend()是把参数通过合并的形式融合到原来的列表里面。(融合)
- append()是把参数当做一个元素加到原来列表里面。(吞并)
Python类变量,类名取变量(className.x)和self取变量(self.x)之间的区别?
- 类名取变量 和 self取变量它们初始值的地址是完全一样。 (意味着值也一样)
- 用类名取变量不会影响他们变量的地址。(以为着用类名取变量并且修改变量使得两种取变量的方式值都发生变化)
- 但是用self取变量方式修改变量就会使得它们地址变得不一样。(这意味着修改self取的变量只会影响self取变量这种方式的值,不会影响类名取变量方式的值)
PS:遇到问题没人解答?需要Python学习资料?可以加点击下方链接自行获取
note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76
看代码理解这3句话:
class Car:
color = 'gray'
def describe_car(self):
return Car.color
def describe_self(self):
return self.color
test = Car()
# 类名取Car.color和self.color初始值是一样的.因为此时他们的地址是完全一样的.
print(test.describe_car()) #输出:gray
print(test.describe_self()) # 输出:gray
print('Carcolor地址:',id(Car.color),'self.color地址:',id(test.color))#你可以看看地址是否相同
# 先修改Car.color会影响self.color。因为此时他们的地址是完全一样的
Car.color = 'red'
print(test.describe_car()) #输出:red
print(test.describe_self()) # 输出:red
print('Carcolor地址:',id(Car.color),'self.color地址:',id(test.color))#你可以看看地址是否相同
# 修改self.color不会影响Car.color,因为此时他们地址变得不一样了。
test.color = 'blue'
print(test.describe_car()) #输出:red
print(test.describe_self()) # 输出:blue
print('Carcolor地址:',id(Car.color),'self.color地址:',id(test.color))#你可以看看地址是否相同
# 经过上一步此时他们两地址不一样了。修改Car.color不会影响self.color。因为此时他们的地址是不一样的
Car.color = 'black'
print(test.describe_car()) #输出:black
print(test.describe_self()) # 输出:blue
print('Carcolor地址:',id(Car.color),'self.color地址:',id(test.color))#你可以看看地址是否相同
tuple元组不可以修改元素,这是元组和List列表的区别之一
x = (0,1,2)
x[0]=-1#这是错误的会报错
TypeError: 'tuple' object does not support item assignment
Python魔法方法magic method,变量的顺序问题
__mul__(self,other),调用这个魔术方法是self*other,它实际这这样执行的:self.__mul(other)。
大部分人都会忽略的Python易错点总结的更多相关文章
- python易错知识集合
本篇用于记录在写leetcode时遇到的python易错知识. 2019.8.29 1.Python range() 函数用法: range(start, stop[, step]) start: 计 ...
- 大部分人都会做错的经典JS闭包面试题
由工作中演变而来的面试题 这是一个我工作当中的遇到的一个问题,似乎很有趣,就当做了一道题去面试,发现几乎没人能全部答对并说出原因,遂拿出来聊一聊吧. 先看题目代码: function fun(n,o) ...
- 99%的人都会遇到的Python “用户环境”问题
- Python 易错点
1. Python查找一个变量时会按照“局部作用域”, “嵌套作用域”, “全局作用域”,“内置作用域”的顺序进行搜索. 在实际开发中,我们应该尽量减少对全局变量的使用,因为全局变量的作用域和影响过于 ...
- python易错盲点排查之+=与+的区别分析以及一些赋值运算踩过的坑
问题1. int和list是不一样的 >>> a=1 >>> b=a >>> a+=1 >>> a,b (2, 1) >& ...
- python易错题之lambda 以及 for循环中内嵌函数
li = [] for x in range(10): print(x) //在函数没有执行前(li[0]()),for 循环中x已经执行完,x会一直为 9 def fun(): print(x) / ...
- python易错题之作用域
name = "lzl" def f1(): print(name) def f2(): name = "eric" f1() f2() //结果为 lzl 记 ...
- 易被忽略的Python内置类型
Python中的内置类型是我们开发中最常见的,很多人都能熟练的使用它们. 然而有一些内置类型确实不那么常见的,或者说往往会被我们忽略,所以这次的主题就是带领大家重新认识这些"不同寻常&quo ...
- python函数使用易错举例
关于嵌套: 嵌套使用中, retrun inner ---> 返回的是函数的地址 retrun inner() : ---> 运行inner()函数 ---> 运行i ...
随机推荐
- 《Windows内核安全与驱动开发》阅读笔记 -- 索引目录
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 一.内核上机指导 二.内核编程环境及其特殊性 2.1 内核编程的环境 2.2 数据类型 2.3 重要的数据结构 2.4 函数调 ...
- 《Windows内核安全与驱动开发》4.3 时间与定时器
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发>4.3 时间与定时器 一.获取自系统启动以来的毫秒数 /* 函数作用:求自操 ...
- 用墨卡托和GPS坐标计算距离时误差测试
iOS墨卡托和GPS坐标计算距离时误差测试,测试结果: 墨卡托和gps坐标来回转换没有误差. 墨卡托坐标计算出的距离比gps坐标计算出的距离大,100/92*100 = 108米,每100米多算出8米 ...
- OpenCV图像识别初探-50行代码教机器玩2D游戏【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- 全面认识 RUST -- 掌控未来的雷电
文章目录 RUST 简介 如何衡量语言的好坏? 静态语言 编译器 语言定位 代表性项目 Hello World RUST 前景 RUST 简介 Rust 是一种兼顾内存安全.高并发和稳定运行的编程语言 ...
- 基于webpack实现多html页面开发框架三 图片等文件路径替换、并输出到打包目录
一.解决什么问题 1.图片路径替换.并输出到打包目录 2.输出目录清理 二.需要安装的包 file-loader:html.css中图片路径替换,图片输出到打包目录:命令:npm ...
- luogu P1358 扑克牌
题目描述 组合数学是数学的重要组成部分,是一门研究离散对象的科学,它主要研究满足一定条件的组态(也称组合模型)的存在.计数以及构造等方面的问题.组合数学的主要内容有组合计数.组合设计.组合矩阵.组合优 ...
- UIContainerView纯代码实现及原理介绍
UIContainerView纯代码实现及原理介绍 1.1-在StoryBoard中使用UIContainerView 1.2-纯代码使用UIContainerView 1.3-UIContainer ...
- 洛谷 题解 P1351 【联合权值】
Problem P1351 [联合权值] record 用时: 99ms 空间: 13068KB(12.76MB) 代码长度: 3.96KB 提交记录: R9883701 注: 使用了 o1 优化 o ...
- layedit添加首行缩进
由于在编辑的时候,有首行缩进的需求,并且,如果直接使用空格进行缩进,还会出现layedit看到的效果和实际显示的效果不一致的情况.多方搜索无果,于是决定修改源代码.具体步骤如下: 1.首先找到laye ...