一,函数
1.无参函数
(1)定义函数
def 函数名():
代码
'''函数的调用'''
def printinfo():
print('-'*10)
print('人生苦短,我用python')
print('-'*13)
printinfo()
2.有参函数
def add2num(a,b):
c = a + b
print(c)
add2num(13,6)
3.传参顺序
def add2num(a,b,d):
c=a+b-d
print(c)
add2num(11,22,10)#位置传参
add2num(a=11,b=22,d=10)#关键字传参
#关键字参数不能写在位置传参的前面
def add2num(a,b,d=5):
c=a+b-d
print(c)
add2num(11,22,10)#定义与下方不符时,默认用下方替代上方,d最终取10
函数的返回值
return
def test(a,b):
return a+b,a-b#return还是结束函数,运行到return会结束
c,d =test(1,2)
print(c,d)
函数的嵌套
def testB():
print('B,start')
print('略')
print('B,end')
def testA():
print('A,start')
testB()
print('A,end')
局部变量和全局变量
c=5#全局变量,作用域整个文件
def two_sum(a,b):
global c
c=3#局部变量,作用域函数内部
print(a+b-c)
two_sum(4,9)
四、函数的返回值(一)
1.函数间的数据共享
全局变量在局部使用并且更改数据保存,在另一个函数里面直接使用。
g_num=0
def test1():
global g_num
g_num=100
def test2():
print(g_num)
test1()
test2()
2.函数的嵌套使用
3.默认返回类型为元组,也可以返回为其他类型
def li():
return [1,2]
a = li()
print(a)
print(type(a))
函数的返回值(二)
1.return除了能将数据返回之外,还有一个隐藏功能:结束函数
2.一个函数返回多个值
def fun(a,b):
shang = a//b
yushu = a%b
return shang,yushu#默认是元组
result = fun(5,2)
print(result)#输出(2,1)
五、函数的参数
1.不定长参数
有时可能需要一个函数能处理比当初声明更多的参数,这些参数叫做不定长参数,声明时不会命名
➢*args 存放所有未命名的变量参数,args为元组
➢ **kwargs 存放命名参数,即形如key=value的参数,kwargs为字典
def fun(a,b,*args,**kwargs):
print('a= %d'%a)
print('b=%d'%b)
print('*arge:')
print(args)
print('kwargs:%s'% kwargs)
fun(1,2,3,4,5,m=6,n=7,p=8)
c=(3,4,5)
d={'m':6,'n':7,'p':8}
fun(1,2,*c,**d)#注意元祖与字典的传参方式
fun(1,2,c,d)
student={'name':'ggg','age':19}
a,b=student
print(student[a])
print(b)
2.顺序
缺省参数、*args、关键字参数、**kwargs
'''➢ 定义一个函数接收多个参数,默认值b=1,函数的参数未知个数,把接收的所有参数加起来
def info(*args,b=1,**kwargs):
s=0
for i in args:
s+=i
s+=b
for j in kwargs.values():
s+=j
print(s)
info(1,2,3,4)
tu=('小张','小刘')
a,b=tu
print(a)
print(b)#元组的拆包
a=1
b=2
a,b=b,a
print(a)
print(b)#a,b值相互转换
七、匿名函数
➢ 用lambda关键词能创建小型匿名函数
sum = lambda arg1,arg2:arg1+arg2
print('value of total:%d'%sum(10,20))
print('value of total:%d'%sum(22,3))
应用场景
1、函数作为参数传递
def fun(a,b,opt):
print('a=%s'%a)
print('b=%s'%b)
print('result=%s'%opt(a,b))
fun(1,2,lambda x,y:x+y)
stus=[{'name':'zhangsan','age':18},{'name':'lisi','age':19},{'name':'wangwu','age':17}]
func=lambda x:x['name']
stus.sort(key=func)
print(stus)
stus.sort(key=lambda x:x['age'])
print(stus)
li=['姓名','性别','age']
li2=['sam','man',18]
dic={}
for i,j in zip(li,li2):
dic[i]=j
print(dic)
print(len(dic))
2、作为内置函数的参数(排序的内置函数sort)
3、按name排序
4、按age排序
八、三元表达式
1、定义
➢ 三元表达式实现的效果就是,条件成立的情况下返回一个值,不成立的情况下返回另外一个值
def max2(x,y):
# if x > y:
# return x
# else:
# return y
return x if x > y else y
➢res = 条件成立的情况下返回的值 if 条件 else 条件不成立的情况下返回的值三 元表达式
name=input('your name:').strip()
res='nb' if name == 'youyong' else 'sb'
print(res)
九、列表和字典生成式
1、列表生成式
names=['lxx','zxx','wxx']
l=[]
for name in names:
res=name + '_DSB'
l.append(res)
print(l)
l=[name + '_DSB' for name in names]
print(1)
2、字典生成式
dic = {}
li =['姓名','年龄','性别','QQ']
li2 = ['kai',18,'woman',1251737072]
for i,k in zip(li,li2):
dic[i] = k
print(dic)
print(len(dic))#len是内置函数,查看元素个数
items = [('name','egon'),('age',18)]
dic = dict(items)
print(dic)
keys=['name','age','sex']
vals=['jane',18,'female']
dic={}
for i,k in enumerate(keys):#enumerate里的i是索引
dic[k]=vals[i]
print(dic)
dic={k:vals[i] for i,k in enumerate(keys)}#enumerate里的i是索引
print(dic)
for i,k in zip(keys,vals):
dic[i]=k
print(dic)
dic={i:k for i,k in zip(keys,vals)}
print(dic)