夜间模式暗黑模式
字体
阴影
滤镜
圆角
主题色
Python学习笔记4-函数与作用域

函数

格式:

def add(a, b):
    '''
    放在函数开头的独立字符串是文档字符串,
    可用add.__doc__调用
    '''
    return a+b

位置参数, 关键字参数和默认值(P100)

调用函数的时候后可以使用函数参数的名称来调用, 可以设置默认值

收集参数(提供任意个数的参数), 分配参数(P100)

使用*标记一个参数, 此参数会收集剩下的所有参数放到一个元组中, 此参数之后的参数必须通过关键字指定

使用**号标记会将剩余作为一个字典收集起来

def f(a, *b, **c):
    print(b, c)
    return

f(1, 2, 3, c=10, d=20, e=8)

# (2, 3) {'c': 10, 'd': 20, 'e': 8}

分配参数: 在调用函数是在类型为元组或列表的实参前面加上*, 在类型为字典的实参前面加上**可将其拆分为参数列表

x = [1, 2]
y = {'c':3, 'd':4}
f(*x, **y) # 相当于f(1, 2, c=3, d=4)
# (2,) {'c': 3, 'd': 4}

作用域(P105)

python的作用域(名称空间)是一个字典, 其中当前作用域可用vars()或locals()函数得到, 全局作用域可用globals()得到

在python的函数中可以直接访问全局变量, 但是不建议对全局变量进行修改

def g():
    a = 10
    print('\ng')
    print(id(vars()))
    print(id(locals()))
    print(id(globals()))
    def h():
        b = 20
        print('\ng-h')
        print(id(vars()))
        print(id(locals()))
        print(id(globals()))
        return
    h()
    return

print(id(vars()))
print(id(locals()))
print(id(globals()))
g()

# 结果:

2431549591984
2431549591984
2431549591984

g
2431590262032
2431590262032
2431549591984

g-h
2431590263112
2431590263112
2431549591984

将函数作为参数(函数式编程)(P111)

  • lambda表达式: 创建简单的函数

  • map: 使用map将序列所有元素传递给函数

    >>> list(map(lambda x:x*x, range(10)))
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
    # 与下面的列表推导等价
    
    >>> [x*x for x in range(10)]
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
  • filter: 根据bool函数的返回值进行过滤

    >>> list(filter(lambda x:x%3==0, range(10)))
    [0, 3, 6, 9]
    
    # 与下面的推导式等价
    
    >>> [x for x in range(10) if x%3==0]
    [0, 3, 6, 9]
    
  • reduce: 用指定函数将序列前两个元素合二为一, 在将结果与第三个元素合二为一, 直到得到一个结果

    >>> from functools import reduce
    >>> reduce(lambda x, y:x*10+y, range(1, 10))
    123456789
    
暂无评论

发送评论


				
上一篇
下一篇