## 函数详解 ## 函数是结构化编程对代码的最基本的封装,为了复用,减少冗余代码。 ## 函数包括 1.内建函数,2.库函数, ## *(add0 -- add2) 是不可变参数 def add0(x,y): ## 定义一个简单函数并给出两个位置形参,按照位置顺序传入实参,位置参数和关键字参数是调用不同,对于同样的函数f(x,y), ## 如果调用是f(2,8),则是位置参数,按照位置顺序将实参传给形参,如果调用是 f(y=8,x=2)则是关键字参数,可以不按顺序将实参传给形参。 # 位置参数必须在关键字参数之前传参。 result = x+y return result
## a00 = add0() # 语法错误,x y 为位置参数,不能接受0个实参,函数调用时传入的参数要和定义的参数的个数相匹配(可变参数例外) a01 = add0(4,5) ## 调用函数add,并按位置顺序传入两个实参。 a02 = add0('a', 'b') ### 字符串 a03 = add0(x=3,y=8) ## 作为关键字参数调用 a04 = add0(y=3,x=2) ## add0(y=3,2) 语法错误,位置参数必须在关键字参数之前传入。位置参数是按位置对应的。 print('1: ',' a01=',a01,' a02=',a02,' a03=',a03,' a04=',a04)
print('2: ',callable(add0)) ## 判断函数add是否可调用 def add1(x=9,y=11): ### 默认参数值,x y z 虽然有缺省值,但是都是位置参数, return x+y a11= add1() ## 取默认值 a12= add1(6) ### 把6传给x,其他取默认值。 a13 = add1(6,y=7) ## 但是 add1(x=6,7)错误、因为7会传给x,add1(y=9,6)错误,x为位置参数,应该先给x传参数 a14 = add1(y=5,x=9) ##指定了参数名称,与顺序无关。 a15 = add1(y=22)### 把22传给y,其他取默认值。 print('3: ',' a11=',a11,' a12=',a12,' a13=',a13,' a14=',a14,' a15=',a15) ### #def add2(x=4,y): ## 错误,y应该放在x的前面,不能把无缺省值(默认值)的参数y放在有缺省值的参数x后面。应该是def add2(y,x=4) def add2(x,y=8): # 定义一个函数,两个位置参数,缺省值要向后放,只能在函数定义时加缺省值。比如def f(x=3,y)是错误的 return x+y a21 = add2(3,5) ## 按顺序将两个实参传给形参 a22 = add2(9) ## 先将9传给x,y取默认值 a23 = add2(y=7, x=5) # 函数调用为关键字参数,可以不按顺序传参 a24 = add2(3,y=6) ## x作为位置参数,y作为关键字参数,并进行传参 print('4: ',' a21=',a21,' a22=',a22,' a23=',a23,' a24=',a24)def add3(nums): ## 可传入一个可迭代对象,迭代元素求和。集合/range,迭代器 都可以 sum = 0 for x in nums: sum += xreturn sum
a31 = add3([1,2,3,5,9]) ## 传入的实参是序列 a32= add3((2,5,9,6,4,8)) ### 传入是实参是 元组 a33 = add3(range(1,11)) ### 传入的实参是 1-10的数字 print('5: ',' a31=',a31,' a32=',a32,' a33=',a33)### add4 是可变位置参数 def add4(*nums): ## *表示该形参为可变参数,可以接受任意个实参,包括0个。主要是列表和tuple,不用字典。 sum = 0 print(type(nums)) ## 此处不可加 * for x in nums: sum += xprint(sum)return sum
a41 = add4(1,5,9,6,7,2,3) ### 位置关键字参数不能传递任意多个实参。收集多个实参为一个tuple ##a18 = add4([1,5,7,1,],[2,5,3,9]) print('6: ',' a41=',a41)#,' a18=',a18) ### 函数add5 是可变的关键字参数。 def add5(**kwargs): ##可变的关键字参数,形参前使用**符号,可以表示接收多个关键字参数,收集的实参名称和值组成一个字典。 for k,v in kwargs.items(): print('{} = {}'.format(k,v))return kwargs a51 = add5(host='127.0.0.1', port='8080', username = 'Rocky',password='magedu')
print('7:','a51= ',a51)## 可变参数混合使用 def add6(x,y,**kwargs):## 可变参数混合使用 print(x,y) ##,*kwargs 不写 for k,v in kwargs.items(): print('{} = {}'.format(k,v))return kwargs a61 = add6('www','megadu')
print('8: ','a61=:',a61)def add7(x,*args,**kwargs): ## 可变参数,可变关键字参数混合使用 print(x)print(args)for k,v in kwargs.items(): print('{}={}'.format(k,v))return kwargs a71= add7('Rocky')
print('9:','a71=',a71)def add8(x,y,*args,**kwargs): ## 多种参数混合使用,但是add8(7,9,y=5,x=8,a=1,b='python')语法错误。因为7和9已经给了x y print(x) #### 输出普通参数 x的值 print(y) ## 输出普通参数 y的值 print(args) ## 输出 可变普通参数 args 的值 print(kwargs) ## 输出可变关键字参数 kwargs 的值 a81 = add8(3,5,7,9,10,11,15,a=1,b='python')
a82 = add8(3,5)
a83 = add8(3,5,7)
a84 = add8(3,5,a=1,b='python')
print('10: ','a81=: ',a81,'a82=: ',a82,'a83=: ',a83,'a84=: ',a84)def add9(*args,x=6,y=6,**kwargs): ## x y 由位置参数变为 keyword-only 参数(只能是关键字参数),x 和 y必须按关键字传参,可给缺省值。 ## keyword-only概念: 如果在一个星号参数之后出现的普通参数,实际上已经不是普通参数,而是变为keyword-only 参数。 print(x) ## 输出关键字参数 x的值 print(y) ## 输出关键字参数 x的值 print(args) ## 输出可变参数 args的值,是一个元组 print(kwargs) ## 输出可变关键字参数 kwargs的值,是一个字典。 a91 = add9(7,9,3,5,a=1,b='python') ## 前面的数字传给args并生成一个元组,x y 取默认值。 a92 = add9(7,9,y=5,x=3,a=1,b='python') ## x y 按关键字传参。 print('10:', 'a91= ',a91)def add10(*args,x): ##定义一个函数,包括一个可变普通参数和一个keyword-only参数 def add(*kwargs,x) 语法错误,因为kwargs会取走所有值。 print(x)print(args)
a101 = add10(x=8) ## 关键字参数 x 必须按关键字参数赋值,可变普通参数可以为空 a102 = add10(2,4,5,x=1) ## 前面的数字传给可变普通参数后生成一个元组, ## a103 = add10(x=4,3,5,6) 语法错误,不能先给x传参,要先传给普通参数,再传给关键字参数。 a104 = add10(3,2,1,x=9)
print('11: ','a101=',a101,'a102=',a102,'a104=',a104)#def add53(x,w,**kwargs,*args): 此法错误,*参数应该在**参数之前。 def add11(*,x,y): ## keyword-only 参数的另一种形式。*表示后面的x y 是keyword-only 参数 print(x,y) ## 输出两个关键字参数的值。 a111 = add11(x=5,y=6) ## * 之后,普通形参变成了必须给出 keyword-only 参数,必须按关键字参数调用 ### a112 = add11(3,4) 和 a113 = add11(2,x=8,y=6) 语法错误 print('12: ','a111=',a111)def add12(*args,x=5):## 定义一个函数,有一个可变位置形参和一个位置形参。只有可变的形参才可以给0个实参, # 其他的参数必须给实参。有缺省值的情况下例外 print(x) # 输出位置形参的值 print(args) ## 输出可变位置形参的值 a121 = add12() ## 输出x为5,args为空括号,等价于 add11(x=5) a122 = add12(8) ## 调用函数时,输出x为5,可变位置参数args为元组 (8,) a123 = add12(x=9)## 输出x为9,args为空括号 a124 = add12(1,2,3,x=10) ## 输出x为10,args为元组(1,2,3) print('13','a121=',a121,'a122=',a122,'a123=',a123,'a124=',a124) ## 可以不用print命令,以上调用直接输出。 def add13(y,*args,x=8): # 定义一个函数,给出一个普通形参,一个可变普通形参,一个关键字参数且含缺省值。 print('x={},y={}'.format(x,y))print(args)
##a131 = add13() #语法错误,因为形参没有传值 a132 = add13(5)
#a133 = add13(x=6) #语法错误,因为形参没有传值 a134 = add13(1,2,3,x=10)
#a135 = add13(1,2,y=8,x=17) #语法错误,因为普通形参y有多个传值 def add14(x,y,z=3,*args,m=4,n,**kwargs): print(x,y,z,m,n)print(args)print(kwargs)
a141 = add14(1,2,n=4)
# a142 = add14(1,2,10,11,x=7,n=89) ## 错误,x 被重复赋值
详细解决方案
python3学习(1):函数的可变位置参数和可变关键字参数* 和** 学习心得
热度:61 发布时间:2023-12-17 10:13:57.0
相关解决方案
- Python3.4 解释一段程序时提示SyntaxError: invalid syntax异常
- python3.4 编译时提示异常 IndentationError: unexpected indent
- python3.2运用pywin32连接SQLServer2008
- 在 python3 上为 Ubuntu 安装 NCurses
- Python3.x:从其他类访问self.xxx变量而不继承
- 我该如何抓取所有
内容是什么?(python3.6) - 在 Python3 中不使用 FOR 的模式匹配后返回一个巨大文件的确切行
- 在运行脚本的命令前面使用的“ th”,“ python”,“ python3”,“ java”等是什么?
- Python3.6和单例-用例和并行执行
- 使用 Python3 的 Pipedrive API 将交易输出限制为 1000 笔交易
- 无法在 Linux 上使用 python3 和 cx_Oracle 作为外部识别用户进行连接
- 短语突出显示QEditText PyQt4 Python3
- 打印/获取字典中每个嵌套项目的完整路径 - Python3
- python3.7+anaconda3+vs2015+dlib19.16
- python3 判断列表是否存在某元素
- python3 issubset 判断列表子集
- Python3 虚拟环境激活
- Python3 教程
- python3.7+flask+web学习笔记2
- Python3 socket
- 远程部署神器 Fabric,支持 Python3
- python安装教程(Windows系统,python3.7为例)
- python3-PIL基本概念
- python3.7使用pyinstaller 打包.py文件生成exe文件的种种问题
- python3,python2不同版本下安装PyQt4
- python3.7opencv安装
- python3 字符与ascii转换
- python3 一次输入多个值
- Caffe搭建:Ubuntu14.04 + CUDA7.5 + opencv3.1+python3.5
- 【Python3 OpenCV3.3图像处理教程学习笔记01】读入图像+显示图像+保存图像