python学习-函数

函数

1 函数的定义及调用

定义:

def 函数名(形参):
    函数体
    return 返回值#可有可无,不填默认返回none

和C++一样,有主函数:(我之前一直还以为没有来着,,,)
调用

函数名(实参)

2 参数的传递

2.1 一般的传递

  • 位置参数
    没设置默认参数时,按照位置关系一一对应,和C++一样
  • 关键字参数
    打破位置限制,直呼其名的进行值得传递,和形参也是一对一得关系。

位置参数和关键字参数可以混合使用,不过位置参数必须要放在关键字参数前面。例如:

def func(x,y,z):
    ...

func(1,z=2,y=3)#正确
func(z=2,2,x=1)#错误

不能为同一个形参重复传值,例如

func(1,z=2,x=3)#错误,当然,其中也包括了没有给y传值产生的错误。

2.2 默认参数

在定义阶段就给行参赋值

  • 默认参数必须放在非默认参数后面
  • 调用函数时可以不对改新参传值。
  • 默认参数类型必须时不可变类型,包括数字、字符串、元组。不要用可变类型哦,不然可能会出现很多难以预知的错误。
  • 让参数变成可选,例如:
def func(x,y,z=None):#这样z想传就传了。

2.3 可变长参数 *args

  • 不知道会传过来多少参数 *args
  • 改形参必须放在参数列表的最后
def func(x,y,z,*args):
    print(x,y,z)
    print(args)


func(1,2,3,4,5,6,7,8,9)#多余的参数,打包传给args。

#输出:
1 2 3
(4,5,6,7,8,9)
  • 实参打散
func(1,2,3,[4,5,6])
#输出
1 2 3
([4,5,6],)#最后会有都好哦,才不是手滑什么的

加上'*'打散,对象为列表,字符串,元组或集合

func(1,2,3,*[4,5,6])
#输出
1 2 3
(4,5,6)

2.4 可变长参数 **kwargs

对字典特化参数!yikei!!!

def func(x,y,z,**kwargs):
    print(x,y,z)
    print(kwargs)


func(1,2,3,a=4,b=5,c=6) #多余的参数,以字典形式打包给kwargs

#输出
1 2 3
{'a':4,'b':5,'c':6}

字典打散:

func(1,2,3,**{'a':4,'b':5,'c':6})//这样就会输出一样的内容

可变长参数的组合使用

def func(*args,**kwargs):
    print(args)
    print(kwargs)

func(1,2,3,a=4,b=5,c=6)

#输出
结果不言而喻(犀利)

2 函数体与变量作用域

终于到局部变量和全局变量了,不过类似引用相关内容还要往后

2.1 局部变量

局部变量,仅在函数体内定义和发挥作用

2.2 全局变量

全局变量,函数外部定义的变量全是全局变量。全局变量可以在函数体内直接被使用。

  • 除此之外,可以在函数体内定义全局变量
def func(x,y):
    ...
    global z
    ...

没了。==。啊对,变量不能再它被定义之前使用

3 返回值

  • 单个返回值
  • 多个返回值,以元组形式
  • 可以有多个return,一旦其中一个执行,代表函数运行结束
  • 没有return ,返回为None,输出这个返回值的话就是"None"

4 一些特殊的函数

断言函数 assert
格式assert 表达式
表示式结果为false时触发异常,就是程序直接停止运行那种。

匿名函数

1 基本形式
lambda 变量: 函数体
2 常见用法

arr=[(1,2),(2,2),(3,1),(4,5),(6,2)]
arr.sort()#根据第一个元素升序
arr.sort(key=lambda x:x[i])#根据第i个元素升序
arr.sort(key=lambda x:x[0]+x[1],reverse=True)#根据元组内前两个元素之和降序
n=max(arr,key=lambda x:x[1])#同理
posted @ 2021-03-29 22:16  七铭的魔法师  阅读(47)  评论(0编辑  收藏  举报