Python函数
-
内置函数
type()、dir()、input()、print()、id()
-
定义函数
函数参数类型多样
允许嵌套函数
无需声明函数返回值类型
yield可以作为函数返回值的关键字
函数能够被赋值给变量
def func_name(参数列表):
函数体
[return/yield 函数返回值]
//无参函数
def show_log():
print('I am a log')
show_log()
//位置参数:传入的参数与定义的参数一一对应
def func_name(a1,a2,a3):
print(a1,a2,a3)
func_name(v1,v2,v3)
//关键字参数:直接通过等号传递参数
def func_name(a1,a2,a3):
print(a1,a2,a3)
func_name(a1=v1,a3=v3,a2=v2)
//默认值参数:定义函数时,设置参数的默认值
def func_name(a1=v1,a3=v3,a2=v2)
print(a1,a2,a3)
func_name()
//包裹位置参数:参数表示为*args,接收不定长的位置参数,参数被组织成一个元组传入
def func2(*x):
print(x)
func2(1,2,3) =>(1,2,3)
//包裹关键字参数:参数表示为**kwargs,参数自动会组织成一个字典传入
def func3(**b):
print(b)
print(type(b))
func3(a=1,b=2) =>{'a': 1, 'b': 2}
<class 'dict'>
globals()函数:返回所有定义在该模块中的全局变量
修改全局变量时,要先使用global关键字声明变量
msg = 'created in module' #全局变量
def outer() :
def inner() :
global msg
msg = 'changed in inner'
print(msg)
inner()
outer()=>changed in inner
locals()函数:返回所有定义在函数中的局部变量
def outer():
msg = 'created in outer' #自由变量
def inner() :
nonlocal msg #使用nonlocal关键字修改自由变量
msg = 'changed in inner'
inner()
print(msg)
outer()
-
函数返回值
函数无需声明返回值类型
在函数没有返回值时,函数默认返回None
return关键字用于返回返回值 -
yield关键字
1、当函数使用yield关键字时,函数变为生成器。
2、生成器是Python中的一种可迭代对象
3、能够使用for循环遍历
4、生成器每次只被读取一次
5、生成器有内置方法__next()__
,调用后返回下一个元素
6、yield不会终止程序,返回值之后程序继续运行
def list_pythagorean_triples(n) :
for c in range(n):
for a in range(1, c):
for b in range(1, c):
if a*a+b*b==c*c:
yield (a,b,c)
使用循环迭代生成器
for i in list_pythagorean_triples(10):
print(i)
结果:
(3, 4, 5)
(4, 3, 5)
使用next()方法从生成器中取值
g = list_pythagorean_triples(10)
next(g)
结果:
(3, 4, 5)
(4, 3, 5)
构造生成器的结果列表
g = list_pythagorean_triples(10)
list(g)=>[(3, 4, 5), (4, 3, 5)]
生成器表达式:(x**3 for x in range(10))
列表生成式:[x**3 for x in range(10)]
filter()函数中使用lambda表达式
items=[0, 1, 2, 3, 4, 5]
list(filter(lambda x: x%2==0, items)) =>[0, 2, 4]
map()函数,根据提供的函数对指定序列做映射
i1=[1, 2, 3, 4, 5, 6]
i2=[11, 12, 13, 14]
i3=[111, 112]
list(map(lambda x,y,z: x+y+z, i1, i2, i3)) =>[123, 126]
max()函数中使用lambda表达式
max([1,2,3,4], key=lambda x:x) =>返回最大值4
max([1,2,3,4], key=lambda x:-x)=>返回最小值1
min()函数中使用lambda表达式
min([1,2,3,4], key=lambda x:-x) =>返回最大值4
min([1,2,3,4], key=lambda x:x)=>返回最小值1
sorted()函数
sorted([1,2,4,3], reverse=True) =>[4, 3, 2, 1]
sorted([1,2,4,3], key=lambda x:-x)
def my_decorator(some_func):
def wrapper(*args):
print("hello")
some_func(*args)
print("world")
return wrapper
@my_decorator
def add(x, y):
print(x,'+',y,'=',x+y)
运行结果:
hello
5 + 6 = 11
world