文档章节

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
武汉
程序员
Sublime Text变为Python IDE环境(二)

上一篇写了如果安装Anaconda,由于Anaconda插件本身无法知道Python安装的路径,所以需要设置Python主程序的实际位置。选择Settings-Default选项,搜寻“python_interpreter” key, 并键入p...

hank_leo
08/31
0
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

没有更多内容

加载失败,请刷新页面

加载更多

创建第一个react项目

sudo npm i -g create-react-app@1.5.2 create-react-app react-app cd react-apprm -rf package-lock.jsonrm -rf node_modules #主要是为了避免报错npm installnpm start......

lilugirl
今天
1
0
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)

Generative Adversarial Network 是深度学习中非常有趣的一种方法。GAN最早源自Ian Goodfellow的这篇论文。LeCun对GAN给出了极高的评价: “There are many interesting recent development...

naughty
今天
0
0
搬瓦工镜像站bwh1.net被DNS污染,国内打不开搬瓦工官网

今天下午(2018年10月17日),继搬瓦工主域名bandwagonhost.com被污染后,这个国内的镜像地址bwh1.net也被墙了。那么目前应该怎么访问搬瓦工官网呢? 消息来源:搬瓦工优惠网->搬瓦工镜像站b...

flyzy2005
今天
4
0
SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面 介绍下开发环境 JDK版本1.8 spr...

贺小五
今天
5
0
命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部