文章目录
变量引用
首先,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函数返回了一个函数,如果后面还有括号,说明前面那个也返回了一个函数。以此类推。

被折叠的 条评论
为什么被折叠?



