Python(55)_默认参数的陷阱

#-*-coding:utf-8-*-
‘‘‘
函数复习
‘‘‘
def f():
    return ‘bowen‘
print(2+3) # 事实上python中会调用内部的函数,相当于add()
print(f())

def wahaha(*args):
    print(args)
wahaha(1,2,3)
l = [1,2,3]
wahaha(*l)

‘‘‘
默认参数的陷阱
  如果默认参数的值是一个可变数据类型,那么每一次调用的时候,不传值就公用这个数据类型的资源
  简单的说,就是不传值的情况下,始终操作的都是同一个字典或者列表
‘‘‘
def qqxing(l=[]):# 默认参数
    l.append(1)
    print(l)

qqxing()  # [1]
qqxing()  # [1, 1]
qqxing([]) # [1]
qqxing()  # [1, 1, 1] 用的是第二个调用时的列表

def ee(k,l={}):
    l[k] = ‘v‘
    print(l)

ee(1)  # {1: ‘v‘}
ee(2)  # {1: ‘v‘, 2: ‘v‘}
ee(3)  # {1: ‘v‘, 2: ‘v‘, 3: ‘v‘}

原文地址:https://www.cnblogs.com/sunnybowen/p/10242058.html

时间: 2024-10-07 20:33:32

Python(55)_默认参数的陷阱的相关文章

默认参数的陷阱自我心得

默认参数的陷阱 : 默认参数实际上只有一个值 代码1 def func(l = 1): l += 1 print(l) func() func() func() 代码2 lst = [] def func(a,l = lst): l.append(a) print(l)func(1) # [1] func(2,[]) # [2] func(3) # [1,3]变量是变量,值是值 变量的名字和有多少个值没有对应关系 我们在看修改的时候:要看修改的是哪一个对应的值而不是变量 def func(l =

默认参数的陷阱

默认参数的陷阱 : 默认参数实际上只有一个值 如果是可变数据类型,无论这个函数被调用多少次, 共用这个默认参数a = []b = []a.append(1)print(a,b) a = []b = aa.append(1)print(a,b) 变量是变量,值是值变量的名字和有多少个值 没有对应关系我们在看修改的时候 : 要看修改的是哪一个具体的值而不是变量 l = [] # 在定义函数之前定义了一个[]def func(): l.append(1)func()func()func()func()

Python中list作为默认参数的陷阱

在Python中,作为默认参数的一定要是不可变对象,如果是可变对象,就会出现问题,稍不注意,就会调入陷阱,尤其是初学者,比如我(┬_┬). 我们来看一个例子. 1 def add(L=[]): 2 L.append(1) 3 return L 4 5 L = [1, 2, 3] 6 newL = add(L) 7 print(newL) 8 newL = add(newL) 9 print(newL) 10 11 testL = add() 12 print(testL) 13 testL =

Python函数的默认参数的设计【原创】

在Python教程里,针对默认参数,给了一个“重要警告”的例子: def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3)) 默认值只会执行一次,也没说原因.会打印出结果: [1] [1, 2] [1, 2, 3] 因为学的第一门语言是Ruby,所以感觉有些奇怪. 但肯定的是方法f一定储存了变量L. 准备知识:指针 p指向不可变对象,比如数字.则相当于p指针指向了不同的内存地址. p指向的是可变对象,比如lis

C/C++ Python的函数默认参数

发现C/C++  Python的函数可以使用默认参数,来减少传参时候的参数个数. 但是:这样的默认参数最好是不变对象! #include <stdio.h> #include <string.h> void func_1(int id, char s[], char city[] = "Bejing") { printf("%d, %s, %s",id, s, city); } int main() { func_1(1, "李金旭

python 函数的默认参数

直接上代码: first = 1 second = 2 def haha(first=first,second=second):#默认值是上面定义的两个变量     print "first: %d"%first     print "second: %d"%second haha() first += 5 second += 6 haha() 输出结果呢? 先不急看结果,可以先假想一下,无非两种结果: 一种是haha这个函数的默认值随first和second这两个

在python函数中默认参数的一些坑

一.默认参数 python为了简化函数的调用,提供了默认参数机制: 这样在调用pow函数时,就可以省略最后一个参数不写: 在定义有默认参数的函数时,需要注意以下: 必选参数必须在前面,默认参数在后: 设置何种参数为默认参数?一般来说,将参数值变化小的设置为默认参数. python标准库实践 python内建函数: 函数签名可以看出,使用print('hello python')这样的简单调用的打印语句,实际上传入了许多默认值,默认参数使得函数的调用变得非常简单. 二.出错了的默认参数 引用一个官

python函数之默认参数 | 关键参数 | 全局变量 | return

默认参数: 关键参数: Tips1:字符串的引用 return 全局变量:1位置的job是参数,ll是变量,两者是不一样的, 报错的情况:

经典面试题-python函数之默认参数

1.可变的默认参数----list  示例: def add(a, mylist=[]): # print(id(mylist)) mylist.append(a) return mylist print(add(5)) print(add(6)) print(add(6, ["0908"])) print(add(7)) 输出结果: 预期输出 实际输出 [5][6]['6', 9008][ 7] [5][5, 6]['0908', 6][5, 6, 7]  查看其id def add