函数
概念:功能 (包裹一部分代码 实现某一个功能 达成某一个目的)
特点:可以反复调用,提高代码的复用性,提高开发效率,便于维护管理
#Python函数的基础知识
函数是一段具有特殊功能的、可重用的语句组。(将代码封装起来)
定义:def(定义一个函数)关键词开头,空格之后接函数名称和圆括号(),最后还有一个“:”。
def是固定的,不能变,必须是连续的def三个字母,不能分开。
空格 为了将def关键字和函数名称分开,必须空。
函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。
虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并表达函数功能。
括号:必须要有;
注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。
调用:就是函数名() 一定要加上括号。
1.函数基本格式
#定义一个函数
def 函数名():
code1
code
#调用函数
函数名()
#定义函数
def func():
print("我是一个函数 … ")
#调用函数
func()
#函数定义
def my_len(): """计算s1的长度""" s1 = "hello world" length = 0 for i in s1: length = length+1 print(length) #函数调用 my_len()
函数的定义和调用
注:只定义函数而不调用,函数就不执行。
2.函数的命名
字母数字下划线,首字符不能为数字
严格区分大小写,且不能使用关键字
函数命名有意义,且不能使用中文哦
驼峰命名法:
(1) 大驼峰命名法: 每个单词的首字符要大写 (类的命名)
mycar => MyCar
(2) 小驼峰命名法: 除了第一个单词首字符小写外,剩下单词首字符大写 (函数或者变量)
mycar => myCar
_命名法:可以将不同的单词用_拼接在一起
mycar => my_car
symmetric_difference symmetricDifference SymmetricDifference
#函数定义
def cfb_99(): for i in range(1,10): for j in range(1,i+1): print("{:d}*{:d}={:2d} ".format(i,j,i*j) ,end="") print()
#调用函数,打印多次,可以循环调用
for i in range(5): cfb_99()
函数写出乘法口诀
3.函数的参数
参数: 函数运算时需要的值
参数种类:
(1)形参: 形式参数,在函数的定义处
(2)实参: 实际参数,在函数的调用处
形参的种类:
1.普通形参(位置形参) 2.默认形参 3普通收集形参 4.命名关键字形参 5.关键字收集形参
实参的种类:
1.普通实参(位置实参) 2.关键字实参
原则:
形参和实参要一一的对应
1.普通形参(位置形参)
#定义函数
"""hang,lie普通形参,在函数定义处""" def small_star(hang,lie): i = 0 while i < hang: j = 0 while j < lie: print("*",end="") j +=1 print() i += 1
#调用函数
“”“10,10普通实参,在函数的调用处”“”
small_star(10,10) small_star(2,3)
2.默认形参
“”“hang,lie默认形参,在函数定义处”“”
“”"
如果给予实参,那么使用实参
如果没有给予实参,那么使用参数身上的默认值
“”"
def small_star(hang=10,lie=10): i = 0 while i < hang: j = 0 while j < lie: print("*",end="") j +=1 print() i += 1 small_star(4,8) small_star(8) small_star()
默认形参,调用时带有实参时,就按实参运行,不带实参就按默认的形参值运行
传一个实参,给第一个形参赋值
3.普通形参 + 默认形参
“”“定义参数时,普通(位置)形参必须写在 默认形参 的前面 不能调换位置”“”
def small_star(hang,lie=10): i = 0 while i < hang: j = 0 while j < lie: print("*",end="") j +=1 print() i += 1 small_star(5,7) # small_star(5) # small_star() error
普通形参必须传值,否则报错
4.关键字实参
print(“<=============>”)
“”"
1.如果都是关键字实参,可以任意调整实参的顺序
2.普通实参必须写在关键字实参的前面
""" def small_star(hang,a,b,c,lie=10): i = 0 while i < hang: j = 0 while j < lie: print("*",end="") j +=1 print() i += 1 # hang a ... lie 具体指定参数的值 叫做关键字实参, 在函数的调用处赋值; # small_star(hang=3,a=4,b=5,c=6,lie=7) # small_star(b=5,c=6,lie=7,a=4,hang=3) #全部使用关键字实参,可以任意调整实参顺序 small_star(3,4,b=5,c=6,lie=7) #普通实参与关键字实参同时存在,普通实参必须在关键字实参前面 small_star(3,4,b=5,lie=7,c=6) # small_star(b=5,c=6,lie=7,3,4) error
5.收集参数
(1) 普通收集形参: 专门用来收集那些多余的没人要的普通实参
收集之后,会把多余实参打包成一个元组
定义的时候,参数头上1个星星。调用的时候不用加星星
如果没有定义收集普通形参,那么实参个数一定得与形参数量一致,既不能多,也不能少,不然报错。
定义了收集普通形参,实参个数就没有限制了。但普通收集普通形参,只能收集位置参数,不能收集
关键字参数
def func(*args): args不是固定的,可以任意起名 pass args => arguments """ def func(a,b,c,*args): #定义的时候加* print(a,b,c) # 1 2 3 print(args) # (4,5,6) #调用的时候不加* func(1,2,3,4,5,6) 打印args,是一个元祖
#计算任意个数值得累加和 def mysum(*args): total = 0 for i in args: total += i print(total) mysum(1,2,3,4,4,45,10,100)
收集普通实参,获得的是个元祖,可以针对元祖做相关运算
(2) 关键字收集形参: 专门用来收集那些多余的没人要的关键字实参
收集之后,会把多余关键字实参打包成一个字典
参数头上有2个星星
收集关键字形参,只能收集关键字实参,不能收集位置实参
def func(**kwargs): kwargs也是自己定义的 pass kwargs => keyword arguments def func(a,b,c,**kwargs): print(a,b,c) print(kwargs) # {'f': 100, 'e': 200, 'z': 12} func(c=1,a=3,b=10,f=100,e=200,z=12)
收集关键字形参,只能收集关键字实参
#拼接任意个数值变成字符串 """ 班长: 赵万里 班花: 马春陪 划水群众: 赵沈阳,李虎凌,刘子涛 """ def func(**kwargs): strvar1 = "" strvar2 = "" # 定义职位信息 dic = {"monitor":"班长","classflower":"班花"} print(kwargs) # 共5次循环 for k,v in kwargs.items(): if k in dic: # 将2次循环的结果通过+= 拼接在一起 strvar1 += dic[k] + ":" + v + "\n" else: # 将3次循环的结果通过+= 拼接在一起 strvar2 += v + " , " print(strvar1.strip()) print("划水群众:",strvar2.strip(" , ")) """ # print(k,v) k v monitor 赵万里 classflower 马春陪 water1 赵沈阳 water2 李虎凌 water3 刘子涛 {'monitor': '赵万里', 'classflower': '马春陪', 'water1': '赵沈阳', 'water2': '李虎凌', 'water3': '刘子涛'} """ func(monitor="赵万里",classflower="马春陪",water1="赵沈阳",water2="李虎凌",water3="刘子涛")
深度解读python的函数(二):https://developer.aliyun.com/article/1495708