Bootstrap

Python函数

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)]
  • lambda表达式

    是一个匿名函数,语法: lambda param1, param2, … : expression
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
;