概述
函数
函数的功能是包裹一部分代码,实现某一个功能,的一段代码。
特点:可以仿佛调用,提高代码的复用性,从而提高效率,是代码结构清晰,便于代码的维护管理。
定义函数的方式:
基本格式
def 函数名():
print('hello,world')
pass
定义函数
def func():
print('你好!谢谢!')
调用函数
函数名+括号
#调用上面的函数
func()
#运行结果
#你好!谢谢!
函数命名:
- 字母数字下划线,首字符不能是数字
- 严格区分大小写,且不能用关键字
- 函数命名尽量做到见名知意,且不使用中文。
驼峰命名法:
大驼峰命名法:每个单词首字符大写(类:面向对象)
例如:savefile =>SaveFile loadfile=>LoadFile
xiao
小驼峰命名法:除了第一个单词的首字符小写之外,剩下每个单词首字符大写
savefile =>saveFILE loadfile = >loadFILE
还有下划线+单词 :
savefile = save_file loadfile = load_file
以上三种不同的命名风格主要是为了区分代码中函数名,变量名,类名等。在代码的执行层面并无差异。
函数的定义处:
函数在定义阶段是不执行的,只有到了调用阶段才会执行。
函数的调用处:
函数在调用阶段,函数体的代码才会执行。
函数的参数
参数:配合函数内部代码运行必要的值
参数分为:
- 形参,形式参数,在函数定义阶段需要写明的变量名。
位置形参, 默认形参 , 普通收集形参 , 命名关键字形参 , 关键字收集形参
实参: 普通实参,关键字实参 - 实参,实际参数,函数调用阶段,真实参与代码运行的数值。
实参: 普通实参,关键字实参
遵循原则:
实参和形参要一一对应。
- 位置形参
示例一:
'''
函数star_arry(row,column)的功能是需要打印行M列的全‘0’矩阵。
行数和列数由调用者来设定。
'''
def star_arry(row , column):
i = 0
while i<row:
j = 0
while j <column:
print("0",end=' ')
j+=1
print()
i+=1
star_arry(10,9)
上面这个例子中,行数和列数在我们调用函数时确定,传入两个数字按照位置对应row和column,在函数执行的时候,我们传入的两个实际的数字也就是实参,对应函数内部两个变量的名,相当于我们给函数内部两个变量row和column分别赋值。这种传参方式是实参与形参之间是按照位置严格对应的。
- 默认形参
在函数定义处,给形参赋一个默认值,如果函数调用时不传入新的值,函数按默认值运行。
示例二:
def star_arry(row=10 , column=10):#在此处
...
#此处代码与示例一相同
pass
star_arry()
star_arry(9,7)
示例一中如果不传入参数的话,程序报错,这个程序不传入参数,打印10行10列的全零矩阵
有传入数值的话,按传入数值来打印矩阵
- 普通形参 + 默认形参
函数的定义处
默认形参必须跟在普通形参的身后,顺序是一定的,顺序反掉的话会直接报错。
示例三
def star_arry(row , column=10):
...
#此处代码与示例一相同
pass
star_arry(8)
star_arry(5,7)
此种情况下至少传入一个位置参数。
- 关键字实参
关键字实参是对具体的某个参数赋值,具体的顺序可以打。
示例四:
def star_arry(row,column,a,b,c):#函数定义处
...
#此处代码与示例一相同
pass
star_arry(column=8,row=7,b = 4,a = 3,c= 1)#函数调用处
值得注意的是函数定义时,和函数调用时参数的位置可以互换,但是形参和实参要对应,不可增加也不可减少。
- 普通实参 + 关键字实参
示例五
def star_arry(row,a,b,c,column=10):
...
#此处代码与示例一相同
pass
star_arry(8,1,row=7,b = 4,c= 1)
注意:关键字实参必须跟在普通实参的身后,顺序是一定的
默认参数和关键字实参 在写法上一模一样
一个是在函数的定义处
一个是在函数的调用处
- 收集参数
收集参数:
*
- 普通收集参数: 专门用来收集多余的没人要的普通实参
def func(*args):
code
*args => arguments(参数)
在args这个参数的前面加上一个*表达普通收集参数,形成一个元组
基本使用
def func(a,b,c,*args):
print(a,b,c)
print(args)
func(1,2,3,4,5,5,6,7,8)
在func这个函数调用的时候,1,2,3分别对应的位置形式参数4,5,5,6,7,8没对应的形式参数,被*args收集成为了一个元组。
#运行结果
1 2 3
(4, 5, 5, 6, 7, 8)
计算任意个数的累加和
def func(*args):
total = 0
for i in args:
total += i
print(total)
def func(*args):
total = 0
for i in args:
total += i
print(total)
func(-429,78,352,76,345,234,76,863,274)
#运行结果:
1869
- 关键字收集参数 : 专门用来收集多余的没人要的关键字实参
def func(**kwargs):
code1...
**kwargs => keyword arguments
在kwargs参数的前面加上2个**表达关键字收集参数,形成一个字典
def func(a=1,b=2,c=3,**kwargs):
print(a,b,c)
print(kwargs) # {'f': 1, 'g': 2, 'j': 3}
func(f=1,g=2,j=3,a=15,b=16,c=17)
#运行结果
15 16 17
{'f': 1, 'g': 2, 'j': 3}
- 命名关键字参数
定义命名关键字参数的两种方式:
(1)def func(a,b,*,c) c是命名关键字
(2)def func(*args,c,**kwargs) c是命名关键字参数
在函数调用时,必须使用命名关键字参数来进行赋值
定义方式一
def func(a,b,*,d,c):
print(a,b)
print(d)
print(c)
func(1,2,d = 3,c=10)
定义方式二
def func(*args,c,**kwargs):
print(args)
print(c)
print(kwargs)
func(1,2,3,4,5,6,a=1,b=2,d=6,c=100)
运行结果
(1, 2, 3, 4, 5, 6)
100**加粗样式**
{'a': 1, 'b': 2, 'd': 6}
关于* 和 ** 的使用方法
* 和 ** 在函数的定义处,用来做收集操作,打包
* 和 ** 在函数的调用处,用来做打散操作,解包
def func(a,b,*,c,d):
print(a,b)
print(c,d)
lst = [1,2]
# *把列表里面的所有元素拿出来,当成参数一个一个赋值给func进行调用
func(*lst,c=3,d=4)
def func(a,b,*,c,d):
print(a,b)
print(c,d)
dic = {"c":3,"d":4}
# **把字典里面的所有元素拿出来,拼装成键=值的参数形式,赋值给func进行调用
func(1,2,**dic,) # func( c=3, d=4 )
# *和**的组合
func(*lst,**dic)
strvar = "abc"
print(*strvar)
最后
以上就是细腻小海豚为你收集整理的Python函数的几种传参方式函数函数的参数的全部内容,希望文章能够帮你解决Python函数的几种传参方式函数函数的参数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复