大部分人都会忽略的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 ...
随机推荐
- pyecharts实现星巴克门店分布可视化分析
项目介绍 使用pyecharts对星巴克门店分布进行可视化分析: 全球门店分布/拥有星巴克门店最多的10个国家或地区: 拥有星巴克门店最多的10个城市: 门店所有权占比: 中国地区门店分布热点图. 数 ...
- Java判断字符串相等"=="和"equal"详解
在初学Java时,可能会经常碰到下面的代码: public static void main(String[] args) { //两种声明方式,有所差别 String s1="hello& ...
- 使用Python为中秋节绘制一块美味的月饼【华为云技术分享】
每逢佳节… 对于在外的游子,每逢佳节倍思亲.而对于996ICU的苦逼程序猿们,最期待的莫过于各种节假日能把自己丢在床上好好休息一下了.这几天各公司都陆续开始发中秋礼品了.朋友圈各种秀高颜值的月饼,所以 ...
- 在华为云ECS上手工通过Docker部署tomcat
本文介绍了如何在华为云上ECS上手工通过Docker部署tomcat,并提供了Docker常用操作 一.环境准备 ECS:操作系统版本: CentOS Linux release 7.6.181 ...
- FF.PyAdmin 接口服务/后台管理微框架 (Flask+LayUI)
源码(有兴趣的朋友请Star一下) github: https://github.com/fufuok/FF.PyAdmin gitee: https://gitee.com/fufuok/FF.Py ...
- jenkins的部署
一.jenkins相关工具安装 基于tomcat安装iptables -F setenforce 0 systemctl stop firewalld.service Jdk安装 wgt htt ...
- Java修炼——暂停线程的四个方法
线程的获取方法:Thread.currentThread() 后面可以加上获取线程的名字 .getName() 这样就成功获取到了线程的名字. Sleep会导致当前线程休眠一定 ...
- Binary Search Tree analog
Description Binary Search Tree, abbreviated as BST, is a kind of binary tree maintains the following ...
- Python核心笔记:在python文件中如何调用其它python脚本文件,你肯定不会
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:zhujuyu 笔者在自学python的时候遇到了这样一个练习题:将 ...
- leetcode -- 寻找两个有序数组的中位数
题目: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nu ...