资讯专栏INFORMATION COLUMN

4-函数

why_rookie / 2693人阅读

摘要:可以被函数调用并提取元素的对象称为迭代器对象。判断一个对象是否为迭代器对象将转为对象生成器生成器使用的函数被称为是生成器函数。

通用函数
def fun(*args, **kwargs):
    print(args) # 元组
    print(kwargs) # 字典 关键字传参
匿名函数
lambda x:x*x if x>5
lambda num:"TRUE" if num == 1 else "FALSE"
装饰器
本身是一个闭包,就是一个返回函数的函数 
闭包:把一个函数作为参数,返回一个代替版的函数
        
def getAge(age):
    print("我的年龄是 %d" % age)
def getHeight(height):
    print(height)
            
def outer(paraFun):
    def inner(num):
        # 添加检测条件
        if num < 0:
            num = 12
        paraFun(num)
    return inner
            
outer(getAge) === inner
outer(getAge)(-12)

#语法糖 @后可以继续使用原来函数的名字
def outer(func):
    def inner(num):
        if num < 0:
            num = 99999
         func(num)
    return inner

@outer   # 相当于 getAge  == outer(getAge)
def getAge(age):
    print(age)
# f4 = outer(getAge)
# f4(-90)
getAge(-99)

@outer
def getWeight(ww):
        print(ww)
getWeight(-99) 
偏函数
int("1010",base=2)
def myInt(str):
    return int(str, base=2)
import functools 
newInt = functools.partial(int, base=2)
迭代器
可迭代对象:可以直接作用于for循环的对象,叫做可迭代对象[Iterable] 可以直接作用于for的对象:1、基本数据类型:list 
tuple dict set string 2、generator生成器:带有yield的生成器函数
from collections import Iterable
print(isinstance([], Iterable))  # T
print(isinstance({}, Iterable))  # T
print(isinstance((), Iterable))  # T
print(isinstance("abc", Iterable))  # T
print(isinstance((x for x in range(5)), Iterable))   # T
迭代器:Iterator 迭代器:不仅可以作用于for循环,也可以使用next()
函数不断用并获取下一个值,直到取出最后一个。当取出嘴一个元素时,再继续调用next()时,会提出一个StopIteration错误表示无法继续下一个数据的提取。可以被next()函数调用并提取元素的对象称为迭代器对象。判断一个对象是否为迭代器对象:isinstance(obj,
Iterator)
from  collections import Iterator
print(isinstance([], Iterator))  # F
print(isinstance({}, Iterator))  # F
print(isinstance((), Iterator))  # F
print(isinstance("abc", Iterator))  # F
print(isinstance((x for x in range(5)), Iterator))  # T
        
# 将list、tuple、dict、str转为Iterator对象
a = iter([1, 2, 3]
生成器
生成器:generator:使用yield的函数被称为是生成器函数。使用yield的函数与普通函数的区别:生成器函数是一个返回迭代器的函数,只能用于迭代操作可以认为生成器就是一个迭代器
        
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return

for i in fib(6):
       print(i)
   
   
   # 生成器打印杨辉三角
def Triangle(n):
    l, index = [1], 0
    while index < n:
        yield l
        l = [1] + [l[i] + l[i + 1] for i in range(len(l) - 1)] + [1]
        index += 1
for x in Triangle(10):
    print(x)

闭包
闭包:概念:在函数体内定义的内部函数,并且该内部函数使用的外部函数的变量,外部函数将内部函数作为返回值返回,该内部函数就叫做闭包。

优点:避免变量污染全局环境,我们可以在全局范围内间接使用局部变量。
缺点:数据会长期驻留在内存中,造成内存浪费,在IE浏览器中,极易崩溃,所以请慎重使用。

作用域
built-in Global Enclosing Local
变量查找规则:L->E->G->B
只有module class def lambda 才会引入新的作用域
i = 666
def outer():
    i = 555   # 局部变量
    def inner():
        nonlocal i  # nonlocal 非局部的
        i = 444   #
        print("inner ==", i)
    inner()
    print("outer ==", i)
        
outer() # 444

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41641.html

相关文章

  • 【进阶 6-1 期】JavaScript 高阶函数浅析

    摘要:引言本期开始介绍中的高阶函数,在中,函数是一种特殊类型的对象,它们是。简单来说,高阶函数是一个接收函数作为参数传递或者将函数作为返回值输出的函数。我们来看看使用它们与不使用高阶函数的方案对比。引言 本期开始介绍 JavaScript 中的高阶函数,在 JavaScript 中,函数是一种特殊类型的对象,它们是 Function objects。那什么是高阶函数呢?本节将通过高阶函数的定义来展...

    yiliang 评论0 收藏0
  • 【JS必知必会】高阶函数详解与实战

    摘要:函数作为参数情况,,和是中内置的高阶函数。知道了到底啊什么是高阶函数,有哪些类型的高阶函数。公众号技术栈路线大家好,我是,公众号程序员成长指北作者,这篇文章是必知必会系列的高阶函数讲解。 前言 一道经典面试题: //JS实现一个无限累加的add函数 add(1) //1 add(1)(2) //3 add(1)(2)(3) //6 当大家看到这个面试题的时候,能否在第一时间想到...

    李昌杰 评论0 收藏0
  • 史上最强C语言教程----函数(1)

    摘要:无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。形式参数当函数调用完成之后就自动销毁了。函数的调用传值调用函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。没有找到找到了下标为 目录 1.  函数是什么? 2.  C语言中函数的分类: 2...

    A Loity 评论0 收藏0
  • JS中函数式编程基本原理简介

    摘要:在做了一些研究之后,我发现了函数式编程的概念,比如不变性和纯函数。在这篇文章中,将通大量代码示例来详细介绍函数式编程和一些相关重要概念。该非纯函数接收该值并重新分配,使其值增加。函数式编程不鼓励可变性。纯函数是稳定的一致的和可预测的。 为了保证的可读性,本文采用意译而非直译。 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 在长时间学习和使用面向对象编程之后,咱们...

    tunny 评论0 收藏0
  • 函数 闭包eeva iife

    摘要:概述函数的声明命令函数表达式变量赋值命令后面不带有函数名。如果加上函数名,该函数名只在函数体内部有效,在函数体外部无效。同样的,函数体内部声明的函数,作用域绑定函数体内部。可以通过,达到调用函数自身的目的。 函数 函数是一段可以反复调用的代码块。函数还能接受输入的参数,不同的参数会返回不同的值。 1.概述1.1函数的声明1.2函数的重复声明1.3圆括号运算符,return 语句和递归1...

    AnthonyHan 评论0 收藏0
  • 【译】JavaScript 中的函数式编程原理

    摘要:在这篇文章中,我将通过中的大量代码示例向您详细介绍函数式编程和一些重要概念。注意在函数式编程中不鼓励可变性。纯函数是稳定,一致并且可预测的。 原文:Functional Programming Principles in Javascript作者:TK译者:博轩 经过很长一段时间的学习和面向对象编程的工作,我退后一步,开始思考系统的复杂性。 复杂性是任何使软件难以理解或修改的东西。 -...

    zhigoo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<