函数调用

面向过程和面向对象及面向对象的三大特征

痴心易碎 提交于 2020-02-09 07:39:17
新手继续,大牛可以关闭浏览页了。 英文及缩写 :   面向过程:procedure oriented programming POP   面向对象:object oriented programming OOP 面向对象和面向过程的 历程 :   面向过程编程采取的是时间换空间的策略,因为在早期计算机配置低 ,内存小,如何节省内存则成了首要任务,哪怕是运行的时间更长。随着硬件技术的发展,硬件不再成为瓶颈,相反更好的模拟现实世界、系统的可维护性等问题凸显出来,于是面向对象设计应运而生。当下:应用在 PC 机上的一般应用系统,由于不太需要考虑硬件的限制,而系统的可维护性等方面却要求很高,一般采用面向对象方式;而在内存限制有所要求的嵌入式系统,则大多采用面向过程方式进行设计编程。 定义 :   面向过程是分析解决问题的步骤,然后用函数把这些步骤一步一步的实现,然后在使用的时候一一调用则可。面向对象是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。下面举一例说明面向过程和面向对象编程。 首先使用面向过程: 1、开始游戏, 2、黑子先走, 3、绘制画面, 4、判断输赢, 5、轮到白子, 6、绘制画面, 7、判断输赢, 8、返回步骤2, 9、输出最后结果。 把上面每个步骤用分别的函数来实现,问题就解决了。

JS this用法详解

孤街醉人 提交于 2020-02-09 07:15:51
随着对 js 的深入学习和使用,你会发现它里面包含了很多令人困惑的机制,比如对象、闭包、原型链继承等等    1、this是啥?   简言之,this是 JavaScript语言 中定义的众多关键字之一,它的特殊在于它自动定义于每一个函数域内,但是this倒地指引啥东西却让很多人张二摸不着头脑。这里我们留个小悬念,希望看完这篇文章了你能回答出来this到底指引个甚。    2、this有啥用?   那边观众又该为了,既然this这么难以理解,那么为个甚还要用它呢?我们来看个例子: function identify() { return this .name.toUpperCase(); } function sayHello() { var greeting = "Hello, I'm " + identify.call( this ); console.log( greeting ); } var person1= { name: "Kyle" }; var person2= { name: "Reader" }; identify.call( person1); // KYLE identify.call( person2); // READER sayHello.call( person1); // Hello, I'm KYLE sayHello.call(

js 函数讲解

这一生的挚爱 提交于 2020-02-09 07:15:32
函数 来自 《JavaScript 标准参考教程(alpha)》 ,by 阮一峰 目录 概述 函数的声明 函数的重复声明 圆括号运算符,return 语句和递归 第一等公民 函数名的提升 不能在条件语句中声明函数 函数的属性和方法 name 属性 length 属性 toString() 函数作用域 定义 函数内部的变量提升 函数本身的作用域 参数 概述 参数的省略 传递方式 同名参数 arguments 对象 函数的其他知识点 闭包 立即调用的函数表达式(IIFE) eval 命令 参考链接 函数是一段可以反复调用的代码块。函数还能接受输入的参数,不同的参数会返回不同的值。 概述 函数的声明 JavaScript 有三种声明函数的方法。 (1)function 命令 function 命令声明的代码区块,就是一个函数。 function 命令后面是函数名,函数名后面是一对圆括号,里面是传入函数的参数。函数体放在大括号里面。 function print(s) { console.log(s); } 上面的代码命名了一个 print 函数,以后使用 print() 这种形式,就可以调用相应的代码。这叫做函数的声明(Function Declaration)。 (2)函数表达式 除了用 function 命令声明函数,还可以采用变量赋值的写法。 var print =

Python3 函数式编程

这一生的挚爱 提交于 2020-02-09 05:20:36
  函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。   函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! 变量可以指向函数 以Python内置的求绝对值的函数 abs() 为例,调用该函数可以获取一个煺的绝对值;但是,如果只写 abs 呢? >>> abs <built-in function abs> 可见, abs(-10) 是函数调用,而 abs 是函数本身 要获得函数调用结果,我们可以把结果赋值给变量,但是,如果把函数本身赋值给变量呢? >>> f = abs >>> f <built-in function abs> 结论:函数本身也可以赋值给变量,即:变量可以指向函数。 函数名也是变量 那么函数名是什么呢?函数名其实就是指向函数的变量!对于 abs() 这个函数,完全可以把函数名 abs 看成变量,它指向一个可以计算绝对值的函数! 如果把 abs 指向其他对象,会有什么情况发生? >>> abs = 10 >>> abs(-10) Traceback (most recent call last)

JS高级技巧

。_饼干妹妹 提交于 2020-02-09 00:26:04
//region安全的类型检测 //可靠的方法:在任何值上调用原生toString()方法,都会返回一个[object NativeConstructorName]格式的字符串。每个类内部都有一个[Class]属性 这个属性指定了对应的构造函数名 var va = []; //alert( Object.prototype.toString.call( va ) );//[object Array] //endregion //region作用域安全的构造函数 function Person1( name, age ) { this.name = name; this.age = age; } var person1 = new Person1( "zodiac", 22 ); //每当使用new时 构造函数内的this对象会指向新创建的对象示例 //当没有使用new创建构造函数时出错 直接调用构造函数 this会映射到全局window对象 person1 = Person1( "zodiac", 22 ); // alert(window.name);//"zodiac" //解决方案: function Person2( name, age ) {//instanceof用来在运行时指出对象是否是特定类的一个实例 if ( this instanceof Person2 ) {

