函数就是具备某一特定功能的工具
函数可以减少重复代码、增强程序的扩展性、可读性;使用原则是先定义后调用,在定义阶段只检测语法不执行函数体代码,调用阶段才执行函数体代码。
语法:
def foo(参数1, 参数2):
''' 文档注释 '''
code1
code2
return 返回值
形参:位置形参,默认形参,可变长参数
def foo(x, y): #位置形参
pass
def foo(x, y = 1): #默认形参y
pass
def foo(x, *args, **kwargs): # 可变长参数*args,**kwargs
pass
实参:位置实参,关键字实参,可变长实参(*后面必须跟可迭代对象, **后面必须是字典)
调用阶段:
foo(1, 2)
foo(x = 1, y =2)
foo(*"hello", **{'x': 1, 'y': 2})
return是函数结束的标志,函数内可以有多个return,但只要执行一次函数就会立刻结束,并把return的值作为本次调用结果返回。返回值可以是任意类型,没有个数限制,没有return默认返会None,若返回多个值,会将多个值放在一个元组里一起返回。
def foo(x, y):
return x + y
1、引用
def foo():
pass
f = foo
2、当做参数
print(foo)
3、当做返回值
def bar()
def wrapper()
pass
return wrapper
f = bar()
4、当做容器类型的元素
def f1():
pass
def f2():
passl = [f1, f2,]
l[0]() #函数名加括号即调用该函数
函数嵌套调用
def foo():
bar()
f1()
f2()
foo()
函数嵌套定义
def f1():
def f2():
pass
f2()
名称空间:内置名称空间、全局名称空间、局部名称空间
def foo(x, y):
pass
foo(1,2)
加载顺序:内置———>全局———>局部
加载是指程序运行之初,名称空间加载至内存的顺序
查找的顺序:从当前位置向上查找,若当前位置为局部,即:局部——>全局——>内置
查找指的是查找一个变量名所对应的值
全局作用域:全局存活,全局有效(全局名称空间,内置名称空间)
局部作用域:临时存活,临时有效(局部名称空间)
x=1
def outter():
x=10
def wrapper():
print(x)
return wrapper
f=outter()for
max (求可迭代对象中的最大值)
min (求可迭代对象中的最小值)
sorted (将可迭代对象进行排序)
filter (按照条件筛选可迭代对象中满足条件的元素)
map (映射)
具体用法参见之前的博客内容。。。。。
lambda 参数1, 参数2 : 表达式
通常配合以下函数使用:max、min、sorted、map、filter
res=条件成立的结果 if 条件 else 条件成立的结果 # 三元表达式
l=[表达式 for i in 可迭代对象 if 条件] # 列表推导式
g=(表达式 for i in 可迭代对象 if 条件) #生成器表达式
d={k:v for i in 可迭代对象 if 条件} #字典生成式