python的函数调用和参数传递
不可变对象(immutable):int、string、float、number、tuple
可变对象(mutable):dict、list
对于基本数据类型的变量,变量传递给函数后,函数会在内存中复制一个新的变量,从而不影响原来的变量。(我们称此为值传递)
但是对于list来说,列表传递给函数的是一个指针,指针指向序列在内存中的位置,在函数中对表的操作将在原有内存中进行,从而印象原有变量。(我们称此为指针传递)
如何定义函数?
- 以 def 关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
关于不可变对象类型的函数定义、调用和传参:
# -*- coding:utf-8 -*- a = 1 def change_a_1(a):
a += 1
print a
return a def change_a_2(a):
a += 1
print a print a
print change_a_1(a)
print a
a = change_a_1(a)
print a
a = change_a_2(a)
print a
最终打印出来的结果有几个?又分别是什么?主要涉及三个知识点,函数的定义、函数的调用以及传参,一旦弄清楚了,就很容易回答这个问题了。
函数的定义:
a = 1 def change_a_1(a):
a += 1
print a
return a def change_a_2(a):
a += 1
print a
函数的调用:
print change_a_1(a)
print a
注意:函数的定义与函数的执行,是两个过程。定义的函数如果不调用是不会执行的!
所以说,最终的打印结果和返回结果如下:
print a #1
print change_a_1(a) #2(函数return的返回值),2(函数内部的打印结果)
print a #1
a = change_a_1(a)
print a #2,2
a = change_a_2(a)
print a #3(函数内部一次),None(最终打印结果)
关于全局变量和局部变量:
如果函数内任意地方有赋值,那么这个被解释为局部变量;
如果函数内没有赋值,函数之前有赋值,那么将被解释为全局变量。
def change_a_3(a):
a = 6
a += 1
print a
return a a = 2
print change_a_3(a) #7,7
print a #2
a = change_a_3(a)
print a #7,7
关于可变对象类型的函数定义、调用和传参:
b = [1, 2, 3, 4] def change_b(b):
b = b[1]
print b
return b def change_b_1(b):
b.append(13)
print b
return b def change_b_2(b):
b = [9, 7, 6, 6, 4]
b.append(13)
print b
return b print b #[1,2,3,4]
b.pop(1)
print b #[2,3,4]
print change_b(b) #3,3
print b #[2,3,4]
b = change_b(b)
print b #3,3 b = [1, 2, 3, 4]
print change_b_1(b) #[1,2,3,4,13],[1,2,3,4,13]
print change_b_1(b) #[1,2,3,4,13,13],[1,2,3,4,13,13]
print change_b_2(b) #[9,7,6,6,4,13]
print change_b_2(b) #[9,7,6,6,4,13]
1.当函数的传入参数代表唯一的值,也就是像int这种内部无法改变的,外部的变量是无法修改的。对同名的外部变量赋值,也无法改变外部变量的值。
2.当函数传入参数是像list,dict,类对象这样代表一个集合的话,可以对传入参数的内部做修改,引起外部变量值的变化。但是对同名的外部变量直接赋值,是不会改变外部变量的结果的。
python的函数调用和参数传递的更多相关文章
- Python中函数的参数传递与可变长参数
转自旭东的博客原文 Python中函数的参数传递与可变长参数 Python中传递参数有以下几种类型: (1)像C++一样的默认缺省函数 (2)根据参数名传参数 (3)可变长度参数 示例如下: (1)默 ...
- Python 函数定义以及参数传递
Python 函数定义以及参数传递1.函数定义#形如def func(args...): doSomething123以关键字def 开头,后面是函数名和参数下面是函数处理过程. 举例: def ad ...
- python关于函数调用作为参数的说明&&装饰器
python关于函数调用作为参数的说明&&装饰器 简单的: 先看代码: def out(): print('out') def inner(): return 'inner' retu ...
- python中的*和**参数传递机制
python的参数传递机制具有值传递(int.float等值数据类型)和引用传递(以字典.列表等非值对象数据类型为代表)两种基本机制以及方便的关键字传递特性(直接使用函数的形参名指定实参的传递目标,如 ...
- Python的特有的参数传递(*和**)
目录 值传递 引用传递 python的传递方式具有两种值传递和引用传递.除此之外,python中还允许包裹方式的参数传递,这未不确定参数个数和参数类型的函数调用提供了基础: 值传递 int.float ...
- Linux Debugging(三): C++函数调用的参数传递方法总结(通过gdb+反汇编)
上一篇文章<Linux Debugging:使用反汇编理解C++程序函数调用栈>没想到能得到那么多人的喜爱,因为那篇文章是以32位的C++普通函数(非类成员函数)为例子写的,因此只是一个特 ...
- Python引用复制,参数传递,弱引用与垃圾回收
引用 先上个示例: >>> val = [1] >>> val[0] = val >>> val [[...]] 上述代码使val中包含自身,而产 ...
- Python设置函数调用超时
http://blog.sina.com.cn/s/blog_63041bb80102uy5o.html 背景: 最近写的Python代码不知为何,总是执行到一半卡住不动,为了使程序能够 ...
- python是如何进行参数传递的?
在分析python的参数传递是如何进行的之前,我们需要先来了解一下,python变量和赋值的基本原理,这样有助于我们更好的理解参数传递. python变量以及赋值 数值 从几行代码开始 In [1]: ...
随机推荐
- iOS - 如何切图适配各种机型
关于iPhone6/6+适配问题一直有争议,今天小编专门为大家整理了相关的有效方案,希望对大伙儿有帮助! 移动app开发中多种设备尺寸适配问题,过去只属于Android阵营的头疼事儿,只是很多设计师选 ...
- NGUI之UIRoot——屏幕的自适应分辨率的计算
//原来写在其他博客上的东西,搬迁 预备知识: 要明确的三个概念: 设计分辨率:在编辑器上开发UI使用的分辨率.我们所有的UI都是在这个分辨率下设计制作的. 显示区域分辨率:设备上所显示的UI区域在编 ...
- kettle系列-6.kettle实现多字段字典快速翻译
在数据清洗转换中,常见的字典翻译,如性别在原表中是1(男).2(女)等,类似还有很多较大的字典需要翻译,若同一个表中有很多个字典需要翻译,采用[数据库查询]方式翻译的话效率就会相当低下. 这里采用ja ...
- PHP反射API
近期忙着写项目,没有学习什么特别新的东西,所以好长时间没有更新博客.我们的项目用的是lumen,是基于laravel的一个轻量级框架,我看到里面用到了一些反射API机制来帮助动态加载需要的类.判断方法 ...
- 当攻击者熟读兵法,Camouflage病毒实战演示暗度陈仓之计
"明修栈道,暗度陈仓"的典故许多人都听说过,该典故出自楚汉争霸时期,刘邦意图进入关中,需要攻下关中咽喉之地--陈仓.韩信献出一计:表面上浩浩荡荡地修复通往陈仓的栈道以迷惑陈仓守将, ...
- Unity Animation System(动画系统)
动画系统: 支持:动画融合,混合,叠加动画,行走循环的时间同步,动画层,控制动画的各个方面(时间,速度,融合权重) 带有每顶点1.2或4骨骼的蒙皮网格,以及支持基于物理的布娃娃系统和程序动画. ...
- 关闭电脑SSD的磁盘碎片整理
小白往往会把机械硬盘时代的习惯带进固态硬盘时代,比如碎片整理.机械硬盘时代砖家最喜欢告诉小白:“系统慢了吧?赶紧碎片整理撒.”小白屁颠屁颠地整理去了.殊不知碎片整理对于SSD来说完全就是种折磨.这种“ ...
- Python帮助文档中Iteration iterator iterable 的理解
iteration这个单词,是循环,迭代的意思.也就是说,一次又一次地重复做某件事,叫做iteration.所以很多语言里面,循环的循环变量叫i,就是因为这个iteration. iteration指 ...
- VS Code 配置Python
1. 安装VS Code的Python插件,选择安装次数最多的那个 2. 点击用户设置菜单,在settings.json中添加 "python.pythonPath": " ...
- 视图views粗略理解
>>>>>> >>>> 创建视图: create view goodsavgview as select cat_id,avg(shop_ ...