1.函数得四种类型
无参数无返回值得函数
def show():
print("无参数无返回值得函数 ")
有参数无返回值得函数
def show(name,age):
print("我是%s,%d"%(name,age))
show("zhangsan",16)
我是zhangsan,16
无参数有返回值得函数
def show():
msg="好好学习天天向上"
return msg
result= show()
print(result)
好好学习天天向上
有参数有返回值得函数
def show(name,age):
msg="我叫%s,年龄%d"%(name,age)
return msg
result= show("张三",19)
print(result)
我叫张三,年龄19
局部变量和全局变量
局部变量的作用域在函数体内,global 可以在函数内改变全局变量的值
缺省参数
在函数定义的时候参数就已经有值,像这样的参数叫做缺省参数
def sum_num(num1,num2=2):
result=num1+num2
return result
value=sum_num(1,3)
print(value)
4
value=sum_num(1)
3
调用函数的传参方式
1.位置参数方式传参
2.关键字参数方式传参
#.位置参数方式传参,必须按照函数参数的顺序传参
def show(name,age):
print(name,age)
show("zhangsan",16)
#关键字参数方式传参,顺序可以调换,不按照函数参数的顺序传参
def show(name,age):
print(name,age)
show( name="zhangsan",age=16)
show( age=16,name="zhangsan")
#前面按照位置参数,后面按照关键字参数传参
def show(name,age):
print(name,age)
show("zhangsan",age=16)
- 注意前面若为关键字传参,则后面必须按照关键字传参
函数的不定长参数
1.不定长位置参数
2.不定长关键字参数
不定长参数:调用参数的时候不确定传入参数的个数,可能是0个或者多个参数
def sum_num(*args):
print(args,type(args))
#() <class 'tuple'>
#调用不定长位置参数
sum_num()
#args会把调用函数传入的参数封装到一个元组当中
sum_num(1,3,4)
#(1, 3, 4) <class 'tuple'>
def sum_num(*args):
print(args,type(args))
#() <class 'tuple'>
#计算结果
result=0
for value in args:
result +=value
return result
#调用不定长位置参数
sum_num()
#args会把调用函数传入的参数封装到一个元组当中
result=sum_num(1,3,4)
print(result)
8
注意:不定长位置参数只能使用位置函数传参,不能使用关键字方式传参,比如不可食用a=1,b=3,c=4的方式传参。
——————————————————
不定长关键字参数函数的定义和使用
不定长关键字参数函数,**kwargs表示的就是一个不定长关键参数
def show_msg(**kwargs):
print(kwargs,type(kwargs))
#{} <class 'dict'>
show_msg()
def show_msg(**kwargs):
#会把函数调用的关键字参数封装到字典中
print(kwargs,type(kwargs))
#{} <class 'dict'>
#调用不定长关键字参数的函数
show_msg(a=1,b=2)
#{'b': 2, 'a': 1} <class 'dict'>
#不能使用位置参数给不定长关键字函数传参
def show_msg(**kwargs):
print(kwargs,type(kwargs))
#{} <class 'dict'>
for key,value in kwargs.items():
print(key,value)
#调用不定长关键字参数的函数
show_msg(a=1,b=2)
#b 2
#a 1
不定长关键字函数定义
def show_msg(**kwargs):
print(kwargs)
# for key,value in kwargs.items():
# print(key,value)
def show(**kwargs):
show_msg(a=kwargs)
show(a=1,b=3)
{'a': {'a': 1, 'b': 3}}
可以看到并不是输出'a': 1, 'b': 3,而是把原来的字典给了a
注意,调用函数的时候礽然是**kwargs
def show_msg(**kwargs):
print(kwargs)
for key,value in kwargs.items():
print(key,value)
def show(**kwargs):
show_msg(**kwargs)
show(a=1,b=3)
输出:
b 3
a 1
不定长位置参数函数的使用
对元组进行拆包
def show_msg(*args):
print(args)
for key in args:
print(key)
def show(*args):
show_msg(args)
show(1,2)
输出
((1, 2),) ##为了解决此问题
(1, 2)
加*号
def show_msg(*args):
print(args)
for key in args:
print(key)
def show(*args):
show_msg(*args)
show(1,2)
输出
(1, 2)
1
2
函数不定长参数的高级使用
def show(name,age,*args,**kwargs):
print(name,age,args,kwargs)
#这里要注意的是前面使用关键字传参,后面必须使用关键字传参
show("lisi",18,1,2,3,a="苹果",b="香蕉")
因此前面用位置参数传参,后面使用关键字传参
问题1,def show(*args,name,age,**kwargs):
如何传参
def show(*args,name,age,**kwargs):
print(name,age,args,kwargs)
#这里要注意的是前面使用关键字传参,后面必须使用关键字传参
show(1,2,3,name="lisi",age=18,a="苹果",b="香蕉")
#参数名找不到时,全部给**kwargs
问题2,def show(**kwargs,*args,name,age):
如何传参
答:**kwargs必须放在所有参数后面
如果有必选参数 、缺省参数 那么缺省参数要放在必选参数后面
#下面的定义可以使用缺省参数
def show(name,*args,age=18,**kwargs):
print(name,age,args,kwargs)
#如果有必选参数 、缺省参数 那么缺省参数要放在必选参数后面
show("lisi","大叔","小米",a="苹果",b="香蕉")
函数注意事项
函数名不能相同,否则第一个函数不可使用
变量名不能和函数名相同
必选参数使用关键字传参
*后面的参数必须使用关键字传参,前面不做要求
def show(*,name,age=18):
print("我叫%s,年龄%d"%(name,age))
#如果有必选参数 、缺省参数 那么缺省参数要放在必选参数后面
show(name="曹操",age=18)
#我叫曹操,年龄18
show("曹操",18) ##报错
TypeError: show() takes 0 positional arguments but 2 were given
匿名函数
匿名函数应用场景
1.简化代码
def is_os(num):
if num%2==0:
return True
else:
return False
resul=is_os(4)
print(resul)
new_fuc=lambda num : True if num%2==0 else False
result=new_fuc(3)
print(result)
2.对字典进行排序 (这个不会)
#item:表示列中的每一项字典
#item["age"]:根据字典中的age对应的value值排序
#默认是从小到大排序
#默认是升序排序,,reverse=True则是降序
my_list=[{"name":"zs","age":20},{"name":"ls","age":10}]
my_list.sort(key=lambda item:item["age"],reverse=True)
print(my_list)
[{'age': 10, 'name': 'ls'}, {'age': 20, 'name': 'zs'}]
这里的匿名函数也可以用函数代替
my_list = [{"name": "zs", "age": 20}, {"name": "ls", "age": 10}]
def get_value(item):
return item["age"]
my_list.sort(key=get_value)
print(my_list)
[{'age': 10, 'name': 'ls'}, {'age': 20, 'name': 'zs'}]
切片
https://www.jianshu.com/p/15715d6f4dad
这是切片的网站,非常全