python学习之函数学习进阶(二)

一、内置函数

zip函数: zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的
元素按顺序组合成一个tuple,每个tuple中包含的是原有序列中对应序号位置的元素,然后返回由
这些tuples组成的list。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。
在所有参数长度相同的情况下,zip()与map()类似,没有参数的情况下zip()返回一个空list

例子:
l1 = [1,2,3,4]
l2 = [‘a‘,‘b‘,‘c‘,‘d‘]
for i in zip(l1,l2):
    print(i)
返回结果:[(1,‘a‘),(2,‘b‘),(3,‘c‘),(4,‘d‘)]

filter函数: filter函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数
f和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()
根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list.
例子:
def add(n):return n / 2 == 1
for i in filter(add, [1,2,3,4]):
    print(i)        #打印2
    
map函数: map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数f依次
作用在 list 的每个元素上,得到一个新的 list 并返回。
例子:
l = [1,2,3,4]
def add(x):
    return x+1
for i in map(add,l):
    print(i)

reduce函数: reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,
reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,
并返回最终结果值
例子:
from functools import reduce
l = [1,2,3,4,5]
print(reduce(lambda x,y: x+y, l, 10))     #参数10是可选参数,作为初始值
   
二、匿名函数lambda
    1.lambda只是一个表达式,函数体比def简单很多。
    2.lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    3.lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。
    
    例子:
    f = lambda x,y: x+y        #x,y是参数,x+y是表达式,然后赋值给f
    print(f)        #返回f的内存地址
    print(f(1,2))    #返回表达式的值
    
    l = [‘alex‘, ‘wupeiqi‘, ‘yuanhao‘]
    res = map(lambda x: x + ‘_SB‘, l)
    print(res)
    print(list(res))
    
    nums = [2,4,6,9]
    res1 = map(lambda x: x**2, nums)
    print(list(res1))
    
    
    
三、递归调用
    在函数调用过程中,直接或间接调用函数本身,这就是函数的递归调用
    例子:
    def age(n):
        if n == 1:
            return 18
        return age(n-1) + 2
    print(age(5))
    
    l = [1, 2, 10,33,53,71,73,75,77,85,101,201,202,999,11111]
    
    def search(find_num,seq):
        if len(seq) == 0:
            print(‘not exists‘)
            return
        mid_index=len(seq)//2
        mid_num=seq[mid_index]
        print(seq,mid_num)
        if find_num > mid_num:
            #in the right
            seq=seq[mid_index+1:]
            search(find_num,seq)
        elif find_num < mid_num:
            #in the left
            seq=seq[:mid_index]
            search(find_num,seq)
        else:
            print(‘find it‘)

    search(77,l)
    
四、包、模块
    import spam
    
    import 导入模块做三件事
    1.产生新的名称空间
    2.以新建的名称空间为全局名称空间,执行文件代码
    3.拿到一个模块名spam,指向spam.py产生的名称空间
    import spam as x    #将spam用x代替,适合模块名过长时使用
    
    from ... import ...
    优点: 方便、不用加前缀
    缺点: 容易跟当前的文件名称冲突
    
    包: 将有联系的模块组织到一起,有效避免模块名称冲突问题,让组织结构更加清晰。
    一个标准的应用程序结构:
    app/
        __init__.py        #__init__.py做一些初始化工作可以是空文件,也可以写一些初始配置
        a/
            __init__.py
            a.py
        b/
            __init__.py
            b.py
     from app.a import a
     from app.b.b import test    # "."左边必须是包名
     a.test()    
     test()
     
     可以将包加入sys.path环境变量的位置,或者把包所在的位置加入到环境变量
时间: 2024-10-11 01:10:46

python学习之函数学习进阶(二)的相关文章

Python虚拟机之函数机制(二)

