Python入门之函数

# 函数分为内嵌函数、三方函数、自定义函数
# 不定长参数函数
# def name(*arg):  # 参数为元组
# def name(**dic):  # 参数为字典
# 参数装包:把传递的参数包装成一个集合
# 参数拆包:把集合参数分解成个体

# Python中参数传递只有引用传递,但如果数据类型是可变的才可以改变原件,否则不能

# 函数中return后续代码不会被执行,只能返回一次,若想返回多个值,
# 可以把这些值包装成元组或列表返回


def calculate(*arg):
    """
    返回两数之和及两数之差
    :param a:
    :param b:
    :return:
    """
    add = arg[0] + arg[1]
    minus = arg[0] - arg[1]
    return (add,minus)


res1, res2 = calculate(2, 4)
print(res1, res2)          # 结果为6 -2

# 偏函数:当函数中的参数大部分情况下都是某个数值时,我们可以把这个函数设置为偏函数,
# 这样在大量的运算中更方便
# 格式:import functools
#       newfunc = functools.partial(oldfunc, para=value)
import functools
int2 = functools.partial(int, base=2)
print(int2("1100"))    # 结果为12

# 高阶函数:当一个函数的参数是另一个函数时,则称这个函数是高阶函数

# 匿名函数,也称lambda函数,可以使代码写起来更简便
# 语法: lambda para1, para2...:表达式
# 注意:只能写一个表达式,表达式的结果就是返回值,不能用return,所以只能用于一些简单的操作处理
people = [{"name": "xx2", "age": 14}, {"name": "xx1", "age": 18}, {"name": "xx3", "age": 20}]
# 按姓名进行排序
# 方式1:定义一个函数
def getkey(x):
    return x["name"]
res = sorted(people, key=getkey)
print(res)   # 结果为[{'name': 'xx1', 'age': 18}, {'name': 'xx2', 'age': 14}, {'name': 'xx3', 'age': 20}]
# 方式2:借助匿名函数
res1 = sorted(people, key=lambda x: x["name"])
print(res1)  # 结果为[{'name': 'xx1', 'age': 18}, {'name': 'xx2', 'age': 14}, {'name': 'xx3', 'age': 20}]

# 生成器:一个特殊的迭代器,惰性地处理数据,可以节省内存,能记录状态,
# 并通过next()函数访问下一个状态,
# 具备可迭代性,当需要访问某一数据时,才将其调入内存,访问结束后删除
# 创建方式1:把列表推导式的[]改成()
g = (i for i in range(1,12) if i % 2 == 0)
print(g)  # 结果为 at 0x000001E0EFB428E0>
for v in g:
    print(v)  # 逐一打印出相应的偶数

# 创建方式2:利用生成器语句,函数中包含yield语句,该函数的执行结果是生成器
# 执行完一条yield语句之后会使函数暂停,并输出当前是第几条yield语句,
# 通过next()函数可以使函数往下执行
def test():
    yield 1
    print("a")
    yield 2
    print("b")

res = test()
print(res)   # 结果为
print(next(res))  # 结果为1,即为执行完yield之后挂起时的返回值
print(next(res))  # 结果为a   \n   2

# 关闭生成器
g.close()

 

你可能感兴趣的:(Python)