1.函数定义:
使用def关键字定义函数,然后一个空格加函数名,接下来是一对圆括号和冒号,用来传递参数,格式如下
def 函数名([参数]):
'''注释'''
#注释
函数体
使用案例①
比较两个数的大小
def compare(a,b):
if a>b:
print('The bigger is:',a,end='\n')
print('The smaller is:',b,end='\n')
elif a<b:
print('The bigger is:', b, end='\n')
print('The smaller is:', a, end='\n')
else:
print('They are equal together',a,'=',b,end='\n')
compare(int(input('请输入数字a:')),int(input('请输入数字b:')))
输出结果:
请输入数字a:15
请输入数字b:20
The bigger is: 20
The smaller is: 15
案例②
关于形参和实参
定义是函数参数为形参,调用时调用的参数为实参
#使用默认参数值。形参,
#默认参数值必须在最右边,即在默认参数值的左边不能再有默认值
def say(message,times=1):
print((message+'')*times,end='')
#查看默认参数值
print(say.__defaults__ ,end='\n')
函数定义错误案例:
#错误案例
def abc(a=0,b,c):
print(a,b,c)
def abc1(a,b=0,c):
print(a,b,c)
#正确案例
def abc2(a=1,b=2,c=3):
print(a,b,c)
当参数值省略时
#当参数值省略时的情况
def listm(new,old=None):
if old is None:
old=[]
else:
old.append(new)
return old
print(listm('a',[1,2,3]),end='\n')
print(listm('1',['a','b']),end='\n')
print(listm('a'),end='\n')
输出结果如下
(1,)
[1, 2, 3, 'a']
['a', 'b', '1']
[]
关键参数机制
根据参数的传递方式,通过关键参数可以按参数名传递参数,使得可以打乱参数的传递顺序,当不影响函数运行
def q(a,b,c=0):
print(a,b,c)
q(b=0,c=3,a=8)
输出结果:
8 0 3
通过指针实现可变长度参数的函数以及自带的解包机制
#通过指针实现可变长度参数
def dem(*p):
print(p)
dem(1,2,3)
dem(1,2)
#通过指向指针的指针实现可变长度参数,实现的是字典形式
def dem1(**p):
for item in p.items():
print(item)
dem1(x=1,y=2)
#参数传递序列解包
def dem2(a,b):
print(a+b,end='\n')
dem2(*[1,2]) #解包列表
dem2(*(1,2)) #解包元组
dem2(*{1:'23',2:'33'}) #解包字典,默认为键
dem2(*{1,2}) #解包集合
dem2(*{1:23,2:23}.values()) #解包字典中值
dem2(*{1:'32',2:'35'}.items()) #解包字典的键值对
输出结果:
(1, 2, 3)
(1, 2)
('x', 1)
('y', 2)
3
3
3
3
46
(1, '32', 2, '35')
调用函数需要注意是否会修改原始数据的值,是否有返回值
作用域:
a=5 #在函数外定义全局变量
def dem3():
global a #声明或创建全局变量
a=3 #修改全局变量的值
y=a
print(a,y)
dem3() #本次调用会修改全局变量的值
#可以在模块间声明和调用全局变量
#A模块中声明 global_value=0
#B模块调用 import A A.global_value=1
#c模块调用 import A print(A.global_value)
输出结果:
3 3
2.lambda表达式
格式:
lambda x:expert
x:变量,不限个数
expert:关于变量的表达式
#lambda表达式
f=lambda x,y:x+y
print(f(1,2))
l=[(lambda x:x**2),(lambda x:x**3)]
print(l[0](5),l[1](5))
d={'f1':(lambda x:x**2),'f2':(lambda x:x**4)}
print(d['f1'](1),d['f2'](5))
g=lambda x,y=2:x+y
print(g(1,3))
L=[12]
#print(map((lambda x:x+10),L))
r=[]
for x in range(5):
r.append(lambda n=x:n**2)
print(r[4]())
结果如下图:
3
25 125
1 625
4
16
案例3:
#案例3实现计算圆的面积
import math
r=int(input())
def area(r):
if isinstance(r,int) or isinstance(r,float):
return math.pi*r*r
else:
return ('Input error!')
print(area(r))
输出结果:
5
78.53981633974483
案例4:
#案例4输出一个首项为参数平均数,且其他各项大于平均数的元组
def array(*p):
average=sum(p)//len(p)
d=[i for i in p if i>average]
return (average,)+tuple(d)
print(array(1,2,3,4,5,6,3))
输出结果:
(3, 4, 5, 6)
案例5:
#案例5返回第一个为大写字母元素的个数,第二元素为小写字母个数的元组
def dem3(s):
result=[0,0]
for i in s:
if 'a'<=i<='z':
result[0]+=1
else:
result[1]+=1
return tuple(result)
print(dem3('aaaaAAA'),end='')
案例6:
#案例6逆序三次列表,根据k值,逆序下标在k之前、之后的元素、合起来再逆序一次
def dem4(l,k):
if l is None:
l=[]
x=l[:k]
x.reverse()
y=l[k:]
y.reverse()
r=x+y
r.reverse()
print(r,end='')
l=[1,2,3,4,5,6,7,8]
dem4(l,4)
案例7:
import random
print([random.randint(1,20) for i in range(50)],end='\n')
#打印杨辉三角
def dem5(t):
print([1],end='\n')
print([1,1],end='\n')
line=[1,1]
for i in range(2,t):
r=[]
for j in range(0,len(line)-1):
r.append(line[j]+line[j+1])
line=[1]+r+[1]
print(line)
dem5(10)
学习笔记:
1.关于函数有三部分构成:函数名,参数,以及函数体
2.函数的声明形式为def faction():函数体
3.函数参数形式主要有形参(声明时的参数)和实参(函数调用时传过来的参数)
4.参数可以为可变参数,通过指针实现,具体有两种形式:*p(不限传递个数和形式)/**p(使用时在返回时,类似于字典)
5.lambda表达式:形式为lambda 变量:表达式,返回的是表达式的值,具体参考上面的案例
6.函数的使用需要注意参数形式,是否有返回值以及是否会修改实参