python函数参数的作用域_python函数默认参数作用域

当def函数参数默认值为对象时,例如列表[],字典{}

示例1:猜测一下,会输出什么???

def ddd(a,b=[]):

b.append(a)

return b

print(ddd(1))

print(ddd(2,['a','b','c']))

print(ddd(3))

[1]  ['a','b','c','2'] [3]   ?????你是否认为是这样? 输出一下看看

输出结果:

D:\Python27\python.exe D:/untitled1/temp5.py

[1]

['a', 'b', 'c', 2]

[1, 3]

看到以上结果有什么想法,为什么呢???[1, 3]而不是[3],那么修改一下代码,输出b变量的内存地址看一下。我想,可以找到我要的答案

def ddd(a,b=[]):

b.append(a)

print(id(b)) #查看内存地址

return b

print(ddd(1))

print(ddd(2,['a','b','c']))

print(ddd(3))

输出结果:

D:\Python27\python.exe D:/untitled1/temp5.py

170580872

[1]

171586568

['a', 'b', 'c', 2]

170580872

[1, 3]

从输出中,可以看出,除了,第二个print,其它两个内存是一们的。那么考虑一下为什么第二个为被改变。结果显而易见,因为第二个print改变了,b对象,重新创建了一个对象。

那么如果不想出现,每次调用,默认值对象不变的问题,可以这样改一下:

def ddd(a,b=None):

if type(b).__name__!='list':

b = []

b.append(a)

print(id(b)) #查看内存地址

return b

print(ddd(1))

print(ddd(2,['a','b','c']))

print(ddd(3))

初始值设置为None,通过类型判断来,进行内处理

小结:

1.python定义def的时候,如果参数做为对象,那么,如果没有改变这个对象的前提下,那么即使,多次调用该函数也,不会创建新的对象。

那么就会出现多次调用函数,有可能都进行了处理。

2.如果,没有特殊需求,函数参数,尽量不采用对象,如果一有需要,对象进行内处理。传默认值None

【转】Python函数默认参数陷阱

[转]Python函数默认参数陷阱 阅读目录 可变对象与不可变对象 函数默认参数陷阱 默认参数原理 避免 修饰器方法 扩展 参考 请看如下一段程序: def extend_list(v, li=[]) ...

Python面试题目之Python函数默认参数陷阱

请看如下一段程序: def extend_list(v, li=[]): li.append(v) return li list1 = extend_list(10) list2 = extend_l ...

使用可变对象作为python函数默认参数引发的问题

写python的都知道,python函数或者方法可以使用默认参数,比如 1 def foo(arg=None): 2 print(arg) 3 4 foo() 5 6 foo("hello ...

python函数默认参数陷阱

对于学习python的人都有这样的困惑 def foo(a=[]): a.append(5) return a Python新手希望这个函数总是返回一个只包含一个元素的列表:[5].结果却非常不同,而 ...

python函数默认参数为可变对象的理解

1.代码在执行的过程中,遇到函数定义,初始化函数生成存储函数名,默认参数初识值,函数地址的函数对象. 2.代码执行不在初始化函数,而是直接执行函数体. 代码实例 这要从函数的特性说起,在 Python ...

Python 函数(默认参数)

默认参数 设置默认参数时,有两点需要注意:一是必选参数在前,默认参数在后,否则python的解释器会报错二是当函数有多个参数时,把变化大的参数放前面,变化小的放后面,变化小的参数就可以作为默认参数 d ...

[python]函数默认参数顺序问题

python 函数参数定义有四类: 1.必选参数:调用函数时候必须赋值的参数. a,须以正确的顺序传入函数b,调用时的数量必须和声明时的一样 def exa(x): return x #b作为参数进入 ...

Python函数默认参数的陷阱

默认参数实际上只有一个值 代码1 def func(l = 1): l += 1 print(l) func() func() func() 代码2 lst = [] def func(a,l = l ...

python函数默认参数坑

def add(a=3,b): print a,b add(4) 这样写的话,运行的话就会报错:SyntaxError: non-default argument follows default ar ...

随机推荐

HDU-2084 数塔 经典dp,水

1.HDU-2084   数塔 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 3.总结:从下往上推,最后归于顶点.方程为  dp[i][j] ...

移动端H5页面遇到的问题总结

最近刚做完一个移动端的项目,产品之无敌,过程之艰辛,我就不多说了,记录下在这个项目中遇到的问题,以防万一,虽然这些可能都是已经被N多前辈解决掉了的问题,也放在这里,算是为自己漫漫前端路铺了一颗小石子儿 ...

万里长征第一步:Python进程池的一点点小坑

# -*- coding: utf- -*- """ Created on Thu Mar :: @author: lilide """ # ...

Java Rest客户端框架有哪些

HttpClient HtmlUnit Jsoup HttpUrlConnection(java原生) Http4j

beta阶段贡献分配实施

作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2281] 要求1 每位组员的贡献分值   刘莹莹 王玉潘 潘世维 周昊 赵美增 ...

《SQL Server 2000设计与T-SQL编程》

笔记1 http://dukedingding.blog.sohu ...

DJango小总结一

views.py                        def func(request):                # 包含所有的请求数据                ...     ...

VS2012 Getting Started with Owin and Katana

参考地址:http://www.asp.net/aspnet/overview/owin-and-katana/getting-started-with-owin-and-katana 小提示: 该示 ...

iOS开发 - 如何跳到系统设置里的各种设置界面

在iOS开发中,有时会有跳转系统设置界面的需求,例如提示用户打开蓝牙或者WIFI,提醒用户打开推送或者位置权限等.在iOS6之后,第三方应用需要跳转系统设置界面,需要在URL type中添加一个pre ...

关于Xcode6.0.1创建项目不自动创建Prefix.pch文件的解决办法

1. 新建工程 2. 创建pch文件: 新建文件->Other->PCH File  新建一个pch文件 3. 在setting里面进行设置: 项目配置->Build Setting ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值