Python 函数中逃不掉的知识

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
这是切片的网站,非常全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值