python的函数介绍 位置参数 关键字参数 默认参数 参数组 *args **kwargs
1、数学意义的函数与python中的函数
数学意义的函数
y = 2*3+1
x =3
y =7
x是自变量,y是因变量
2、python中定义函数的方法
一个函数往往都是为了完成一个特定的功能而存在的,所以注释信息加上是个好习惯
def atest(x):
"The function definitions"
x += 1
return x
def: 定义函数的关键字
atest: 函数名
(): 内可定义形参
"": 文档描述(非必要,但是强烈建议为你的函数添加描述信息)
x+=1: 泛指代码块或程序处理逻辑
return: 定义返回值
没有return也是可以的,一个函数里面只要运行到return就会退出整个函数,不在继续往下走
调用运行:可以带参数也可以不带
函数名()
3、写一个函数
def atest(x):
"""
2*x+1
:param x: 整形数字
:return: 返回计算结果
"""
y=2*x+1
return
y
print (atest)
打印出来的是函数的内存地址
<function test at 0x0000000001556D90>
调用下函数
def atest(x):
"""
2*x+1
:param x: 整形数字
:return: 返回计算结果
"""
y = 2 * x + 1
return y
a = atest(3)
print(a) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 7
4.什么情况下调用函数的时候不用加参数呢,就是定义函数的时候括号里面为空
def atest():
"""
2*x+1
:param x: 整形数字
:return: 返回计算结果
"""
x = 3
y = 2 * x + 1
return y
a = atest()
print(a) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 7
5、同一个文件里面的函数名不能有相同的函数名,如果有2个相同的函数名,在下面调用代码的时候会先最终调用最下面的函数,因为python执行顺序是从上到下的,上面的函数会被下面的函数覆盖掉
6.函数的好处
函数的好处:
代码重用
保持一致性,易维护
可扩展性
7.过程定义
过程就是简单特殊没有返回值的函数
下面这atest01就是过程,atest02就是函数
def atest01():
msg="hello the little green frog"
print (msg) def atest02():
msg="hello beiye"
print (msg)
return msg
t1=atest01()
t2=atest02() C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py hello the little green frog hello beiye
8.return可以返回多个值,其实也是一个值,是一个元组
def atest01():
msg="test01"
print (msg)
def atest02():
msg="test02"
print (msg)
return msg
def atest03():
msg="test03"
print (msg)
return 1,2,3,"gou",["beiye"],None,{"name":"gou"}
t1=atest01()
t2=atest02()
t3=atest03()
print (t1)
print (t2)
print (t3) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py test01 test02 test03 None test02 (1, 2, 3, 'gou', ['beiye'], None, {'name': 'gou'})
总结:
返回参数=0:返回None
返回参数=1:返回object
返回值数>1:返回tuple 元组
9.函数的参数
分为2种,形参 实参
(1)形参变量只有在被调用的时候才分配内存单元。因此形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
(2)实参可以是常量、变量、表达式、函数等,无论实参是何种类型的变量,在进行函数调用时,他们都必须有确定的值,以便把这些值传送给形参,因此预先赋值,输入等办法使参数获得确定值
上面的说法听不懂,我自己说下,
形参就是定义函数的时候()里面的定义的参数,还没有被使用,只是定义好
实参就是函数定义完成了,在下面进行调用的时候传进去的参数
def cacl(x, y): #定义了一个函数cacl 形参是x y
reus = x ** y #reus = x的y次方
return reus
reus = cacl(2, 5) #把2传值给x,把5传值给y
print(reus) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 32
(3)位置参数,形参和实参位置必须一一对应,多传参数和少传参数都不行
这个函数的功能就是传入什么参数就打印出来什么
def reus(x,y,z): #x y z是3个形参
print(x)
print(y)
print(z)
reus(1,2,3)#因为形参是三个,所以实参也得是3个,得一一对应,不然就会报错 C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 1 2 3
我们试下形参是3个,实参传2个试试(直接报错了,也就是说少传参数是不行的)
def reus(x,y,z):
print(x)
print(y)
print(z)
reus(1,2) TypeError: reus() missing 1 required positional argument: 'z'
required [rɪ'kwaɪəd] 必须的
positional [pəˈzɪʃənəl] 位置
(4)关键字参数,传参数的时候给指定的形参赋值,并不需要考虑位置的先后顺序,只要形参和实参的个数是一一对应的就可以,多传参数和少传参数都不行
def reus(x,y,z):
print(x)
print(y)
print(z)
reus(y=5,x=4,z=6) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py
4
5
6
(5)位置参数和关键字参数混合使用
位置参数必须在关键字参数左边
def reus(x,y,z):
print(x)
print(y)
print(z)
reus(4,y=5,z=6) #4就是位置参数,y=5,z=6就是关键字参数 C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py
4
5
6
这个位置参数也是在关键字参数左边,为什么报错呢?
因为传参数的时候,第一个参数4赋值给了x,第二个参数6赋值给了y,第三个又传给了y的值等于5, 我们翻译下报错信息就是,这个reus函数的y参数被赋了多个值,所以这里就知道了,一个形参是不能被传参多次的
def reus(x,y,z):
print(x)
print(y)
print(z)
reus(4,6,y=5) TypeError: reus() got multiple values for argument 'y'
multiple [ˈmʌltɪpl] 多个
(6)默认参数
y="linux"就是默认参数,如果传参的时候不传这个参数就使用默认的,如果传入的话就使用传入的值
def reus(x,y="linux"):
print(x)
print(y)
reus(4) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 4 linux
这里为什么把66也括起来呢,因为上面的默认参数就是一个字符串,下面实参也要是字符串
def reus(x,y="linux"):
print(x)
print(y)
reus(4,"") C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 4 66
(7)参数组 **字典 *列表 (也叫可变长参数)
def atest(x,*args): #args 是第二个形参 *是一个特殊用法
print (x)
print (args)
atest(1,2,3,4,5,6) #1传入x,剩下的都传给args了当成一个元组的方式打印出来了 C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 1 (2, 3, 4, 5, 6)
(7).1还能按照索引的方式打印,这就是非固定长度的参数
def atest(x,*args): #args 是第二个形参 *是一个特殊用法
print (x)
print (args)
print(args[0])
atest(1,2,3,4,5,6) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 1 (2, 3, 4, 5, 6) 2
(7).2也可以传入多个值给args,但是函数中并不处理这个args,也是可以的
def atest(x,*args): #args 是第二个形参 *是一个特殊用法
print (x)
atest(1,2,3,4,5,6) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 1
也可不传
def atest(x,*args): #args 是第二个形参 *是一个特殊用法
print (x)
print(args)
atest(1) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 1 ()
(7).3如果给args传入的是2个列表呢
他会把这2个列表作为2个整体传给args,然后以元组的方式打印出来,这2个列表作为这个元组的2个元素
a=[22,33,44,55,66]
b=["heh","beiye"]
def atest(x,*args): #args 是第二个形参 *是一个特殊用法
print (x)
print(args)
atest(1,(a),(b)) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 1 ([22, 33, 44, 55, 66], ['heh', 'beiye'])
传入2个字典也是一样的
他会把这2个字典作为2个整体传给args,然后以元组的方式打印出来,这2个字典作为这个元组的2个元素
a={"name":"gou"}
b={"age":28}
def atest(x,*args): #args 是第二个形参 *是一个特殊用法
print (x)
print(args)
atest(1,(a),(b))
C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py
1
({'name': 'gou'}, {'age': 28})
(7).4问题来了,如果我不想让列表和字典作为一个整体传给args呢,而是遍历一下传给args
列表的时候应该怎么遍历呢
传入参数是列表的时候用1个*(传参数是元组也是用一个*就不举例子了)
下面的第一个实参 "哈哈"传给了x,
a和b这2个参数是2个列表传给了args,传列表用一个* 这是固定用法,传字典用2个
a=[1,2,3]
b=[4,5,6]
def atest(x,*args): #args 是第二个形参 *是一个特殊用法
print (x)
print(args)
atest("哈哈",*(a),*(b)) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 哈哈 (1, 2, 3, 4, 5, 6)
要想取到列表中的6这个元素该怎么取(索引方式就可以取到了)
a=[1,2,3]
b=[4,5,6]
def atest(x,*args): #args 是第二个形参 *是一个特殊用法
print (x)
print(args[5])
atest("哈哈",*(a),*(b)) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 哈哈 6
(7).5传入参数是字典的时候用2个* **kwargs
a={"name":"gou"}
b={"age":28}
def atest(x,**kwargs): #args 是第二个形参 *是一个特殊用法
print (x)
print(kwargs)
atest(1,**(a),**(b))
C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py
1
{'name': 'gou', 'age': 28}
要想取到字典里面的28这个value应该怎么取呢
a={"name":"gou"}
b={"age":28}
def atest(x,**kwargs): #args 是第二个形参 *是一个特殊用法
print (x)
print(kwargs["age"])
atest(1,**(a),**(b))
C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py
1
28
a={"name":"gou"}
b={"age":28}
def atest(x,**kwargs): #args 是第二个形参 *是一个特殊用法
print (x)
print(kwargs.get("age"))
atest(1,**(a),**(b))
C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py
1
28
要想取到字典里面所有的value呢,就可以用字典的方法了
a={"name":"gou"}
b={"age":28}
def atest(x,**kwargs): #args 是第二个形参 *是一个特殊用法
print (x)
print(kwargs.values())
atest(1,**(a),**(b))
C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py
1
dict_values([28, 'gou'])
也可以这样写,最后也会以字典的方式打印出来
def atest(x,**args): #args 是第二个形参 *是一个特殊用法
print (x)
print(args)
atest(1,y=2,z=3) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 1 {'z': 3, 'y': 2}
(7).6
*args **kwargs 两者连接起来使用,无所不能,可以接受任意长度的参数
def atest(x,*args,**kwargs):
print (x)
print(args)
print (kwargs)
atest(1,11,22,33,44,y=2,z=3) C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py 1 (11, 22, 33, 44) {'y': 2, 'z': 3}
python的函数介绍 位置参数 关键字参数 默认参数 参数组 *args **kwargs的更多相关文章
- (转)python之函数介绍及使用
为什么要用函数? 1.减少代码量 2.保持一致性 3.易维护 一.函数的定义和使用 ? 1 2 3 4 5 6 def test(参数): ... 函数体 . ...
- python strip()函数 介绍
python strip()函数 介绍,需要的朋友可以参考一下 函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除 ...
- python中函数的定义、返回值以及参数的简要介绍
一. 1.函数 定义:def关键字开头,空格之后接函数名称和圆括号(),后面紧跟‘:”. 函数是对功能的封装 语法: def 函数名(形参列表): 函数体(代码块,return) 调用: 函数名(实参 ...
- day11 python学习 函数的建立,返回值,参数
函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算,如:发送邮件.计算出 [11,22,38,888,2]中的最大数等 ...
- Python在函数中使用列表作为默认参数
在学习中遇到的Python的一个坑,那就是使用列表作为默认参数. 我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使用列表作为函数的默认参 ...
- 移动端自动化测试(二)之 Appium常用的API(python)函数介绍
上一章节已经介绍了Appium的环境搭建,其实只要掌握了Appium的工作原理,前期的准备工作和安装过程是比较简单的.那么当我们搭建好Appium环境后接下来做些什么呢?通常思路是开始appium的第 ...
- python之函数形参、实参、可变长参数整体使用和分类
形参与实参 '''def fn(形参们): pass fn(实参们)'''# 形参:定义函数,在括号内声明的变量名,用来结束外界传来的值# 实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表 ...
- python之函数介绍
# 函数 # 什么是函数: 能完成特定功能的工具,在Python中表示能完成特定功能的代码块.(函数定义) # 为什么要用函数 :①函数可以重复调用出来,效率高,而且维护成本低 ②使程序结构看起来清晰 ...
- python socket 函数介绍
socket 函数原型:socket.socket([family[,type[,proto]]]) family参数取值(协议族): socket.AF_INET -->ipv4 ...
随机推荐
- 利用原生Javascript实现计算器(未完待续)
这里,将记录我升级四则运算v1.2的整个过程. 环境检测,杨说检测环境也是可以高兴到手舞足蹈的一件事. 为了实现自动化,Testing,查阅相关资料,我这里使用了node(这里为了npm).yoema ...
- 2018-2019-20172321 《Java软件结构与数据结构》第六周学习总结
2018-2019-20172321 <Java软件结构与数据结构>第六周学习总结 教材学习内容总结 第10章 树 10.1概述 树由一个包含结点和边的集构成,其中的元素被储存在这些结点中 ...
- 课堂实践ASL博客
实践博客 二分法查找元素 1.首先定义三个位置min,mid,max 2.每次从所有元素所处位置的中间开始查找(所有元素必须以由小及大顺序排列完毕) 3.当中间元素大于所查找元素时,从中间元素(mid ...
- 《大象Think in UML》阅读笔记之二
Think in UML阅读笔记(二) 上一次读到面向对象和面向过程的区别和各自的优势,结合实例分析了面向过程在面对大数据的时候,已经不足以满足人们的需求,所以引入了面向对象,面向对象的方法把世界看做 ...
- 福大软工 Alpha 事后诸葛亮
写在前面 林燊大哥 一路走来,好不容易,终于完结了. 设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决的问题 用户在进店之前无法得知店铺的优劣 ...
- 我的寒假C(C++)学习计划
前言 要补缺加强C语言的想法由来已久,上学期因为种种原因,某些知识点学习得不是很理想,而且,许多地方也有加强的必要,所以这次布置的随笔可谓是来得恰到好处. 学习材料 C Primer Plus 师爷的 ...
- vue-cli 安装步骤(转载)
参考资料:Vue2.0 新手完全填坑攻略—从环境搭建到发布 1.Node.js安装 https://nodejs.org/en/download/ 2.安装vue-cli npm install -g ...
- [BUAA_SE_2017]个人作业-Week1
个人作业-Week1 疑问 教材中说,PM在衡量需求时需要方方面面的能力与研究.可是,当下许多互联网IT公司只承担外包业务,即客户给什么需求就实现什么需求,甚至可能不要求其它先进的功能.此时,开发团队 ...
- ArrayList底层实现
ArrayList 底层是有数组实现,实际上存放的是对象的引用,而不是对象本身.当使用不带参的构造方法生成ArrayList对象时,实际会在底层生成一个长度为10的数组 当添加元素超过10的时候,会进 ...
- c++11 可变参数模板函数
c++11 可变参数模板函数 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #in ...