精华内容
下载资源
问答
  • @入门函数式编程多态嵌套函数函数变量作用域闭包入门Python内置了很多有用的函数,我们可以直接调用。要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。也可以在交互式命令行通过...

    82545f59edd746846e1c94b1eec1f152.png

    「@Author:Runsen」

    近来,越来越多人使用函数式编程(functional programming)。本文对 Python 中的函数式编程技术进行了简单的入门介绍。

    @

    • 入门

    • 函数式编程

    • 多态

    • 嵌套函数

    • 函数变量作用域

    • 闭包

    入门

    Python内置了很多有用的函数,我们可以直接调用。

    要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。

    也可以在交互式命令行通过help(abs)查看abs函数的帮助信息。

    调用abs函数:

    >>> abs(100)
    100
    >>> abs(-20)
    20
    >>> abs(12.34)
    12.34

    函数式编程

    在Python中的函数就是为了实现某一段功能的代码段,可以重复利用。

    就是以后不要重复造轮子,遇到那个场景就用那个函数,就是函数式编程。

    下面,我定义一个 my_func,传入一个Hello World,再打印一个Hello World

    def my_func(message):
        print('Got a message: {}'.format(message))

    # 调用函数 my_func()
    my_func('Hello World')
    # 输出
    Got a message: Hello World

    简单的知识点

    • def是函数的声明
    • my_func是函数的名称
    • message 是函数的参数
    • print 是函数的主体部分
    • 在函数的最后 可以返回调用结果(return 或yield ),也可以不返回

    「定义在前,调用在后」

    def my_sum(a, b):
        return a + b

    result = my_sum(35)
    print(result)

    # 输出
    8

    对于函数的参数可以设定默认值

    def func(param = 0):
        pass

    如果param没有传入,那么参数默认是0,如果传入了参数,就覆盖默认值

    多态

    传入的参数可以接受任何数据类型

    比如,列表

    print(my_sum([12], [34]))

    # 输出
    [1234]

    再比如,字符串

    print(my_sum('hello ''world'))

    # 输出
    hello world


    当然,如果参数数据类型不同,而两者无法相加

    print(my_sum([1, 2], 'hello'))
    TypeError: can only concatenate list (not "str") to list

    同一个函数可以应用到整数,列表,字符串等等的操作称为多态。这可不是变态。

    嵌套函数

    函数嵌套就是函数中有函数,就叫嵌套函数了。

    def f1():
        print('hello')
        def f2():
            print('world')
        f2()
    f1()

    # 输出
    hello
    world

    函数的嵌套保证了内部函数的调用,内部函数只能被外部函数所调用,不会作用于全局域中。

    合理使用函数嵌套,提高运算速度

    比如计算5的阶乘。

    def factorial(input):
        
        if not isinstance(input, int):
            raise Exception('input must be an integer.')
        if input 0:
            raise Exception('input must be greater or equal to 0' )
      
        def inner_factorial(input):
            if input <= 1:
                return 1
            return input * inner_factorial(input-1)
        return inner_factorial(input)


    print(factorial(5))

    120

    函数变量作用域

    如果变量是izai函数内部定义的,称为局部变量,只在函数内部有效,当函数执行完毕,局部变量就会被回收。

    全局变量就是写在函数外面的。

    MIN_VALUE = 1
    MAX_VALUE = 10
    def validation_check(value):
        if value or value > MAX_VALUE:
            raise Exception('validation check fails')

    这里的MIN_VELUE 和MAX_VALUE就是全局变量,但是我们不能在函数的内部随意改变全局变量的值

    MIN_VALUE = 1
    def validation_check(value):
        MIN_VALUE += 1
        
    validation_check(5)

    报错:UnboundLocalError: local variable 'MIN_VALUE' referenced before assignment

    要想改变  必须加上global这个声明

    MIN_VALUE = 1
    def validation_check(value):
        global MIN_VALUE  
        MIN_VALUE += 1
        
    validation_check(5)

    global告诉python解析器,函数内部的变量MIN_VALUE就是定义的全局变量,这里输入的是2,这样修改的全局变量的值

    MIN_VALUE = 1
    MAX_VALUE = 10
    def validation_check():
        MIN_VALUE = 3
        print(MIN_VALUE)
    validation_check()
    print(MIN_VALUE)


    # 3
    # 1

    对于嵌套函数来说,内部函数无法修改外部函数定义的变量,可以访问,想要修改就要加上 nonolocal

    def outer():
        x = "local"
        def inner():
            nonlocal x # nonlocal 关键字表示这里的 x 就是外部函数 outer 定义的变量 x
            x = 'nonlocal'
            print("inner:", x)
        inner()
        print("outer:", x)
    outer()
    # 输出
    inner: nonlocal
    outer: nonlocal

    不加就不会覆盖

    def outer():
        x = "local"
        def inner():
            x = 'nonlocal' # 这里的 x 是 inner 这个函数的局部变量
            print("inner:", x)
        inner()
        print("outer:", x)
    outer()
    # 输出
    inner: nonlocal
    outer: local

    闭包

    函数的闭包其实和函数的嵌套很相似。和嵌套不同,闭包的外部函数返回是一个函数,而不是一个具体的值。

    闭包就是在函数里面调用函数,一般用return来执行,return出内部调用的函数名。

    我们接下来计算下一个数的n次幂,用闭包写如下:

    def nth_power(exponent):
        def exponent_of(base):
            return base ** exponent
        return exponent_of # 返回值是 exponent_of 函数

    square = nth_power(2# 计算一个数的平方
    cube = nth_power(3# 计算一个数的立方 
    square
    # 输出
    .exponent(base)>
    cube# 输出.exponent(base)>
    print(square(2))  # 计算 2 的平方
    print(cube(2)) # 计算 2 的立方# 输出4 # 2^28 # 2^3

    当然,我们也可以通过一个函数来写这个功能:

    def nth_power(base,exponent):
        return base**exponent  

    但是,使用闭包,可以让程序变得更加简洁易懂。

    本文已收录 GitHub,传送门~[1] ,里面更有大厂面试完整考点,欢迎 Star。

    Reference

    [1]

    传送门~: https://github.com/MaoliRUNsen/runsenlearnpy100

    今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、在看、点赞)。

    更多的文章

    点击下面小程序

    1f6b12000f3812d0a4c58ce1eafce198.png

    - END -

    1583d56249b3210472a9b917bf44a67a.png

    展开全文
  • MapReduce的设计灵感来自于函数式编程,这里不打算提...文档中的介绍在这里:map(function, iterable, ...)Apply function to every item of iterable and return a list of the results. If additional iterable ar...

    MapReduce的设计灵感来自于函数式编程,这里不打算提MapReduce,就拿python中的map()函数来学习一下。

    文档中的介绍在这里:

    map(function, iterable, ...)

    Apply function to every item of iterable and return a list of the results. If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. If one iterable is shorter than another it is assumed to be extended withNoneitems. If function isNone, the identity function is assumed; if there are multiple arguments, map() returns a list consisting of tuples containing the corresponding items from all iterables (a kind of transpose operation). The iterable arguments may be a sequence or any iterable object; the result is always a list.

    1、对可迭代函数'iterable'中的每一个元素应用‘function’方法,将结果作为list返回

    >>> def add100(x):

    ... return x+100

    ...

    >>> hh = [11,22,33]

    >>> map(add100,hh)

    [111, 122, 133]

    就像文档中说的:对hh中的元素做了add100,返回了结果的list。

    2、如果给出了额外的可迭代参数,则对每个可迭代参数中的元素‘并行’的应用‘function’。(翻译的不好,这里的关键是‘并行’)

    >>> def abc(a, b, c):

    ... return a*10000 + b*100 + c

    ...

    >>> list1 = [11,22,33]

    >>> list2 = [44,55,66]

    >>> list3 = [77,88,99]

    >>> map(abc,list1,list2,list3)

    [114477, 225588, 336699]

    看到并行的效果了吧!在每个list中,取出了下标相同的元素,执行了abc()。

    3、如果'function'给出的是‘None’,自动假定一个‘identity’函数(这个‘identity’不知道怎么解释,看例子吧)

    >>> list1 = [11,22,33]

    >>> map(None,list1)

    [11, 22, 33]

    >>> list1 = [11,22,33]

    >>> list2 = [44,55,66]

    >>> list3 = [77,88,99]

    >>> map(None,list1,list2,list3)

    [(11, 44, 77), (22, 55, 88), (33, 66, 99)]

    用语言解释好像有点拗口 ,例子应该很容易理解。

    介绍到这里应该差不多了吧!不过还有东西可以挖掘:

    stackoverflow上有人说可以这样理解map():

    map(f, iterable)

    基本上等于:

    [f(x) for x in iterable]

    赶快试一下:

    >>> def add100(x):

    ... return x + 100

    ...

    >>> list1 = [11,22,33]

    >>> map(add100,list1)

    [101, 102, 103]

    >>> [add100(i) for i in list1]

    [101, 102, 103]

    哦,输出结果一样。原来map()就是列表推导式啊!要是这样想就错了:这里只是表面现象!再来个例子看看:

    >>> def abc(a, b, c):

    ... return a*10000 + b*100 + c

    ...

    >>> list1 = [11,22,33]

    >>> list2 = [44,55,66]

    >>> list3 = [77,88,99]

    >>> map(abc,list1,list2,list3)

    [114477, 225588, 336699]

    这个例子我们在上面看过了,若是用列表推导应该怎么写呢?我想是这样的:

    [abc(a,b,c) for a in list1 for b in list2 for c in list3]

    但是看到结果,发现根本不是这么回事:

    [114477, 114488, 114499, 115577, 115588, 115599, 116677, 116688, 116699, 224477, 224488, 224499, 225577, 225588, 225599, 226677, 226688, 226699, 334477, 334488, 334499, 335577, 335588, 335599, 336677, 336688, 336699]

    这便是上面列表推导的结果。怎么会这么多?当然了列表推导可以这么写:

    result = []

    for a in list1:

    for b in list2:

    for c in list3:

    result.append(abc(abc))

    原来如此,若是将三个list看做矩阵的话:

    map()只做了列上面的运算,而列表推导(也就是嵌套for循环)做了笛卡尔乘积。

    OK,就写到这里。仅个人理解,如有差错请指正,多谢!

    上面的例子有些来自于这里:

    展开全文
  • .sort()和.reverse()更改列表并返回None参见mutable sequence documentation:The sort() and reverse() methods modify the list in place for economy of space when sorting or reversing a large list. To ...

    .sort()和.reverse()更改列表并返回None参见

    mutable sequence documentation:

    The sort() and reverse() methods modify the list in place for economy of space when sorting or reversing a large list. To remind you that they operate by side effect, they don’t return the sorted or reversed list.

    改为:

    a.sort()

    print(a)

    a.reverse()

    print(a)

    print(sorted(a)) # just sorted

    print(list(reversed(a))) # just reversed

    print(a[::-1]) # reversing by using a negative slice step

    print(sorted(a, reverse=True)) # sorted *and* reversed

    这些方法返回一个新列表,并保持原始输入列表不变.

    演示,就地排序和倒车:

    >>> a = [66.25, 333, 333, 1, 1234.5]

    >>> a.sort()

    >>> print(a)

    [1, 66.25, 333, 333, 1234.5]

    >>> a.reverse()

    >>> print(a)

    [1234.5, 333, 333, 66.25, 1]

    并创建新的排序和反转列表:

    >>> a = [66.25, 333, 333, 1, 1234.5]

    >>> print(sorted(a))

    [1, 66.25, 333, 333, 1234.5]

    >>> print(list(reversed(a)))

    [1234.5, 1, 333, 333, 66.25]

    >>> print(a[::-1])

    [1234.5, 1, 333, 333, 66.25]

    >>> print(sorted(a, reverse=True))

    [1234.5, 333, 333, 66.25, 1]

    >>> a # input list is untouched

    [66.25, 333, 333, 1, 1234.5]

    展开全文
  • I was trying to test how the lists in python works according to a tutorial I was reading.When I tried to use list.sort() or list.reverse(), the interpreter gives me None.Please let me know how I can g...

    I was trying to test how the lists in python works according to a tutorial I was reading.

    When I tried to use list.sort() or list.reverse(), the interpreter gives me None.

    Please let me know how I can get a result from these two methods:

    a = [66.25, 333, 333, 1, 1234.5]

    print(a.sort())

    print(a.reverse())

    解决方案

    .sort() and .reverse() change the list in place and return None See the mutable sequence documentation:

    The sort() and reverse() methods modify the list in place for economy of space when sorting or reversing a large list. To remind you that they operate by side effect, they don’t return the sorted or reversed list.

    Do this instead:

    a.sort()

    print(a)

    a.reverse()

    print(a)

    or use the sorted() and reversed() functions.

    print(sorted(a)) # just sorted

    print(list(reversed(a))) # just reversed

    print(a[::-1]) # reversing by using a negative slice step

    print(sorted(a, reverse=True)) # sorted *and* reversed

    These methods return a new list and leave the original input list untouched.

    Demo, in-place sorting and reversing:

    >>> a = [66.25, 333, 333, 1, 1234.5]

    >>> a.sort()

    >>> print(a)

    [1, 66.25, 333, 333, 1234.5]

    >>> a.reverse()

    >>> print(a)

    [1234.5, 333, 333, 66.25, 1]

    And creating new sorted and reversed lists:

    >>> a = [66.25, 333, 333, 1, 1234.5]

    >>> print(sorted(a))

    [1, 66.25, 333, 333, 1234.5]

    >>> print(list(reversed(a)))

    [1234.5, 1, 333, 333, 66.25]

    >>> print(a[::-1])

    [1234.5, 1, 333, 333, 66.25]

    >>> print(sorted(a, reverse=True))

    [1234.5, 333, 333, 66.25, 1]

    >>> a # input list is untouched

    [66.25, 333, 333, 1, 1234.5]

    展开全文
  • <p>I'm trying to fetch some data using jQuery ajax method. here is my code: <pre><code>$('body').on('click','.showSlots', function() { var screen_Id = $(this).attr('id'); //alert(screen_Id); $.ajax...
  • <p>I have added the following code to try and add a table to an existing function within a WordPress plugin. <p>The code I am trying to add below just results in a blank page on my site (i.e Does ...
  • If the width of the list box is equal to or greater than this value, the horizontal scroll bar is hidden or, if the combo box has the CBS_DISABLENOSCROLL style, disabled. 但事实是没有任何卵用 这是为...
  • <p>Inside a function I need to include a file. The file I need to include contains a query. The result of the included file is <pre><code><?php $list = $kenmerk_sql->fetch_assoc(); </code></...
  • //Get the id of the tournament selected in the list } </script> </head> <body> <div class="container"> <p class="help-block"> How to Ask </br> Is your ...
  • <p>I am new to angular js and i am working on monaca ide to make a hybrid app which uses onsen-ui and i wrote the following code and when the response comes from the server it isn't using the ...
  • div class="comment-form-emoji-list" id="ID_EmojiList">'. showAllEmoje() . '</div> </div> <textarea id="comment" name="comment" cols="45" rows="4" required placeholder="دیدگا...
  • Lambda函数

    2020-06-09 10:58:24
    ,读作 goes to 作用 直接使用=>查询,代替foreach或for循环 Lambda表达式是一种匿名函数,Lambda 用在基于方法的 LINQ 查询中,作为诸如 Where 和 Where 等标准查询运算符方法的参数 简单举例 返回classcode为...
  • For that I'm trying to load data using <code>AJAX function, but my <code>AJAX call</code> not working on button click event. <p><strong><em>Here is my Code:</em></strong> <p><strong>Controller:...
  • 解释一下我的代码吧,dfs(TreeNode *root) 函数作用是,整理以root为根的树,将其展平,并且把最右节点的地址返回出来。如此一来便好理解很多,当root是单独一个节点时,不需要展平,并且最右节点就是他自己,直接...
  • list is available. <p>A search on Stack Overflow gave me exactly 1 question: <a href="https://stackoverflow.com/questions/54586451/read-encrypted-php-files-using-ajax">Read encrypted ...
  • I have a view page with a list of details of users and inside that list there is a tag with ng-click="myName()". I have declared this function inside my js file and this function works fine. <pre>...
  • a href="list_cadmin.php" onclick="edit(\''.$key.'\',\''.$b.'\')"><span class="bluetext">DEACTIVATE</span>'; </code></pre> <p>the function edit() is something like this: <pre><code>...
  • b.classList += "twitter-share-button"; b.setAttribute("data-text", "<?php echo $post_author_nickname ?>" ); }; </script> <?php } </code></pre> <pre><code>"< ? php echo $post_...
  • python函数中的参数*args和**kwargs的含义和用法

    千次阅读 多人点赞 2018-06-05 23:28:50
    python函数中的参数*args和**kwargs的含义和用法 在python语言写成的模块中的函数里,常常可以看到函数的参数表列...首先,解释星号的作用,一个星号*的作用是将tuple或者list中的元素进行unpack,分开传入,作为...
  • map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。 例如: L = [1, 2, 3] def int_to_str(L): return map(str, L) print(list(int_to...
  • list($encoded_sig, $payload) = explode('.', $signed_request, 2); // decode the data $sig = base64_url_decode($encoded_sig); $data = json_decode(base64_url_decode($payload), true); if (strtoupper...
  • echo Select2::activeMultiSelect($categoryModel, "cat_name", CHtml::listData( Category::model()->findAllByAttributes(array('cat_type' => 'Recipe')), 'id', 'cat_name'), array( 'placeholder' =&...
  • 【Python】zip 函数

    2019-05-05 14:11:29
    Backto Python Index zip 函数是Python里面具有代表性、超好用的 built-in 函数之一。其作用就是,给定任意多个 sequence,把相同下标的元素组合成tuple,再返回。简化了一大票操作。 对于Python2 中的 zip 返回的...
  • 在这里将用到的是filter函数对其进行筛选,它的作用就相当于原生态的Java中的if语句,在里面进行数据的判断,处理完后再用collect(Collectors.toList())转化为List集合,仅一行代码就可以实现对数据的处理,如果...
  • R语言apply()函数用法(转)

    千次阅读 2019-03-31 15:28:11
    R语言apply()函数用法 ...Retruns a vector or array or list of values obtained by applying a function to margins of an array or matrix. 就是说apply把一个function作用到array或者matrix的margins(可以理解...
  • 上一部分是一个demo的分析,怕代码太多,造成混乱,在这里来分析里面涉及的的...% function to read the info of images into a list function filelist = readImageNames(srcpath) if exist('srcpath','var')~=1 ...
  • R语言apply()函数用法

    2017-04-06 16:23:00
    Retruns a vector or array or list of values obtained by applying a function to margins of an array or matrix. 就是说apply把一个function作用到array或者matrix的margins(可以理解为数组的每一行或者每一列...
  • Python进阶 map,filter, reduce是python常用的built-in function。 且常与lambda表达式一起用。...作用:map的作用是将一个序列的元素(通常是list),作为function的参数传入,返回list结构的结果. 用处:当我们想要...
  • 几个以前项目中使用的函数 (转) //作用:把ListBox中的全部内容转换成一个字符串,各个字段间用,分隔 // //参数:Lists,需要转换的ListBox.items ...//返回值:转换好的字符串 ...public string ListToStr

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 149
精华内容 59
关键字:

tolist函数作用