四、Python函数

变量引用

首先,python中变量名实际上存储的是变量在内存中的地址,而不是变量的值本身。通过变量名,我们可以访问存储在内存中的数据。因此,传递参数传递的是对数据的引用。

赋值运算符可以改变引用,当参数为可变类型时,函数内部若不使用赋值运算符修改形参的引用,对形参的数据修改才会同步到实参的修改,否则互不影响。如果只是修改形参的部分值,实参也会同步修改。

需要注意!列表的+=运算相当于extend函数,不是赋值运算!是会改变实参值的!

局部变量

在函数内部定义的变量,只能在函数内部使用,不能在其他函数和函数外部使用。

在不同函数中,可以定义名字相同的变量名,两者之间没有影响

生存周期:函数调用时会创建局部变量,函数调用结束,局部变量的值会被销毁,不能使用,若需要使用局部变量的值,可使用return将其返回

全局变量

在函数外部定义的变量,可以任何函数中使用。

在函数中若存在与全局变量相同命名的局部变量,函数中使用的会是局部变量的值

若要在函数内部修改全局变量的引用,需要添加global关键字,将变量声明为全局变量

生存周期:代码执行时创建,代码执行结束销毁

函数声明

def开头,后接标识符名称和圆括号
在这里插入图片描述
例:比较大小
在这里插入图片描述

文档注释

在函数名下方使用三对双引号进行注释,说明函数使用,调用时将光标放在函数中可查看注释,或是快捷键

元数据->

->常常出现在python函数定义的函数名后面,为函数添加元数据,描述函数的返回类型

# 函数返回类型为int
def add(x, y) -> int:
  return x+y

函数调用

函数名(传递参数),例子同上

传递参数

参数顺序:普通参数、不定长元组参数、缺省参数、不定长字典参数

def func(arg,*args,arg1=0,**kwargs)

传参方式

位置传参

按照形参的顺序进行传递,参数顺序、数量必须与声明一致

关键字传参

允许参数顺序不一致,python解释器会进行匹配

def printinfo(name, age):
    print("Name: ", name)
    print("Age ", age)
    return
printinfo(50, "miki")

在这里插入图片描述
同时使用位置传参和关键字传参时,应先使用位置传参!

参数类型

普通参数

func(a,b)

默认/缺省参数

函数定义是给形参一个默认值即为缺省参数,缺省参数应放在普通参数后面。函数调用时,可以对缺省参数传递实参值,也可以不传递即为默认值

def printinfo(name, age=20):
    print("Name: ", name)
    print("Age ", age)
    return
printinfo(50, "miki")
printinfo("miki")

在这里插入图片描述

不定长/可变/多值参数

不定长位置参数(不定长元组参数)

通用命名args,变量名前加*,即*args,数据类型为字典,要写在普通参数的后面

def printinfo(arg1, *args):
    "打印任何传入的参数"
    print("输出: ", arg1)
    for var in args:
        print(var)
    return

printinfo(10)
printinfo(70, 60, 50)

在这里插入图片描述

不定长关键字参数(不定长字典参数)

通用命名kwargs,变量名前加**,即**kwargs,数据类型为字典,要写在所有参数的最后面

def func(**kwargs):
	print(type(kwargs),kwargs)
	
func(a=1,b=2,c=3)

<class 'dict'> {'a': 1, 'b': 2, 'c': 3}

函数返回

返回函数的结果,如果是多个数据值的返回,通常会以元组的形式返回(组包)

return a,b,c

匿名函数lambda

lambda 参数:expression

lambda拥有自己的命名空间,不能访问自有参数列表之外或全局命名空间的参数,主体表达式只能封装有限逻辑。
只能书写一行代码,表达式结果就是返回值,不需要return。

def square(x):
    return x**2

print(list(map(square, [1, 2, 3, 4, 5])))
print(list(map(lambda x: x**2, [1, 2, 3, 4, 5])))

在这里插入图片描述

无参无返回

lambda(:print('hello')

无参有返回

lambda(:10)

有参无返回

lambda(x:print(x))

有参有返回

lambda(x:x)

应用

对列表中的字典排序
列表排序,list.sort(),默认升序,是对列表中的数据进行大小比较,比如数字和字符串。
如果列表中的元素是字典,需要使用sort函数中的参数key,指定比较字典大小的方法,字典排序通常是根据字典的某一键值进行排序,需使用匿名函数来返回字典键值。

list.sort(key=lambda:x x['age'])

bar()()
一般而言,调用一个函数是加一个括号。如果看见括号后还有一个括号,说明第一个bar函数返回了一个函数,如果后面还有括号,说明前面那个也返回了一个函数。以此类推。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值