• python函数


    一、python的作用域

    #############python中的作用域分4种情况。
    L:local 局部作用域,即函数中定义的变量
    E:enclosing 镶嵌的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的。
    G:globa 全局变量,就是模块级别定义的变量。
    B:built-in 系统固定模块里面的变量,比如int,pytearray等。
    搜索变量的优先级顺序依次是:作用局域部 > 外层作用域 > 当前模块中的全局python内置作用域,也就是LEGB。

    *****## (局部改全局变量)通过在def中声明global 变量 就可以修改全局变量
    count = 10
    def a():
    global count
    print(count)
    count='123'
    print(count)
    a()
    print(count)

    ########(通过nonlocal声明函数中的第二层就可以在local中修改)


    ###函数名可以进行赋值
    ###函数名可以作为函数的参数,还可以作为函数的返回值

    ******递归函数****

    def a(n):
    if n ==1: #设置结束值
    return 1 ##结束 返回1
    return n*a(n-1) #实现n*(n-1)一直持续
    ##递归函数
    1.调用自身函数
    2.有一个结束条件
    3.递归能解决的问题循环都能实现(递归效率底)(有限的)

    ####filter #过滤 (迭代器)

    ##语法
    filter(function, iterable)
    *function -- 判断函数。
    *iterable -- 可迭代对象。


    def is_odd(n):
    return n % 2 == 1
    ret=filter(is_odd,[1,2,3,4,5,6,7,8,9,10])
    print(list(ret))
    #结果 [1, 3, 5, 7, 9]

    #map #(迭代器)

    会根据提供的函数对指定序列做映射 ret = map(a,['name','age','sex'])

    def a(n):
    return n + 'zhangbin'

    ret = map(a,['name','age','sex'])
    print(list(ret))

    #结果 ['namezhangbin', 'agezhangbin', 'sexzhangbin']

    reduce ##在functools 模块中 对参数序列中元素进行累积

    import functools
    def add(x,y):
    return x+y
    ret = functools.reduce(add,range(101))
    print(ret)
    #结果 5050(1+2+3..+100)

    #####lambda ##匿名函数

    ret = lambda x,y:x+y
    print(ret(2,3))

    闭包函数

    闭包=函数+定义函数的变量

    def a():
    x=10 #定义函数的变量
    def b():
    print(x) ##这个值(执行的是a函数的变量)
    return b
    a()() ##结果为10(b函数)
    x=a()
    x() ##结果为10 (b函数)

    装饰器函数(为之前的函数添加新的功能)

    foo=show_time(foo) 等于 @show_time

    import time

    def foo():
    print('foo')
    time.sleep(2)

    def show_time(t):
    def inner():
    start=time.time()
    t()
    end=time.time()
    print(end-start)
    return inner

    @show_time ############
    def foo():
    import time
    print('foo')
    time.sleep(2)

    foo()
    # foo=show_time(foo) ###############
    # foo()

    列表生成式(能放函数)

    a=[x*x for x in range(10)] #先取生成的元素 在执行前面的操作 然后放入列表
    print(a)

    结果 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

    生成器(查看 next)是一个可迭代对象

    生成器的2种方法
    1.s=(x*x for x in range(10))
    2.yield
    #查看
    1.next ## 查看函数生成器中的类容(一次看一个数据)next(a)
    2.send 类似next方法(传参数)(不同的是它可以在函数中给yield前面的变量赋值)


    def w():
    print('ok1')
    c=yield 1 ##这里变量赋值
    print(c)
    yield 2
    a=w()
    print(a)
    a.send(None)
    a.send('aaa')
    ##结果
    ok1
    aaa

    #方法一
    s=(x*x for x in range(10))
    print(s)
    print(next(s))

    结果
    <generator object <genexpr> at 0x00000000024BF360>
    0
    #方法二
    def num(x):
    n,a,b = 0,0,1
    while n < x:
    yield b #########生成器
    a,b=b,a+b
    n+=1
    q=num(5)
    print(q)
    print(next(q))
    print(next(q))
    print(next(q))

    结果
    1
    1
    2

    迭代器(生成器就是迭代器)(生成器就是一种特殊的迭代器)

    迭代器满足2个条件
    1.有iter方法
    2.有next方法

    l=[1,2,3,4]
    d=iter(l) ##<list_iterator object at 0x0000000002519898>(迭代器)
    print(d) ##结果 <list_iterator object at 0x0000000002519898>

    print(next(d)) ##结果 1
    print(next(d)) ##结果 2

  • 相关阅读:
    Nginx的编译,和简单的配置问题
    项目课DNS主域名解析服务器(四)
    项目课DHCP服务(三)
    项目课PXE自动装机(二)
    Nginx 详细讲解
    ansible批量管理工具的搭建与简单的操作
    SUID,SGID,SBIT这些到底是什么
    密码截取
    分治和递归的算法实现求数组A[n]中的前k个最大数
    回溯法实现求1n个自然数中r个数的组合
  • 原文地址:https://www.cnblogs.com/zhangb8042/p/8434343.html
Copyright © 2020-2023  润新知