函数执行时的名字空间 在Python虚拟机之函数机制(一)这一章中,我们对Python中的函数调用机制有个大概的了解,在此基础上,我们再来看一些细节上的问题.在执行MAKE_FUNCTION指令时,调用了PyFunction_New方法,这个方法有一个参数是globals,这个globals最终将称为与函数f对应的PyFrameObject中的global名字空间--f_globals ceval.c case MAKE_FUNCTION: v = POP(); /* code object *

python学习之函数学习进阶

1.名称空间 python有三种名称空间 内置名称空间: 随着python解释器的启动而产生 print(sum) print(max) 全局名称空间: 文件的执行会产生全局名称空间,指的是文件级别的定义名字都会放入该空间 x = 11 if x == 11:     print(x) 局部名称空间: 调用函数时会产生局部名称空间,只在函数调用时临时绑定,调用结束时解绑 x = 1000 def foo():     x = 1     print(x) foo() print(x) 作用域:

python 使用lambda函数 和 list comprehension

python 使用lambda函数 学习资源 lambda函数学习 list comprehension 多维数组初始化 lambda 函数 Python 支持一种有趣的语法,它允许你快速定义单行的最小函数.这些叫做 lambda 的函数,是从 Lisp 借用来的,可以用在任何需要函数的地方. def f(x): return x*2,用lambda函数来替换可以写成:g = lambda x: x*2`g(3)结果是6.(lambda x: x*2)(3)`也是同样的效果. 这是一个 lamb

Python虚拟机之函数机制(三)

参数类别 我们在Python虚拟机之函数机制(一)和Python虚拟机之函数机制(二)这两个章节中,分别PyFunctionObject对象和函数执行时的名字空间.本章,我们来剖析一下函数参数的实现. 在Python中,函数的参数根据形势的不同可以分为四种类别: 位置参数:如f(a, b),a和b称为位置参数 键参数:f(a, b, name="Python"),其中的name="Python"被称为键参数 扩展位置参数:f(a, b, *args),其中*args

Python学习-10.Python函数定义(二)

在Python中定义函数的时候,可以使用参数默认值的方式定义函数 例子: 1 def welcome(who,state='is',action='talking'): 2 print(who,state,action) 调用函数: 1 welcome('Tom') 输出Tom is talking 1 welcome('Tom','was') 输出Tom was talking 1 welcome('Tom',action='sleeping') 输出Tom is sleeping 可见,在参

[Python]学习基础篇:函数的进阶篇

对于函数大家都熟知不过了,但是对于一些函数还是费力的理解,下来我们来看看Python自带的一些函数,在此之前,还是请大家了解什么是高阶函数. 高阶函数:函数中的高阶函数 map()函数 格式:map(func,seq) 返回值:list map函数的作用是将参数函数func作用于seq中的每一个元素,每个元素产生的结果存放进list中. 例如:我们以函数func=x+x*x为例,作用于序列[1,2,3,4,5,6,7,8]上 !/bin/python def func(x):     retur

【python标准库学习】thread,threading(二)多线程同步

继上一篇介绍了python的多线程和基本用法.也说到了python中多线程中的同步锁,这篇就来看看python中的多线程同步问题. 有时候很多个线程同时对一个资源进行修改,这个时候就容易发生错误,看看这个最简单的程序: import thread, time count = 0 def addCount(): global count for i in range(100000): count += 1 for i in range(10): thread.start_new_thread(ad

python常用内置函数学习(持续更新...)

python常用内置函数学习 一.python常用内置函数有哪些 dir() 二.每个内置函数的作用及具体使用 1.dir()不带参数时返回当前范围内(全局.局部)的变量.方法和定义的类型列表:   带参数A时返回参数的属性.方法的列表,如何该参数A对象有__dir__(),该方法被调用,如果不含有该方法,该方法不会报错,而是尽可能多的收集参数对象A的信息   实例: 不带参数,在分别在文件全局调用和在函数中局部调用dir()   带参数   原文地址:https://www.cnblogs.c

黑马程序员——c语言学习心得——函数传递二维数组

黑马程序员——c语言学习心得——函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.   变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯.尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问.那么如何初始化指针变量呢,一般有以下几种方法:   1.初始化空指针   int* pInteger=N