python中的一些坑(待补充)

函数默认参数使用可变对象

def use_mutable_default_param(idx=0, ids=[]):
    ids.append(idx)
    print(idx)
    print(ids)
use_mutable_default_param(idx=1)
use_mutable_default_param(idx=2)

输出

1
[1]
2
[1, 2]

函数本身也是一个对象,默认参数绑定于这个函数对象上

append这类方法会直接修改对象,所以下次调用此函数时,其绑定的默认参数已经不再是空list了

def donot_use_mutable_default_param(idx=0, ids=None):
    if ids is None:
        ids = []
    ids.append(idx)
    print(idx)
    print(ids)

原文地址:https://www.cnblogs.com/z-x-y/p/9780166.html

时间: 2024-08-02 02:23:04

python中的一些坑(待补充)的相关文章

Python 中的那些坑总结——持续更新

1.三元表达式之坑 很显然,Python把第一行的(10 + 4)看成了三元表达式的前部分,这个坑是看了<Python cookbook>(P5)中学到的,书中的代码: 2.Python生成器(yield)+递归 前两天一直纠结python的生成器递归该怎么写,今天看了os.walk()的代码恍然大悟,编程真是博大精深啊!不多说,上代码: from os import path def walk(top, topdown=True, onerror=None, followlinks=Fals

python中的基础坑

v = [lambda :x for x in range(10)] print(v) #[lambda :x,lambda :x....]10个匿名函数 print(v[0]) #lambda :x print(v[0]()) #9 v = (lambda :x for x in range(10)) print(v) #生成器 # print(v[0]) #报错:生成器不能索引取值 # print(v[0]()) #报错:生成器不能索引取值 print(next(v)) #lambda :x

Python数组创建中的这些坑,你造吗?

本文和大家分享的主要是python 中创建数组过程中的一些坑,一起来看看吧,希望对大家 学习python 有所帮助. 1.问题的引出 在做leetcode 的题目时,遇到了一个求数组中出现次数最多的 k 个元素的题,参照答案的思路,首先利用一个 dict 记录所有元素出现的次数, key:value 中的 key 表示元素, value 表示元素出现的次数,随后根据元素出现的次数将元素放入对应的桶中,桶是一个二维数组,桶中第一个元素保存出现次数为 0 的元素,桶中第二个元素保存出现次数为 1 的

警惕Python中重复运算符(*)的坑

其实这个问题网上有很多人都提到了,但是之前一直没注意这个事,直到最近自己被坑了一把. Python中貌似不能直接定义指定长度的序列(tuple.list等),但是可以通过重复运算符乘号来重复构建一个序列以达到指定长度: seq = [ {} ] * 10 这样就构建了一个初始长度为10的字典列表.但是这行表面人畜无害的代码却暗藏危机,因为这个链表中的10个字典引用其实指向了同一个字典实例!换一种等效的写法也许看上去更加清楚: tmp = {} seq = [ tmp ] * 10 估计大部分情况

python中json.dumps使用的坑以及字符编码

我们知道,python中的字符串分普通字符串和unicode字符串,一般从数据库中读取的字符串会自动被转换为unicode字符串 下面回到重点,使用json.dumps时,一般的用法为: >>> obj={"name":"测试"} >>> json.dumps(obj)'{"name": "\\u6d4b\\u8bd5"}' >>> print json.dumps(obj

python中正则表达式在中文字符串匹配时的坑

之前一直有使用python 正则表达式来做中文字符串或者中英文数字混合的字符串的匹配,发现有不少情况下会匹配失灵或者结果混乱,并且在不同操作系统上匹配结果也不一致,查了很久都不知道是什么原因.今天终于彻底弄懂了,原来还是python中对中文的编码问题造成的. 解决办法: step1 在设置默认编码为UTF8之后,将正则表达式和待匹配字符串都decode("utf8")统一成 unicode再进行匹配: step2 正则表达式前面一定要加 r : 示例代码: kw_regexp = r'

22.python中的面向对象和类的基本语法

当我发现要写python的面向对象的时候,我是踌躇满面,坐立不安呀.我一直在想:这个坑应该怎么爬?因为python中关于面向对象的内容很多,如果要讲透,最好是用面向对象的思想重新学一遍前面的内容.这个坑是如此之大,犹豫再三,还是只捡一下重要的内容来讲吧,不足的内容只能靠大家自己去补充了. 惯例声明一下,我使用的版本是 python2.7,版本之间可能存在差异. 好,在开讲之前,我们先思考一个问题,看代码: 为什么我只创建是为 a 赋值,就可以使用一些我没写过的方法? 可能会有小伙伴说:因为 a

python学习遇到的坑

1. 定义变量名和函数名或关键字重名: typeerror 在网上随便copy了一个处理csv文件的源码,运行中总是在input时出错,差错没注意变量声明,导致浪费不少时间 在红色剪头处,input的输出用input变量名存放,当再次调用input函数时,就会提示:TypeError: str object is no callable 2. python输入csv文件内容有多余空行 Python中的csv的writer,打开文件的时候,要通过binary模式去打开,即带b的,比如wb,ab+等

Python中的异常处理

异常处理在任何一门编程语言里都是值得关注的一个话题,良好的异常处理可以让你的程序更加健壮,清晰的错误信息更能帮助你快速修复问题.在Python开发中,和部分高级语言一样,使用了try/except/finally语句块来处理异常,如果你有其他编程语言的经验,实践起来并不难. 异常处理语句 try-excpet-finally 实例代码 defdiv(a, b): try: print(a / b) exceptZeroDivisionError: print("Error: b should n