魔术常量对文件引入、function handling、递归和迭代【分治】、匿名函数、数组和数组指针内容

1.注意魔术常量被引入的问题
a.php中载入b.php【其中b.php中输出魔术常量__FILE__输出的是b.php的路径】
魔术常量被编译的顺序要在a中代码进行处理之前【可以理解为魔术常量在引入前的编译过程中就已经被预编译】
魔术常量相当于占位符【而不是一个引入文件中的变量】
【注意魔术常量的处理方式】
对文件载入过程的理解进一步【就是文件载入语句在文件中执行时,对被载入文件进行编译和复制(这样保证载入的问题的解决)】
【另外载入文件的作用域问题:载入文件的作用域取决于被载入的位置(例子就是在function中载入某文件,则该文件中变量作用域就处在

function中)】

【把魔术常量看做是一个特例即可】

2.call_user_func_array();//实现自定义函数和参数的传递

3.函数的递归调用!!!【重点】
函数体内再调用函数本身!!!
【递归本身并没有难点,function可以再任意情况下被调用,因为function本身就是一组执行代码的组合,可以被随意调用,只是外层

function一直没有正常return罢了,也就是说function的层结束需要return关键字来进行描述。】
function f1(){
f1();//这里就实现调用,只不过需要对条件进行判断
}
适合递归调用的场景:例如遍历目录这样的情况
调用的情况处理是一致的,就是有一个结束的条件出现【因为这样递归调用的话,能够节省定义函数的次数】
其实递归调用在实际使用情况是比较少用
【只是针对将一个复杂的事情分解,直到事件无法分解为止】

例子:通过递归实现斐波那契数列【后一项是前两项的和】
function f($n){
//首先对基本条件进行筛选
if ($n ==1 ){
return 1;
}elseif($n==2) {
return 1;
}
//开始使用公式进行递归
return f($n-1) + f($n-2);
}
f();//初始化调用
以上便实现了递归

递归的重点:
(1)递归点:什么时候发生递归
(2)递归的出口:什么时候递归结束

其实递归本身并没有任何难度,和直接调用function没有区别,就是调用需要使用的条件进行判断需要注意
【函数的调用本身也不需要太过多虑,就是简单的声明和调用的问题,正常理解即可】

4.迭代
通过迭代进行斐波那契数列的实现
function f($n){
$before_1=1;
$before_2=1;//初始化$n前两项值
//还需要对$n前两项的条件判断
//对前两项进行切换,一直迭代循环,便能一直得到
for($i=3;$i<=$n;$n++){
//迭代掉前两项的值,然后相加即可
}
}
通过迭代处理递归的要素能够很好的回避递归使用场景。

迭代的语法体系就是循环结构【这一点要注意:通过循环来实现递归这样的循环执行的效果】
【所以根本不冲突】
【而且使用迭代的话,效率更好】
迭代和递归都属于分治算法【将一个复杂的问题分开几个小问题,然后再处理】

5.处理函数的函数
function handling【手册中使用】
一些比较常见的处理函数使用
function_exists()【返回一个布尔值】
create_function()【返回一个函数名】【通过这个方法对已有的方法进行重组】
魔术常量__FUNCTION__【在函数内获得当前函数名(例如递归调用中动态调用自身)】

到目前为止创建函数的方法
function+函数名
function+匿名函数
creat_function创建一个比较灵活的函数

6.匿名函数
实现途径是通过closure对象来实现
USE语法【注意】

时间: 2024-11-29 05:17:27

魔术常量对文件引入、function handling、递归和迭代【分治】、匿名函数、数组和数组指针内容的相关文章

在Python中递归函数调用举例and匿名函数lambda求1~100的和及计算阶乘举例

