python函数学习1
函数1
(1)定义:
- def 函数名(参数列表)
- 函数体
(2)参数传递:
在python中,一切都是对象,类型也属于对象,变量是没有类型的。
a = [1,2,3]
a = "helloworld"
以上代码中,[1,2,3]是list类型,"helloworld"是string类型,而变量a是没有类型的,它仅仅是一个对象的引用(一个指针),可以是指向list类型对象,也可以指向string类型对象。
可更改(mutable)和不可更改(immutable)对象:
在python中,string,tuples,numbers是不可更改对象,而list,dictionary等是可修改对象。
①不可变类型:变量赋值a = 5后再赋值a = 10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变了a的值,相当于新生成了a.
②可变类型:变量赋值list= [1,2,3,4]后再赋值list[2] = 5,则是将列表list的第三个元素值更改,本身没有动,只是内部的一部分值被修改了。
python函数的参数传递:
①不可变类型:类似于(值传递),如 整数(number)、字符串(string)、元组(tuple)。如fun(a),传递的只是a的值,没有影响a对象本身。
比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
- def change(a, b):
- """传递不可变对象,交换两个数的值"""
- c = a
- a = b
- b = c
- x = 2
- y = 3
- change(x, y)
- print(x, y)
输出结果:
- 2 3
可以发现,将x,y的值传入change函数,进行交换后,输出x,y的值还是原来的值,这就是不可变类型传递。
②可变类型: 类似于(引用传递),如 列表(list),字典(dict)。如 fun(list),则是将 list 真正的传过去,修改后fun外部的list也会受影响。
- def alter_list(list):
- """传递可变对象,修改列表的值"""
- list[0] = 3
- list1 = [1, 2, 3, 4, 5]
- alter_list(list1)
- print(list1)
输出结果:
- [3, 2, 3, 4, 5]
可以发现,list1中的值发生了改变,同样的写法,上面的例子中的值没有改变,而下面的值却改变,这就是因为不可变类型和可变类型的参数传递。
注意:python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
(3)参数:
必须参数,位置参数,关键字参数,默认参数,不定长参数。
①必须参数: 调用函数时必须传入一个参数。
- def func(a):
- print(a)
- func() # 没有参数会报错
②位置参数:在传递参数时必须与形参的顺序对应。
- def func(a, b):
- print('a=%s'%a)
- print('b=%s'%b)
- func(2, 3)
- func(3, 2)
③关键字参数:使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
- def func(a, b):
- print('a=%s'%a)
- print('b=%s'%b)
- func(a=2, b=3)
- func(b=3, a=2)
④默认参数:调用函数时,如果没有传递参数,则会使用默认参数。
- def func(a, b=3):
- print('a=%s'%a)
- print('b=%s'%b)
- func(2)
⑤不定长参数: def 函数名(形参1,*形参2) 加了星号*的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
def 函数名(形参1,**形参2) 加了两个星号**的参数会以字典的形式导入。
- def func1(a, *b):
- print(a)
- print(b)
- func1(3, 4, 5, 'a', [1, 2, 3])
- def func2(a, **b):
- 8 print(a)
- print(b)
- func2(3, c=4, d=5) # 因为**要以字典的形式存储,而字典需要key值和value值,所以传参的时候要用这种方式
输出结果:
- 3
- (4, 5, 'a', [1, 2, 3])
- 3
- {'c': 4, 'd': 5}
python函数学习1的更多相关文章
- [python 函数学习篇]默认参数
python函数: 默认参数: retries= 这种形式 def ask_ok(prompt, retries=, complaint='Yes or no, please!'): while Tr ...
- python函数学习的总结
python函数 part1 函数的作用: 函数以功能(完成一件事)为导向 随调随用减少代码重复性 增强代码可读性 函数的结构: def 函数名(): 函数体 函数的返回值 return:在函数中遇到 ...
- python函数学习之装饰器
装饰器 装饰器的本质是一个python函数,它的作用是在不对原函数做任何修改的同时,给函数添加一定的功能.装饰器的返回值也是一个函数对象. 分类: 1.不带参数的装饰器函数: def wrapper( ...
- Python函数学习遇到的问题
Python函数的关键字参数 Python函数独立星号(*)分隔的命名关键字参数 Python函数中的位置参数 Python中对输入的可迭代对象元素排序的sorted函数 Python中函数的参数带星 ...
- python函数学习(一)
1.parse_known_args()和parse_args()函数 该函数为命令行解析函数,调用时需要import argparse(命令行选项.参数和子命令的解析器). 以下内容摘自python ...
- Python函数学习——递归
递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 函数实现过程 def calc(n): v = int(n//2) print(v) if v > ...
- Python函数学习——初步认识
函数使用背景 假设老板让你写一个监控程序,24小时全年无休的监控你们公司网站服务器的系统状况, 当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警, 你掏空了所有的知识量,写出了以下 ...
- Python函数学习——作用域与嵌套函数
全局与局部变量 在函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的函数. 当全局变量与局部变量同名时,在定义局部变量的函数内 ...
- Python --函数学习3 (将函数存储在模块中)
将函数存储在模块 函数可以将代码块和主程序分离,通过给函数指定描述性名称,可以让主程序更加容易理解,还可以更进一步,将函数存储在模块的独立文件中,再将模块导入到主程序.import 语句允许再当前运行 ...
随机推荐
- composer 镜像地址
composer config -g repo.packagist composer https://packagist.composer-proxy.orgcomposer config -g re ...
- [DBNETLIB][ConnectionOpen(Invalid Instance())] 无效的连接 的解决办法
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Data Source=192.168.1.28,1433 连接SQL serve ...
- Vue在一个函数中调用另外一个函数
如:在vue的methods中一个函数调用另外一个函数 this.$options.methods.函数名字(); (这样的话要注意,this的指向已经指向了这个实例而不是指向全局,所以可能会报错说b ...
- 初识spark的MLP模型
初识Spark的MLP模型 1. MLP介绍 Multi-layer Perceptron(MLP),即多层感知器,是一个前馈式的.具有监督的人工神经网络结构.通过多层感知器可包含多个隐藏层,实现对非 ...
- H5采集pcm流转换采样率实时发送到服务端
function startTalk(ws2, button) { var arrBuffer = new ArrayBuffer(320 * 2); var sendBuffer = new Dat ...
- 重置表单中的文件上传控件(file input)的方法
方法一: 调用所在 form 表单的 reset 方法,这个方法的缺点是会把整个表单重置,需要存储表单的状态,再回填回去 方法二: 使用jQuery,代码为: $("#id").r ...
- python 模块——os 模块
os 模块--操作系统的各种接口 常用函数: os.path os.path.join(path,*paths) (常用,设置文件路径)将一个或者多个路径连接起来. PATH_TO_TEST_IMAG ...
- C#应用NPOI实现导出EXcel表格中插入饼状图(可实现动态数据生成)
一.思路: 1.excel是可以通过NPOI插入图片的: 2.C#通过NPOI生成饼状图: 3.把生成的饼状图以字节流的形式插入到表格 二.看代码: #region 生成饼图图例 /// < ...
- 每日一练ACM 2019.0418
Problem Description 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离. Input 输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2 ...
- 在JAVA中对于类,对象,继承,多态的看法
这是我第一次学高级语言.很抱歉选择了JAVA,目标是开发一款可以上线的APP. 类:是建立对象的一个模板,就是系列产品中的基础款图纸.只是图纸而已.不是产品. 对象:是一个可以操作的对象.新建一个对象 ...