文章目录
函数入门
定义函数
可以先调用后定义
def 方法名(形参列表):
pass
返回值
def my_max(x, y):
z = x if x>y else y
return z
编写帮助文档
在第二行用三个引号注释的内容就是帮助文档
查看:
help( my_max)
my_max__.doc__
多个返回值
可以包装成列表返回,或者直接返回,会自动包装成元组
def sum_and_avg(list):
pass
return sum, sum/count
#使用:
s , a = sum_and_avg(a_list)
递归函数
注意递归方向
函数的参数
关键字参数
可以这样调用:
f(v1 = 12, v2 = 15)
但是关键字参数必须放在普通的位置参数后面
参数默认值
带默认值的参数的默认值放在不带默认值的参数后面
可变参数(参数收集)
*形参名
def f( * book, a):
只能有一个“普通”可变参数,位置任意,但是可变参数后面的参数调用时要用关键字调用:
f("asd", "adf", a = "ddd")
还可以同时包含一个关键字参数收集:
会被收集成字典
def f(a, *b, **c):
print(a)
for e in b:
print(e, end="\t")
print()
for ele in c.items():
print(ele, end="\t")
f("aaa", "bb1","bb2", c1 = 1, c2 = 2)
逆向参数收集
就是把元组列表字典等拆开后当成多个参数输入方法中
元组列表:前面加*
, 字典:加**
def test(a, b):
print(a)
print(b)
a_list = [1,2]# 长度必须为2
test(*a_list)
支持收集的参数也要逆向参数收集
def test(a, *b):
print(a)
print(b)
a_list = [1,2,3]# 长度可以不为2,多的给b了
test(*a_list)
变量作用域
局部变量:函数中定义
全局变量:函数外定义
globals(),返回全局变量的字典,在函数内外调用返回相同,可以修改,并且会真正改变值
locals() 返回局部变量的字典,函数内外调用返回值不同,修改没用
vars(Object):返回对象的字典,没有参数是同locals().
遮蔽
在函数内访问全局变量以后,定义一个同名的局部变量会覆盖全局变量
name = "aa"
def test():
# 加入这一句会报错
# pirnt(name)
name = "bb"
print(name)
test()
print(name)
解决方法:
- 通过globals()方法访问全局变量
- 方法内声明使用的是全局变量,则不会定义新的局部变量覆盖
name = "aa"
def test():
global name
print(name)
name = "bb"
print(name) #"bb"
局部函数
在函数体内定义的函数
对外隐蔽,内层函数可以外层函数作为返回值
def f(type ,n):
def square(n):
return n*n
def cube(n):
return n*n*n
if type =="square":
return square(n)
return cube(n)
在内部函数里面给同名变量赋值,也存在覆盖的问题,解决方法:
用nonlocal声明。
高级内容
函数也是对象
可以作为参数赋值,返回值,函数的参数
赋值给参数
相当于别名
def max1(m,n):
return m if m>n else n
My_max = max1
a = My_max(1,2)
a = max1(1,2)
作为函数的形参
def fuc(a, f1):
for e in a:
f1(e)
def printit(ele):
print(ele)
a_list =[1,2,3]
fuc(a_list, printit)
作为返回值
前面局部函数里已经介绍了
局部函数和lambda表达式
lambda x,y : x+y
返回的是一个函数
用于简化那些只调用一次的函数
f1 =f("square")
print(f1(5))
来源:CSDN
作者:longzu233
链接:https://blog.csdn.net/longzu233/article/details/103787991