Python 生成器

孤者浪人 提交于 2020-02-08 23:39:15
生成器 Generator 是迭代器的一种. Review Iterator 上篇呢, 对 迭代器 有过谈到, 从 迭代过程, 迭代对象, 迭代器都进行了说明, 首先要理解概念, 其实理解词性就可以. 迭代器 对 可迭代对象 进行 迭代 . 从主谓宾上就理清了这几个名词. 更通俗一般地理解: 迭代: 在代码中表现为对 某个对象进行 for 遍历 的过程 (包含了 next()) 可迭代对象: 能够被 遍历 的对象, 如 list, tuple, str, dict, range, enumerate, zip .... 迭代器: 能够被 next() 函数调用, 并不断返回下一个值的对象. 即实现了 __ iter __ 和 __ next __ 方法. for 循环原理: 会先调用 __ iter __ 方法, 然后不断调用 __ next __ 方法, 直到捕捉到异常类 StopIteration # for的原理 class A: def __iter__(self): print("__iter__ is called") return self def __next__(self): print("__next__ is called") for i in range(3): print(i) raise StopIteration if __name__ == '_

JS高级技巧(简洁版)

隐身守侯 提交于 2020-02-08 23:17:01
高级函数 由于在 JS 中,所有的函数都是对象,所以使用函数指针十分简单,也是这些东西使 JS 函数有趣且强大 安全的类型检测 JS 内置的类型检测机制并不是完全可靠的 typeof 操作符返回一个字符串,表示未经计算的操作数的类型,在大多数情况下很靠谱,但是当然还有例外 正则表达式 typeof /s/ === 'function'; // Chrome 1-12 , 不符合 ECMAScript 5.1 typeof /s/ === 'object'; // Firefox 5+ , 符合 ECMAScript 5.1 NULL typeof null === 'object'; // 从一开始出现JavaScript就是这样的 在 JavaScript 最初的实现中, JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00 ),因此, null 的类型标签也成为了 0, typeof null 就错误的返回了 object instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性 语法 object instanceof constructor(要检测的对象 instanceof 构造函数) 但是在浏览器中

python学习之路4

这一生的挚爱 提交于 2020-02-08 22:51:08
一、字符编码与转码 1.在python2默认编码是ASCII, python3里默认是utf-8 2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间 3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string in python3 #-*-coding:gb2312 -*- #这个也可以去掉 __author__ = 'xxx' import sys print(sys.getdefaultencoding()) msg = "姆巴佩" #msg_gb2312 = msg.decode("utf-8").encode("gb2312") msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔,如果是py2需先解码成unicode再编码成gb2312 gb2312_to_unicode = msg_gb2312.decode("gb2312") gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8")

Python学习week4

五迷三道 提交于 2020-02-08 22:50:14
装饰器:本质是函数,用来装饰其他的函数,为其它函数添加附加功能。 原则:不能改变被装饰函数的源代码和调用方式。 1、函数即‘变量’,定义一个函数相当于把函数体赋值给函数名,匿名函数相当于只有函数体没有函数名 def func1(): print('in the function') func2=func1 #和普通的整数赋值一样:a=2 b=a print(b) func2() 2、高阶函数 3、嵌套函数 装饰器=高阶函数+嵌套函数 高阶函数: 1、把一个函数名当作实参传递给另外一个函数;(在不修改被装饰函数源代码的情况下为其添加功能) 2、返回值中包含函数名。(不修改函数的调用方式) import time def bar(): time.sleep(2) print('in the bar') def timer(func): start_time=time.time() func() stop_time=time.time() print('the time of running is %s'%(stop_time-start_time)) timer(bar) 输出: in the bar the time of running is 2.0002079010009766 函数执行计时器 import time def bar(): time.sleep(2) print(

可重入函数

 ̄綄美尐妖づ 提交于 2020-02-08 22:18:28
一、可重入函数 1)什么是可重入性? 可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。 2)可重入函数: 不为连续的调用持有静态数据。 不返回指向静态数据的指针;所有数据都由函数的调用者提供。 使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。 如果必须访问全局变量,记住利用互斥信号量来保护全局变量。 绝不调用任何不可重入函数。 3)不可重入函数: 函数中使用了静态变量,无论是全局静态变量还是局部静态变量。 函数返回静态变量。 函数中调用了不可重入函数。 函数体内使用了静态的数据结构; 函数体内调用了malloc()或者free()函数; 函数体内调用了其他标准I/O函数。 函数是singleton中的成员函数而且使用了不使用线程独立存储的成员变量 。 总的来说,如果一个函数在重入条件下使用了未受保护的共享的资源,那么它是不可重入的。 4)示例 在多线程条件下,函数应当是线程安全的,进一步,更强的条件是可重入的。可重入函数保证了在多线程条件下,函数的状态不会出现错误