文档章节

Python的点滴笔记之:函数

fzyz_sb
 fzyz_sb
发布于 2015/02/24 14:18
字数 329
阅读 59
收藏 0

1. 对函数的参数而言,最好传递副本,来达到C/C++中const的效果

    由于Python语言的特性,列表是可更改的,所以如果将列表直接传递进函数中,则列表的值可以被修改:

>>> def f(a, L = []):
	print id(L)
	L.append(a)
	return L

>>> f(1)
45637256    #id相同
[1]
>>> f(2)
45637256    #id相同
[1, 2]
    这时候,有两种解决方案.

一种解决方案是手动传入副本:

>>> def f(a, L = []):
	print id(L)
	L.append(a)
	return L

>>> L = []
>>> f(1, L[:])
45635272    #id不同
[1]
>>> f(2, L[:])
45636936    #id不同
[2]

另一种方案是:传入参数的值不可修改即可

>>> def f(a, L = None):
	if L is None:
		L = []
		print id(L)
	L.append(a)
	return L

>>> f(1)
45636168    #id不同
[1]
>>> f(2)
45642056    #id不同
[2]


2. 对于函数的参数来说,如何使用列表(元组)/字典来代替多个参数

    这属于语法层面,我们可以使用"*"来代表传入的参数是列表/元组,用"**"来代表传入的参数是字典:

>>> range(3, 6)
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args)
[3, 4, 5]
>>> def parrot(voltage, state='a stiff', action='voom'):
	print "-- This parrot wouldn't", action,
	print "if you put", voltage, "volts through it.",
	print "E's", state, "!"

	
>>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
>>> parrot(**d)
-- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !


© 著作权归作者所有

共有 人打赏支持
fzyz_sb
粉丝 408
博文 209
码字总数 447144
作品 0
武汉
程序员
利用python函数的输入、输出定义与时序图相结合,让生活更有趣

写在前面 1. 重点是思路交流,利用python函数的输入、输出定义与时序图相结合,让流程更加的简洁、清晰。该方法不局限于工作,同样适用于学习笔记、恋爱心得...等等只要存在个体交互的活动。...

python达人
05/08
0
0
程序员必备,快速学习 Python 的全套14张思维导图(附高清版下载)

后台回复关键词 思维导图 可获取本文中的高清思维导图(PDF版) ML & AI∣一个有用的公众号 长按,识别二维码,加关注 获取更多精彩文章

micf435p6d221ssdld2
05/23
0
0
map,filter,reduce的应用方法

最近在自学python,不知道怎么入手,就花了好几十大洋买了《python学习手册》来看,记忆力不好,怕以后忘记了,写下来当是笔记吧。也可以供那些python新手又没买这本书的人做参考哈~ 1.map把第...

Geomen
2012/02/27
0
0
学习 Python 的 14 张思维导图

本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库)。 首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列表,元组,字典,集合),条...

天星ing
2017/10/18
0
0
Python3 SciPy解常微分方程 用Matplotlib演示

Python科学计算 简单记录几篇笔记 用SciPy解常微分方程,在jupyter notebook用matplotlib演示,以下需要注意的几点: integrate模块提供的odeint函数 Anaconda 3的jupyter notebook上 matplo...

wangxuwei
07/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

人生苦短:Python里的17个“超赞操作

人生苦短,我选Python”。那么,你真的掌握了Python吗? 1. 交换变量 有时候,当我们要交换两个变量的值时,一种常规的方法是创建一个临时变量,然后用它来进行交换。比如: # 输入 a = 5 b ...

糖宝lsh
37分钟前
4
0
咕泡-spring中常用设计模式概述

设计模式就是经验之谈,供后人借鉴,解决一些具有代表性的问题 设计模式来源于生活,反过来帮助我们更好生活 设计模式提升代码的可读性、可扩展性、维护成本、复杂业务问题 千万不要死记硬背...

职业搬砖20年
今天
2
0
day59-20180817-流利阅读笔记-待学习

假·照骗,真·社交焦虑 雪梨 2018-08-17 1.今日导读 发朋友圈之前,不少人为了展现更美好的生活状态会对照片加以“微调”,或是加个滤镜显得逼格更高,或是磨个皮瘦个脸拉个大长腿。现在,国...

aibinxiao
今天
18
0
OSChina 周五乱弹 —— 姑娘在这个节日里表白你接受么?

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @Sharon啊:完全被这个小姐姐圈粉了,学两首她的歌去哈哈 分享王贰浪的单曲《往后余生(翻自 马良)》 《往后余生(翻自 马良)》- 王贰浪 手...

小小编辑
今天
846
16
为什么HashMap要自己实现writeObject和readObject方法?

为什么HashMap要自己实现writeObject和readObject方法? 如果你有仔细阅读过HashMap的源码,那么你一定注意过一个问题:HashMap中有两个私有方法。 private void writeObject(java.io.Objec...

DemonsI
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部