1.递归列出目录里的文件的脚本举例列出目录中的文件可以通过下面方法:os.listdir() In [1]: import os In [4]: os.listdir('/root') Out[4]: ['.tcshrc', '.bash_history', '.bashrc', 'ENV', '.cache', '.config', '.cshrc', '.bash_logout', 'python', '.ssh', 'shell', '.bash_profile', '.ipython',

三元表达式、递归、二分法、匿名函数、内置函数

三元表达式: def max2(x,y): if x>y: return x else: return y res=max2(10,11) print(res) x=10 y=11 三元表达式仅应用于: 1.条件成立返回一个值 2.条件不成立返回一个值 res=x if x>y else y print(res) def max2(x,y): return x if x>y else y print(max2(10,11)) 函数的递归.二分法 函数递归:函数的递归调用,即在函数调用的过

递归,二分法,匿名函数

递归调用:在调用一个函数的过程中,直接或者间接又调用了函数本身,称之为递归调用. 递归的必备的两阶段:一:递推 二:回溯 def foo(): print('abc') foo() foo() import sys print(sys.getrecursionlimit()) sys.getrecursionlimit(200) #设置递归次数 print(sys.getrecursionlimit()) def age(n): if n == 1: return 18 return age(n

Binary Search 的递归与迭代实现及STL中的搜索相关内容

与排序算法不同,搜索算法是比较统一的,常用的搜索除hash外仅有两种,包括不需要排序的线性搜索和需要排序的binary search. 首先介绍一下binary search,其原理很直接,不断地选取有序数组的组中值,比较组中值与目标的大小,继续搜索目标所在的一半,直到找到目标,递归算法可以很直观的表现这个描述: int binarySearchRecursive(int A[], int low, int high, int key) { if (low > high) return -1;

PHP的魔术常量和魔术方法

** 魔术常量和魔术方法 PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法; 所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀. 在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能. 1.魔术常量__LINE__ 文件中的当前行号.__FILE__ 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名.自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对

【Python 生成器 匿名函数 递归 模块及包的导入 正则re】

一.生成器 1.定义 生成器(generator)是一个特殊的迭代器,它的实现更简单优雅,yield是生成器实现__next__()方法的关键.它作为生成器执行的暂停恢复点,可以对yield表达式进行赋值,也可以将yield表达式的值返回. 也就是说,yield是一个语法糖,内部实现支持了迭代器协议,同时yield内部是一个状态机,维护着挂起和继续的状态. yield的功能: 1.相当于为函数封装好__iter__和__next__ 2.return只能返回一次值,函数就终止了,而yield能返

【Python之匿名函数及递归】

一.匿名函数及内置函数补充 1.语法 Python使用lambda关键字创造匿名函数.所谓匿名,意即不再使用def语句这样标准的形式定义一个函数. 语法: lambda [arg1[, arg2, ... argN]]: expression 例: 普通函数 def func(x,y): return x+y print(func) print(func(1,2)) 输出 <function func at 0x102b31f28> 3 等价的匿名函数 #匿名函数 f=lambda x,y:x

【Python3之匿名函数及递归】

一.匿名函数及内置函数补充 1.语法 Python使用lambda关键字创造匿名函数.所谓匿名,意即不再使用def语句这样标准的形式定义一个函数. 语法: lambda [arg1[, arg2, ... argN]]: expression 例: 普通函数 def func(x,y): return x+y print(func) print(func(1,2)) 输出 <function func at 0x102b31f28> 3 等价的匿名函数 #匿名函数 f=lambda x,y:x

在NewLisp中实现匿名函数的递归

匿名函数在很多语言中的表现形式大概如下: (lambda (n)   (* (+ n 1) (- n 1))) 只有参数列表和函数体,而没有名字.在大部分情况下没问题,但是一旦需要用到递归的话,就有点麻烦了,因为不知道如何去递归的调用一个匿名函数. 在学术界中有一些解决这个问题的办法,其中一个就是Y组合子,但是那个太繁琐,而且难以通过宏自动将一个lambda变成可递归形式,没什么好处. 根据历史经验,目前比较好的办法,就是实现一个操作符,匿名函数通过这个操作符来调用自身: (lambda (n)